summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/language/statementList
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/tests/test262/language/statementList')
-rw-r--r--js/src/tests/test262/language/statementList/block-array-literal-with-item.js46
-rw-r--r--js/src/tests/test262/language/statementList/block-array-literal.js46
-rw-r--r--js/src/tests/test262/language/statementList/block-arrow-function-assignment-expr.js57
-rw-r--r--js/src/tests/test262/language/statementList/block-arrow-function-functionbody.js57
-rw-r--r--js/src/tests/test262/language/statementList/block-block-with-labels.js42
-rw-r--r--js/src/tests/test262/language/statementList/block-block.js42
-rw-r--r--js/src/tests/test262/language/statementList/block-expr-arrow-function-boolean-literal.js59
-rw-r--r--js/src/tests/test262/language/statementList/block-let-declaration.js40
-rw-r--r--js/src/tests/test262/language/statementList/block-regexp-literal-flags.js44
-rw-r--r--js/src/tests/test262/language/statementList/block-regexp-literal.js44
-rw-r--r--js/src/tests/test262/language/statementList/block-with-statment-array-literal-with-item.js47
-rw-r--r--js/src/tests/test262/language/statementList/block-with-statment-array-literal.js47
-rw-r--r--js/src/tests/test262/language/statementList/block-with-statment-arrow-function-assignment-expr.js58
-rw-r--r--js/src/tests/test262/language/statementList/block-with-statment-arrow-function-functionbody.js58
-rw-r--r--js/src/tests/test262/language/statementList/block-with-statment-block-with-labels.js43
-rw-r--r--js/src/tests/test262/language/statementList/block-with-statment-block.js43
-rw-r--r--js/src/tests/test262/language/statementList/block-with-statment-expr-arrow-function-boolean-literal.js60
-rw-r--r--js/src/tests/test262/language/statementList/block-with-statment-let-declaration.js41
-rw-r--r--js/src/tests/test262/language/statementList/block-with-statment-regexp-literal-flags.js45
-rw-r--r--js/src/tests/test262/language/statementList/block-with-statment-regexp-literal.js45
-rw-r--r--js/src/tests/test262/language/statementList/browser.js0
-rw-r--r--js/src/tests/test262/language/statementList/class-array-literal-with-item.js42
-rw-r--r--js/src/tests/test262/language/statementList/class-array-literal.js42
-rw-r--r--js/src/tests/test262/language/statementList/class-arrow-function-assignment-expr.js52
-rw-r--r--js/src/tests/test262/language/statementList/class-arrow-function-functionbody.js52
-rw-r--r--js/src/tests/test262/language/statementList/class-block-with-labels.js38
-rw-r--r--js/src/tests/test262/language/statementList/class-block.js38
-rw-r--r--js/src/tests/test262/language/statementList/class-expr-arrow-function-boolean-literal.js54
-rw-r--r--js/src/tests/test262/language/statementList/class-let-declaration.js36
-rw-r--r--js/src/tests/test262/language/statementList/class-regexp-literal-flags.js40
-rw-r--r--js/src/tests/test262/language/statementList/class-regexp-literal.js40
-rw-r--r--js/src/tests/test262/language/statementList/eval-block-array-literal-with-item.js50
-rw-r--r--js/src/tests/test262/language/statementList/eval-block-array-literal.js49
-rw-r--r--js/src/tests/test262/language/statementList/eval-block-arrow-function-assignment-expr.js59
-rw-r--r--js/src/tests/test262/language/statementList/eval-block-arrow-function-functionbody.js59
-rw-r--r--js/src/tests/test262/language/statementList/eval-block-block-with-labels.js44
-rw-r--r--js/src/tests/test262/language/statementList/eval-block-block.js44
-rw-r--r--js/src/tests/test262/language/statementList/eval-block-expr-arrow-function-boolean-literal.js61
-rw-r--r--js/src/tests/test262/language/statementList/eval-block-let-declaration.js42
-rw-r--r--js/src/tests/test262/language/statementList/eval-block-regexp-literal-flags.js48
-rw-r--r--js/src/tests/test262/language/statementList/eval-block-regexp-literal.js48
-rw-r--r--js/src/tests/test262/language/statementList/eval-block-with-statment-array-literal-with-item.js52
-rw-r--r--js/src/tests/test262/language/statementList/eval-block-with-statment-array-literal.js52
-rw-r--r--js/src/tests/test262/language/statementList/eval-block-with-statment-arrow-function-assignment-expr.js63
-rw-r--r--js/src/tests/test262/language/statementList/eval-block-with-statment-arrow-function-functionbody.js63
-rw-r--r--js/src/tests/test262/language/statementList/eval-block-with-statment-block-with-labels.js48
-rw-r--r--js/src/tests/test262/language/statementList/eval-block-with-statment-block.js48
-rw-r--r--js/src/tests/test262/language/statementList/eval-block-with-statment-expr-arrow-function-boolean-literal.js65
-rw-r--r--js/src/tests/test262/language/statementList/eval-block-with-statment-let-declaration.js46
-rw-r--r--js/src/tests/test262/language/statementList/eval-block-with-statment-regexp-literal-flags.js50
-rw-r--r--js/src/tests/test262/language/statementList/eval-block-with-statment-regexp-literal.js50
-rw-r--r--js/src/tests/test262/language/statementList/eval-class-array-literal-with-item.js46
-rw-r--r--js/src/tests/test262/language/statementList/eval-class-array-literal.js45
-rw-r--r--js/src/tests/test262/language/statementList/eval-class-arrow-function-assignment-expr.js54
-rw-r--r--js/src/tests/test262/language/statementList/eval-class-arrow-function-functionbody.js54
-rw-r--r--js/src/tests/test262/language/statementList/eval-class-block-with-labels.js40
-rw-r--r--js/src/tests/test262/language/statementList/eval-class-block.js40
-rw-r--r--js/src/tests/test262/language/statementList/eval-class-expr-arrow-function-boolean-literal.js56
-rw-r--r--js/src/tests/test262/language/statementList/eval-class-let-declaration.js38
-rw-r--r--js/src/tests/test262/language/statementList/eval-class-regexp-literal-flags.js44
-rw-r--r--js/src/tests/test262/language/statementList/eval-class-regexp-literal.js44
-rw-r--r--js/src/tests/test262/language/statementList/eval-fn-array-literal-with-item.js47
-rw-r--r--js/src/tests/test262/language/statementList/eval-fn-array-literal.js46
-rw-r--r--js/src/tests/test262/language/statementList/eval-fn-arrow-function-assignment-expr.js56
-rw-r--r--js/src/tests/test262/language/statementList/eval-fn-arrow-function-functionbody.js56
-rw-r--r--js/src/tests/test262/language/statementList/eval-fn-block-with-labels.js41
-rw-r--r--js/src/tests/test262/language/statementList/eval-fn-block.js41
-rw-r--r--js/src/tests/test262/language/statementList/eval-fn-expr-arrow-function-boolean-literal.js58
-rw-r--r--js/src/tests/test262/language/statementList/eval-fn-let-declaration.js39
-rw-r--r--js/src/tests/test262/language/statementList/eval-fn-regexp-literal-flags.js45
-rw-r--r--js/src/tests/test262/language/statementList/eval-fn-regexp-literal.js45
-rw-r--r--js/src/tests/test262/language/statementList/fn-array-literal-with-item.js43
-rw-r--r--js/src/tests/test262/language/statementList/fn-array-literal.js43
-rw-r--r--js/src/tests/test262/language/statementList/fn-arrow-function-assignment-expr.js54
-rw-r--r--js/src/tests/test262/language/statementList/fn-arrow-function-functionbody.js54
-rw-r--r--js/src/tests/test262/language/statementList/fn-block-with-labels.js39
-rw-r--r--js/src/tests/test262/language/statementList/fn-block.js39
-rw-r--r--js/src/tests/test262/language/statementList/fn-expr-arrow-function-boolean-literal.js56
-rw-r--r--js/src/tests/test262/language/statementList/fn-let-declaration.js37
-rw-r--r--js/src/tests/test262/language/statementList/fn-regexp-literal-flags.js41
-rw-r--r--js/src/tests/test262/language/statementList/fn-regexp-literal.js41
-rw-r--r--js/src/tests/test262/language/statementList/shell.js0
82 files changed, 3821 insertions, 0 deletions
diff --git a/js/src/tests/test262/language/statementList/block-array-literal-with-item.js b/js/src/tests/test262/language/statementList/block-array-literal-with-item.js
new file mode 100644
index 0000000000..83fce02a08
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/block-array-literal-with-item.js
@@ -0,0 +1,46 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/array-literal-with-item.case
+// - src/statementList/default/block.template
+/*---
+description: Array Literal with items (Valid syntax of StatementList starting with a BlockStatement)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Statement:
+ BlockStatement
+
+ BlockStatement:
+ Block
+
+ Block:
+ { StatementList_opt }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ ArrayLiteral[Yield, Await]:
+ [ Elision_opt ]
+ [ ElementList ]
+ [ ElementList , Elision_opt ]
+---*/
+
+
+{}[42];
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/block-array-literal.js b/js/src/tests/test262/language/statementList/block-array-literal.js
new file mode 100644
index 0000000000..3c3fabd512
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/block-array-literal.js
@@ -0,0 +1,46 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/array-literal.case
+// - src/statementList/default/block.template
+/*---
+description: Array Literal (Valid syntax of StatementList starting with a BlockStatement)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Statement:
+ BlockStatement
+
+ BlockStatement:
+ Block
+
+ Block:
+ { StatementList_opt }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ ArrayLiteral[Yield, Await]:
+ [ Elision_opt ]
+ [ ElementList ]
+ [ ElementList , Elision_opt ]
+---*/
+
+
+{}[];
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/block-arrow-function-assignment-expr.js b/js/src/tests/test262/language/statementList/block-arrow-function-assignment-expr.js
new file mode 100644
index 0000000000..7e9da64f2f
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/block-arrow-function-assignment-expr.js
@@ -0,0 +1,57 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/arrow-function-assignment-expr.case
+// - src/statementList/default/block.template
+/*---
+description: Arrow Function with an AssignmentExpression (Valid syntax of StatementList starting with a BlockStatement)
+esid: prod-StatementList
+features: [arrow-function]
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Statement:
+ BlockStatement
+
+ BlockStatement:
+ Block
+
+ Block:
+ { StatementList_opt }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ ...
+
+ AssignmentExpression:
+ ConditionalExpression
+ [+Yield]YieldExpression
+ ArrowFunction
+
+ ArrowFunction:
+ ArrowParameters [no LineTerminator here] => ConciseBody
+
+ ConciseBody:
+ [lookahead ≠ {] AssignmentExpression
+ { FunctionBody }
+
+---*/
+
+
+{}() => 42;
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/block-arrow-function-functionbody.js b/js/src/tests/test262/language/statementList/block-arrow-function-functionbody.js
new file mode 100644
index 0000000000..2c2452cf7d
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/block-arrow-function-functionbody.js
@@ -0,0 +1,57 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/arrow-function-functionbody.case
+// - src/statementList/default/block.template
+/*---
+description: Arrow Function with a Function Body (Valid syntax of StatementList starting with a BlockStatement)
+esid: prod-StatementList
+features: [arrow-function]
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Statement:
+ BlockStatement
+
+ BlockStatement:
+ Block
+
+ Block:
+ { StatementList_opt }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ ...
+
+ AssignmentExpression:
+ ConditionalExpression
+ [+Yield]YieldExpression
+ ArrowFunction
+
+ ArrowFunction:
+ ArrowParameters [no LineTerminator here] => ConciseBody
+
+ ConciseBody:
+ [lookahead ≠ {] AssignmentExpression
+ { FunctionBody }
+
+---*/
+
+
+{}() => { return 42; };
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/block-block-with-labels.js b/js/src/tests/test262/language/statementList/block-block-with-labels.js
new file mode 100644
index 0000000000..04dc5f98b5
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/block-block-with-labels.js
@@ -0,0 +1,42 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/block-with-labels.case
+// - src/statementList/default/block.template
+/*---
+description: Block with a label (Valid syntax of StatementList starting with a BlockStatement)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Statement:
+ BlockStatement
+
+ BlockStatement:
+ Block
+
+ Block:
+ { StatementList_opt }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ // lookahead here prevents capturing an Object literal
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+---*/
+
+
+{}{x: 42};
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/block-block.js b/js/src/tests/test262/language/statementList/block-block.js
new file mode 100644
index 0000000000..bf019e1529
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/block-block.js
@@ -0,0 +1,42 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/block.case
+// - src/statementList/default/block.template
+/*---
+description: Block (Valid syntax of StatementList starting with a BlockStatement)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Statement:
+ BlockStatement
+
+ BlockStatement:
+ Block
+
+ Block:
+ { StatementList_opt }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ // lookahead here prevents capturing an Object literal
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+---*/
+
+
+{}{}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/block-expr-arrow-function-boolean-literal.js b/js/src/tests/test262/language/statementList/block-expr-arrow-function-boolean-literal.js
new file mode 100644
index 0000000000..134558c960
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/block-expr-arrow-function-boolean-literal.js
@@ -0,0 +1,59 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/expr-arrow-function-boolean-literal.case
+// - src/statementList/default/block.template
+/*---
+description: Expression with an Arrow Function and Boolean literal (Valid syntax of StatementList starting with a BlockStatement)
+esid: prod-StatementList
+features: [arrow-function]
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Statement:
+ BlockStatement
+
+ BlockStatement:
+ Block
+
+ Block:
+ { StatementList_opt }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ Expression:
+ AssignmentExpression
+ Expression , AssignmentExpression
+
+ AssignmentExpression:
+ ConditionalExpression
+ [+Yield]YieldExpression
+ ArrowFunction
+
+ ArrowFunction:
+ ArrowParameters [no LineTerminator here] => ConciseBody
+
+ ConciseBody:
+ [lookahead ≠ {] AssignmentExpression
+ { FunctionBody }
+
+---*/
+
+
+{}() => 1, 42;
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/block-let-declaration.js b/js/src/tests/test262/language/statementList/block-let-declaration.js
new file mode 100644
index 0000000000..1367ef4ffa
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/block-let-declaration.js
@@ -0,0 +1,40 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/let-declaration.case
+// - src/statementList/default/block.template
+/*---
+description: LexicalDeclaration using Let (Valid syntax of StatementList starting with a BlockStatement)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Statement:
+ BlockStatement
+
+ BlockStatement:
+ Block
+
+ Block:
+ { StatementList_opt }
+
+ Declaration:
+ LexicalDeclaration
+
+ LexicalDeclaration:
+ LetOrConst BindingList ;
+
+ BindingList:
+ LexicalBinding
+ BindingList , LexicalBinding
+---*/
+
+
+{}let a, b = 42, c;b;
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/block-regexp-literal-flags.js b/js/src/tests/test262/language/statementList/block-regexp-literal-flags.js
new file mode 100644
index 0000000000..58d9b38fca
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/block-regexp-literal-flags.js
@@ -0,0 +1,44 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/regexp-literal-flags.case
+// - src/statementList/default/block.template
+/*---
+description: Regular Expression Literal with Flags (Valid syntax of StatementList starting with a BlockStatement)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Statement:
+ BlockStatement
+
+ BlockStatement:
+ Block
+
+ Block:
+ { StatementList_opt }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement[Yield, Await]:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ RegularExpressionLiteral ::
+ / RegularExpressionBody / RegularExpressionFlags
+---*/
+
+
+{}/1/g;
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/block-regexp-literal.js b/js/src/tests/test262/language/statementList/block-regexp-literal.js
new file mode 100644
index 0000000000..d81ccad43f
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/block-regexp-literal.js
@@ -0,0 +1,44 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/regexp-literal.case
+// - src/statementList/default/block.template
+/*---
+description: Regular Expression Literal (Valid syntax of StatementList starting with a BlockStatement)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Statement:
+ BlockStatement
+
+ BlockStatement:
+ Block
+
+ Block:
+ { StatementList_opt }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement[Yield, Await]:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ RegularExpressionLiteral ::
+ / RegularExpressionBody / RegularExpressionFlags
+---*/
+
+
+{}/1/;
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/block-with-statment-array-literal-with-item.js b/js/src/tests/test262/language/statementList/block-with-statment-array-literal-with-item.js
new file mode 100644
index 0000000000..25814099d2
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/block-with-statment-array-literal-with-item.js
@@ -0,0 +1,47 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/array-literal-with-item.case
+// - src/statementList/default/block-with-statement.template
+/*---
+description: Array Literal with items (Valid syntax of StatementList starting with a BlockStatement)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Statement:
+ BlockStatement
+
+ BlockStatement:
+ Block
+
+ Block:
+ { StatementList_opt }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ ArrayLiteral[Yield, Await]:
+ [ Elision_opt ]
+ [ ElementList ]
+ [ ElementList , Elision_opt ]
+---*/
+
+
+// length is a label!
+{length: 3000}[42];
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/block-with-statment-array-literal.js b/js/src/tests/test262/language/statementList/block-with-statment-array-literal.js
new file mode 100644
index 0000000000..85cb52d2f0
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/block-with-statment-array-literal.js
@@ -0,0 +1,47 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/array-literal.case
+// - src/statementList/default/block-with-statement.template
+/*---
+description: Array Literal (Valid syntax of StatementList starting with a BlockStatement)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Statement:
+ BlockStatement
+
+ BlockStatement:
+ Block
+
+ Block:
+ { StatementList_opt }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ ArrayLiteral[Yield, Await]:
+ [ Elision_opt ]
+ [ ElementList ]
+ [ ElementList , Elision_opt ]
+---*/
+
+
+// length is a label!
+{length: 3000}[];
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/block-with-statment-arrow-function-assignment-expr.js b/js/src/tests/test262/language/statementList/block-with-statment-arrow-function-assignment-expr.js
new file mode 100644
index 0000000000..b273b9f15a
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/block-with-statment-arrow-function-assignment-expr.js
@@ -0,0 +1,58 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/arrow-function-assignment-expr.case
+// - src/statementList/default/block-with-statement.template
+/*---
+description: Arrow Function with an AssignmentExpression (Valid syntax of StatementList starting with a BlockStatement)
+esid: prod-StatementList
+features: [arrow-function]
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Statement:
+ BlockStatement
+
+ BlockStatement:
+ Block
+
+ Block:
+ { StatementList_opt }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ ...
+
+ AssignmentExpression:
+ ConditionalExpression
+ [+Yield]YieldExpression
+ ArrowFunction
+
+ ArrowFunction:
+ ArrowParameters [no LineTerminator here] => ConciseBody
+
+ ConciseBody:
+ [lookahead ≠ {] AssignmentExpression
+ { FunctionBody }
+
+---*/
+
+
+// length is a label!
+{length: 3000}() => 42;
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/block-with-statment-arrow-function-functionbody.js b/js/src/tests/test262/language/statementList/block-with-statment-arrow-function-functionbody.js
new file mode 100644
index 0000000000..9357632fed
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/block-with-statment-arrow-function-functionbody.js
@@ -0,0 +1,58 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/arrow-function-functionbody.case
+// - src/statementList/default/block-with-statement.template
+/*---
+description: Arrow Function with a Function Body (Valid syntax of StatementList starting with a BlockStatement)
+esid: prod-StatementList
+features: [arrow-function]
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Statement:
+ BlockStatement
+
+ BlockStatement:
+ Block
+
+ Block:
+ { StatementList_opt }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ ...
+
+ AssignmentExpression:
+ ConditionalExpression
+ [+Yield]YieldExpression
+ ArrowFunction
+
+ ArrowFunction:
+ ArrowParameters [no LineTerminator here] => ConciseBody
+
+ ConciseBody:
+ [lookahead ≠ {] AssignmentExpression
+ { FunctionBody }
+
+---*/
+
+
+// length is a label!
+{length: 3000}() => { return 42; };
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/block-with-statment-block-with-labels.js b/js/src/tests/test262/language/statementList/block-with-statment-block-with-labels.js
new file mode 100644
index 0000000000..d5b2e5d86b
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/block-with-statment-block-with-labels.js
@@ -0,0 +1,43 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/block-with-labels.case
+// - src/statementList/default/block-with-statement.template
+/*---
+description: Block with a label (Valid syntax of StatementList starting with a BlockStatement)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Statement:
+ BlockStatement
+
+ BlockStatement:
+ Block
+
+ Block:
+ { StatementList_opt }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ // lookahead here prevents capturing an Object literal
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+---*/
+
+
+// length is a label!
+{length: 3000}{x: 42};
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/block-with-statment-block.js b/js/src/tests/test262/language/statementList/block-with-statment-block.js
new file mode 100644
index 0000000000..fbab619f28
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/block-with-statment-block.js
@@ -0,0 +1,43 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/block.case
+// - src/statementList/default/block-with-statement.template
+/*---
+description: Block (Valid syntax of StatementList starting with a BlockStatement)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Statement:
+ BlockStatement
+
+ BlockStatement:
+ Block
+
+ Block:
+ { StatementList_opt }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ // lookahead here prevents capturing an Object literal
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+---*/
+
+
+// length is a label!
+{length: 3000}{}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/block-with-statment-expr-arrow-function-boolean-literal.js b/js/src/tests/test262/language/statementList/block-with-statment-expr-arrow-function-boolean-literal.js
new file mode 100644
index 0000000000..ea8157f70a
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/block-with-statment-expr-arrow-function-boolean-literal.js
@@ -0,0 +1,60 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/expr-arrow-function-boolean-literal.case
+// - src/statementList/default/block-with-statement.template
+/*---
+description: Expression with an Arrow Function and Boolean literal (Valid syntax of StatementList starting with a BlockStatement)
+esid: prod-StatementList
+features: [arrow-function]
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Statement:
+ BlockStatement
+
+ BlockStatement:
+ Block
+
+ Block:
+ { StatementList_opt }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ Expression:
+ AssignmentExpression
+ Expression , AssignmentExpression
+
+ AssignmentExpression:
+ ConditionalExpression
+ [+Yield]YieldExpression
+ ArrowFunction
+
+ ArrowFunction:
+ ArrowParameters [no LineTerminator here] => ConciseBody
+
+ ConciseBody:
+ [lookahead ≠ {] AssignmentExpression
+ { FunctionBody }
+
+---*/
+
+
+// length is a label!
+{length: 3000}() => 1, 42;
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/block-with-statment-let-declaration.js b/js/src/tests/test262/language/statementList/block-with-statment-let-declaration.js
new file mode 100644
index 0000000000..834ecbd64d
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/block-with-statment-let-declaration.js
@@ -0,0 +1,41 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/let-declaration.case
+// - src/statementList/default/block-with-statement.template
+/*---
+description: LexicalDeclaration using Let (Valid syntax of StatementList starting with a BlockStatement)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Statement:
+ BlockStatement
+
+ BlockStatement:
+ Block
+
+ Block:
+ { StatementList_opt }
+
+ Declaration:
+ LexicalDeclaration
+
+ LexicalDeclaration:
+ LetOrConst BindingList ;
+
+ BindingList:
+ LexicalBinding
+ BindingList , LexicalBinding
+---*/
+
+
+// length is a label!
+{length: 3000}let a, b = 42, c;b;
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/block-with-statment-regexp-literal-flags.js b/js/src/tests/test262/language/statementList/block-with-statment-regexp-literal-flags.js
new file mode 100644
index 0000000000..a37f392e60
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/block-with-statment-regexp-literal-flags.js
@@ -0,0 +1,45 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/regexp-literal-flags.case
+// - src/statementList/default/block-with-statement.template
+/*---
+description: Regular Expression Literal with Flags (Valid syntax of StatementList starting with a BlockStatement)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Statement:
+ BlockStatement
+
+ BlockStatement:
+ Block
+
+ Block:
+ { StatementList_opt }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement[Yield, Await]:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ RegularExpressionLiteral ::
+ / RegularExpressionBody / RegularExpressionFlags
+---*/
+
+
+// length is a label!
+{length: 3000}/1/g;
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/block-with-statment-regexp-literal.js b/js/src/tests/test262/language/statementList/block-with-statment-regexp-literal.js
new file mode 100644
index 0000000000..c40c8e9513
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/block-with-statment-regexp-literal.js
@@ -0,0 +1,45 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/regexp-literal.case
+// - src/statementList/default/block-with-statement.template
+/*---
+description: Regular Expression Literal (Valid syntax of StatementList starting with a BlockStatement)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Statement:
+ BlockStatement
+
+ BlockStatement:
+ Block
+
+ Block:
+ { StatementList_opt }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement[Yield, Await]:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ RegularExpressionLiteral ::
+ / RegularExpressionBody / RegularExpressionFlags
+---*/
+
+
+// length is a label!
+{length: 3000}/1/;
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/browser.js b/js/src/tests/test262/language/statementList/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/browser.js
diff --git a/js/src/tests/test262/language/statementList/class-array-literal-with-item.js b/js/src/tests/test262/language/statementList/class-array-literal-with-item.js
new file mode 100644
index 0000000000..1aa19aa524
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/class-array-literal-with-item.js
@@ -0,0 +1,42 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/array-literal-with-item.case
+// - src/statementList/default/class-declaration.template
+/*---
+description: Array Literal with items (Valid syntax of StatementList starting with a Class Declaration)
+esid: prod-StatementList
+features: [class]
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Declaration:
+ ClassDeclaration
+
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ ArrayLiteral[Yield, Await]:
+ [ Elision_opt ]
+ [ ElementList ]
+ [ ElementList , Elision_opt ]
+---*/
+
+
+class C {}[42];
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/class-array-literal.js b/js/src/tests/test262/language/statementList/class-array-literal.js
new file mode 100644
index 0000000000..33c61e98c5
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/class-array-literal.js
@@ -0,0 +1,42 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/array-literal.case
+// - src/statementList/default/class-declaration.template
+/*---
+description: Array Literal (Valid syntax of StatementList starting with a Class Declaration)
+esid: prod-StatementList
+features: [class]
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Declaration:
+ ClassDeclaration
+
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ ArrayLiteral[Yield, Await]:
+ [ Elision_opt ]
+ [ ElementList ]
+ [ ElementList , Elision_opt ]
+---*/
+
+
+class C {}[];
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/class-arrow-function-assignment-expr.js b/js/src/tests/test262/language/statementList/class-arrow-function-assignment-expr.js
new file mode 100644
index 0000000000..07aee9e777
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/class-arrow-function-assignment-expr.js
@@ -0,0 +1,52 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/arrow-function-assignment-expr.case
+// - src/statementList/default/class-declaration.template
+/*---
+description: Arrow Function with an AssignmentExpression (Valid syntax of StatementList starting with a Class Declaration)
+esid: prod-StatementList
+features: [arrow-function, class]
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Declaration:
+ ClassDeclaration
+
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ ...
+
+ AssignmentExpression:
+ ConditionalExpression
+ [+Yield]YieldExpression
+ ArrowFunction
+
+ ArrowFunction:
+ ArrowParameters [no LineTerminator here] => ConciseBody
+
+ ConciseBody:
+ [lookahead ≠ {] AssignmentExpression
+ { FunctionBody }
+
+---*/
+
+
+class C {}() => 42;
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/class-arrow-function-functionbody.js b/js/src/tests/test262/language/statementList/class-arrow-function-functionbody.js
new file mode 100644
index 0000000000..1ffa8fc9bb
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/class-arrow-function-functionbody.js
@@ -0,0 +1,52 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/arrow-function-functionbody.case
+// - src/statementList/default/class-declaration.template
+/*---
+description: Arrow Function with a Function Body (Valid syntax of StatementList starting with a Class Declaration)
+esid: prod-StatementList
+features: [arrow-function, class]
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Declaration:
+ ClassDeclaration
+
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ ...
+
+ AssignmentExpression:
+ ConditionalExpression
+ [+Yield]YieldExpression
+ ArrowFunction
+
+ ArrowFunction:
+ ArrowParameters [no LineTerminator here] => ConciseBody
+
+ ConciseBody:
+ [lookahead ≠ {] AssignmentExpression
+ { FunctionBody }
+
+---*/
+
+
+class C {}() => { return 42; };
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/class-block-with-labels.js b/js/src/tests/test262/language/statementList/class-block-with-labels.js
new file mode 100644
index 0000000000..ddab23b206
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/class-block-with-labels.js
@@ -0,0 +1,38 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/block-with-labels.case
+// - src/statementList/default/class-declaration.template
+/*---
+description: Block with a label (Valid syntax of StatementList starting with a Class Declaration)
+esid: prod-StatementList
+features: [class]
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Declaration:
+ ClassDeclaration
+
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ // lookahead here prevents capturing an Object literal
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+---*/
+
+
+class C {}{x: 42};
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/class-block.js b/js/src/tests/test262/language/statementList/class-block.js
new file mode 100644
index 0000000000..4b44b01bf0
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/class-block.js
@@ -0,0 +1,38 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/block.case
+// - src/statementList/default/class-declaration.template
+/*---
+description: Block (Valid syntax of StatementList starting with a Class Declaration)
+esid: prod-StatementList
+features: [class]
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Declaration:
+ ClassDeclaration
+
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ // lookahead here prevents capturing an Object literal
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+---*/
+
+
+class C {}{}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/class-expr-arrow-function-boolean-literal.js b/js/src/tests/test262/language/statementList/class-expr-arrow-function-boolean-literal.js
new file mode 100644
index 0000000000..3ae44aa17f
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/class-expr-arrow-function-boolean-literal.js
@@ -0,0 +1,54 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/expr-arrow-function-boolean-literal.case
+// - src/statementList/default/class-declaration.template
+/*---
+description: Expression with an Arrow Function and Boolean literal (Valid syntax of StatementList starting with a Class Declaration)
+esid: prod-StatementList
+features: [arrow-function, class]
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Declaration:
+ ClassDeclaration
+
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ Expression:
+ AssignmentExpression
+ Expression , AssignmentExpression
+
+ AssignmentExpression:
+ ConditionalExpression
+ [+Yield]YieldExpression
+ ArrowFunction
+
+ ArrowFunction:
+ ArrowParameters [no LineTerminator here] => ConciseBody
+
+ ConciseBody:
+ [lookahead ≠ {] AssignmentExpression
+ { FunctionBody }
+
+---*/
+
+
+class C {}() => 1, 42;
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/class-let-declaration.js b/js/src/tests/test262/language/statementList/class-let-declaration.js
new file mode 100644
index 0000000000..f0650cda01
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/class-let-declaration.js
@@ -0,0 +1,36 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/let-declaration.case
+// - src/statementList/default/class-declaration.template
+/*---
+description: LexicalDeclaration using Let (Valid syntax of StatementList starting with a Class Declaration)
+esid: prod-StatementList
+features: [class]
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Declaration:
+ ClassDeclaration
+
+
+ Declaration:
+ LexicalDeclaration
+
+ LexicalDeclaration:
+ LetOrConst BindingList ;
+
+ BindingList:
+ LexicalBinding
+ BindingList , LexicalBinding
+---*/
+
+
+class C {}let a, b = 42, c;b;
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/class-regexp-literal-flags.js b/js/src/tests/test262/language/statementList/class-regexp-literal-flags.js
new file mode 100644
index 0000000000..91bf33d154
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/class-regexp-literal-flags.js
@@ -0,0 +1,40 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/regexp-literal-flags.case
+// - src/statementList/default/class-declaration.template
+/*---
+description: Regular Expression Literal with Flags (Valid syntax of StatementList starting with a Class Declaration)
+esid: prod-StatementList
+features: [class]
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Declaration:
+ ClassDeclaration
+
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement[Yield, Await]:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ RegularExpressionLiteral ::
+ / RegularExpressionBody / RegularExpressionFlags
+---*/
+
+
+class C {}/1/g;
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/class-regexp-literal.js b/js/src/tests/test262/language/statementList/class-regexp-literal.js
new file mode 100644
index 0000000000..c51ba2917e
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/class-regexp-literal.js
@@ -0,0 +1,40 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/regexp-literal.case
+// - src/statementList/default/class-declaration.template
+/*---
+description: Regular Expression Literal (Valid syntax of StatementList starting with a Class Declaration)
+esid: prod-StatementList
+features: [class]
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Declaration:
+ ClassDeclaration
+
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement[Yield, Await]:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ RegularExpressionLiteral ::
+ / RegularExpressionBody / RegularExpressionFlags
+---*/
+
+
+class C {}/1/;
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/eval-block-array-literal-with-item.js b/js/src/tests/test262/language/statementList/eval-block-array-literal-with-item.js
new file mode 100644
index 0000000000..43a5a879c4
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/eval-block-array-literal-with-item.js
@@ -0,0 +1,50 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/array-literal-with-item.case
+// - src/statementList/default/eval-block.template
+/*---
+description: Array Literal with items (Eval production of StatementList starting with a BlockStatement)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Statement:
+ BlockStatement
+
+ BlockStatement:
+ Block
+
+ Block:
+ { StatementList_opt }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ ArrayLiteral[Yield, Await]:
+ [ Elision_opt ]
+ [ ElementList ]
+ [ ElementList , Elision_opt ]
+---*/
+
+
+var result = eval('{}[42];');
+
+assert.sameValue(Object.getPrototypeOf(result), Array.prototype);
+assert.sameValue(result.length, 1);
+assert.sameValue(result[0], 42);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/eval-block-array-literal.js b/js/src/tests/test262/language/statementList/eval-block-array-literal.js
new file mode 100644
index 0000000000..fa02756b49
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/eval-block-array-literal.js
@@ -0,0 +1,49 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/array-literal.case
+// - src/statementList/default/eval-block.template
+/*---
+description: Array Literal (Eval production of StatementList starting with a BlockStatement)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Statement:
+ BlockStatement
+
+ BlockStatement:
+ Block
+
+ Block:
+ { StatementList_opt }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ ArrayLiteral[Yield, Await]:
+ [ Elision_opt ]
+ [ ElementList ]
+ [ ElementList , Elision_opt ]
+---*/
+
+
+var result = eval('{}[];');
+
+assert.sameValue(Object.getPrototypeOf(result), Array.prototype);
+assert.sameValue(result.length, 0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/eval-block-arrow-function-assignment-expr.js b/js/src/tests/test262/language/statementList/eval-block-arrow-function-assignment-expr.js
new file mode 100644
index 0000000000..4e747c3af3
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/eval-block-arrow-function-assignment-expr.js
@@ -0,0 +1,59 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/arrow-function-assignment-expr.case
+// - src/statementList/default/eval-block.template
+/*---
+description: Arrow Function with an AssignmentExpression (Eval production of StatementList starting with a BlockStatement)
+esid: prod-StatementList
+features: [arrow-function]
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Statement:
+ BlockStatement
+
+ BlockStatement:
+ Block
+
+ Block:
+ { StatementList_opt }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ ...
+
+ AssignmentExpression:
+ ConditionalExpression
+ [+Yield]YieldExpression
+ ArrowFunction
+
+ ArrowFunction:
+ ArrowParameters [no LineTerminator here] => ConciseBody
+
+ ConciseBody:
+ [lookahead ≠ {] AssignmentExpression
+ { FunctionBody }
+
+---*/
+
+
+var result = eval('{}() => 42;');
+
+assert.sameValue(result(), 42);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/eval-block-arrow-function-functionbody.js b/js/src/tests/test262/language/statementList/eval-block-arrow-function-functionbody.js
new file mode 100644
index 0000000000..de83704b74
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/eval-block-arrow-function-functionbody.js
@@ -0,0 +1,59 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/arrow-function-functionbody.case
+// - src/statementList/default/eval-block.template
+/*---
+description: Arrow Function with a Function Body (Eval production of StatementList starting with a BlockStatement)
+esid: prod-StatementList
+features: [arrow-function]
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Statement:
+ BlockStatement
+
+ BlockStatement:
+ Block
+
+ Block:
+ { StatementList_opt }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ ...
+
+ AssignmentExpression:
+ ConditionalExpression
+ [+Yield]YieldExpression
+ ArrowFunction
+
+ ArrowFunction:
+ ArrowParameters [no LineTerminator here] => ConciseBody
+
+ ConciseBody:
+ [lookahead ≠ {] AssignmentExpression
+ { FunctionBody }
+
+---*/
+
+
+var result = eval('{}() => { return 42; };');
+
+assert.sameValue(result(), 42);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/eval-block-block-with-labels.js b/js/src/tests/test262/language/statementList/eval-block-block-with-labels.js
new file mode 100644
index 0000000000..98014d2e36
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/eval-block-block-with-labels.js
@@ -0,0 +1,44 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/block-with-labels.case
+// - src/statementList/default/eval-block.template
+/*---
+description: Block with a label (Eval production of StatementList starting with a BlockStatement)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Statement:
+ BlockStatement
+
+ BlockStatement:
+ Block
+
+ Block:
+ { StatementList_opt }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ // lookahead here prevents capturing an Object literal
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+---*/
+
+
+var result = eval('{}{x: 42};');
+
+assert.sameValue(result, 42, 'it does not evaluate to an Object with the property x');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/eval-block-block.js b/js/src/tests/test262/language/statementList/eval-block-block.js
new file mode 100644
index 0000000000..2ffc5874ec
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/eval-block-block.js
@@ -0,0 +1,44 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/block.case
+// - src/statementList/default/eval-block.template
+/*---
+description: Block (Eval production of StatementList starting with a BlockStatement)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Statement:
+ BlockStatement
+
+ BlockStatement:
+ Block
+
+ Block:
+ { StatementList_opt }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ // lookahead here prevents capturing an Object literal
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+---*/
+
+
+var result = eval('{}{}');
+
+assert.sameValue(result, undefined);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/eval-block-expr-arrow-function-boolean-literal.js b/js/src/tests/test262/language/statementList/eval-block-expr-arrow-function-boolean-literal.js
new file mode 100644
index 0000000000..e95b33aee5
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/eval-block-expr-arrow-function-boolean-literal.js
@@ -0,0 +1,61 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/expr-arrow-function-boolean-literal.case
+// - src/statementList/default/eval-block.template
+/*---
+description: Expression with an Arrow Function and Boolean literal (Eval production of StatementList starting with a BlockStatement)
+esid: prod-StatementList
+features: [arrow-function]
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Statement:
+ BlockStatement
+
+ BlockStatement:
+ Block
+
+ Block:
+ { StatementList_opt }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ Expression:
+ AssignmentExpression
+ Expression , AssignmentExpression
+
+ AssignmentExpression:
+ ConditionalExpression
+ [+Yield]YieldExpression
+ ArrowFunction
+
+ ArrowFunction:
+ ArrowParameters [no LineTerminator here] => ConciseBody
+
+ ConciseBody:
+ [lookahead ≠ {] AssignmentExpression
+ { FunctionBody }
+
+---*/
+
+
+var result = eval('{}() => 1, 42;');
+
+assert.sameValue(result, 42);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/eval-block-let-declaration.js b/js/src/tests/test262/language/statementList/eval-block-let-declaration.js
new file mode 100644
index 0000000000..ae4ffb7207
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/eval-block-let-declaration.js
@@ -0,0 +1,42 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/let-declaration.case
+// - src/statementList/default/eval-block.template
+/*---
+description: LexicalDeclaration using Let (Eval production of StatementList starting with a BlockStatement)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Statement:
+ BlockStatement
+
+ BlockStatement:
+ Block
+
+ Block:
+ { StatementList_opt }
+
+ Declaration:
+ LexicalDeclaration
+
+ LexicalDeclaration:
+ LetOrConst BindingList ;
+
+ BindingList:
+ LexicalBinding
+ BindingList , LexicalBinding
+---*/
+
+
+var result = eval('{}let a, b = 42, c;b;');
+
+assert.sameValue(result, 42);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/eval-block-regexp-literal-flags.js b/js/src/tests/test262/language/statementList/eval-block-regexp-literal-flags.js
new file mode 100644
index 0000000000..c563d68aac
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/eval-block-regexp-literal-flags.js
@@ -0,0 +1,48 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/regexp-literal-flags.case
+// - src/statementList/default/eval-block.template
+/*---
+description: Regular Expression Literal with Flags (Eval production of StatementList starting with a BlockStatement)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Statement:
+ BlockStatement
+
+ BlockStatement:
+ Block
+
+ Block:
+ { StatementList_opt }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement[Yield, Await]:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ RegularExpressionLiteral ::
+ / RegularExpressionBody / RegularExpressionFlags
+---*/
+
+
+var result = eval('{}/1/g;');
+
+assert.sameValue(Object.getPrototypeOf(result), RegExp.prototype);
+assert.sameValue(result.flags, 'g');
+assert.sameValue(result.toString(), '/1/g');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/eval-block-regexp-literal.js b/js/src/tests/test262/language/statementList/eval-block-regexp-literal.js
new file mode 100644
index 0000000000..e1d82e589b
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/eval-block-regexp-literal.js
@@ -0,0 +1,48 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/regexp-literal.case
+// - src/statementList/default/eval-block.template
+/*---
+description: Regular Expression Literal (Eval production of StatementList starting with a BlockStatement)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Statement:
+ BlockStatement
+
+ BlockStatement:
+ Block
+
+ Block:
+ { StatementList_opt }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement[Yield, Await]:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ RegularExpressionLiteral ::
+ / RegularExpressionBody / RegularExpressionFlags
+---*/
+
+
+var result = eval('{}/1/;');
+
+assert.sameValue(Object.getPrototypeOf(result), RegExp.prototype);
+assert.sameValue(result.flags, '');
+assert.sameValue(result.toString(), '/1/');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/eval-block-with-statment-array-literal-with-item.js b/js/src/tests/test262/language/statementList/eval-block-with-statment-array-literal-with-item.js
new file mode 100644
index 0000000000..d7fadffd0d
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/eval-block-with-statment-array-literal-with-item.js
@@ -0,0 +1,52 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/array-literal-with-item.case
+// - src/statementList/default/eval-block-with-statement.template
+/*---
+description: Array Literal with items (Evaluate produciton of StatementList starting with a BlockStatement)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Statement:
+ BlockStatement
+
+ BlockStatement:
+ Block
+
+ Block:
+ { StatementList_opt }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ ArrayLiteral[Yield, Await]:
+ [ Elision_opt ]
+ [ ElementList ]
+ [ ElementList , Elision_opt ]
+---*/
+
+
+// length is a label!
+var result = eval('{length: 3000}[42];');
+
+// Reuse this value for items with empty completions
+var expected = 3000;
+
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/eval-block-with-statment-array-literal.js b/js/src/tests/test262/language/statementList/eval-block-with-statment-array-literal.js
new file mode 100644
index 0000000000..2516710486
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/eval-block-with-statment-array-literal.js
@@ -0,0 +1,52 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/array-literal.case
+// - src/statementList/default/eval-block-with-statement.template
+/*---
+description: Array Literal (Evaluate produciton of StatementList starting with a BlockStatement)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Statement:
+ BlockStatement
+
+ BlockStatement:
+ Block
+
+ Block:
+ { StatementList_opt }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ ArrayLiteral[Yield, Await]:
+ [ Elision_opt ]
+ [ ElementList ]
+ [ ElementList , Elision_opt ]
+---*/
+
+
+// length is a label!
+var result = eval('{length: 3000}[];');
+
+// Reuse this value for items with empty completions
+var expected = 3000;
+
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/eval-block-with-statment-arrow-function-assignment-expr.js b/js/src/tests/test262/language/statementList/eval-block-with-statment-arrow-function-assignment-expr.js
new file mode 100644
index 0000000000..be6e76218f
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/eval-block-with-statment-arrow-function-assignment-expr.js
@@ -0,0 +1,63 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/arrow-function-assignment-expr.case
+// - src/statementList/default/eval-block-with-statement.template
+/*---
+description: Arrow Function with an AssignmentExpression (Evaluate produciton of StatementList starting with a BlockStatement)
+esid: prod-StatementList
+features: [arrow-function]
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Statement:
+ BlockStatement
+
+ BlockStatement:
+ Block
+
+ Block:
+ { StatementList_opt }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ ...
+
+ AssignmentExpression:
+ ConditionalExpression
+ [+Yield]YieldExpression
+ ArrowFunction
+
+ ArrowFunction:
+ ArrowParameters [no LineTerminator here] => ConciseBody
+
+ ConciseBody:
+ [lookahead ≠ {] AssignmentExpression
+ { FunctionBody }
+
+---*/
+
+
+// length is a label!
+var result = eval('{length: 3000}() => 42;');
+
+// Reuse this value for items with empty completions
+var expected = 3000;
+
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/eval-block-with-statment-arrow-function-functionbody.js b/js/src/tests/test262/language/statementList/eval-block-with-statment-arrow-function-functionbody.js
new file mode 100644
index 0000000000..2506b170bf
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/eval-block-with-statment-arrow-function-functionbody.js
@@ -0,0 +1,63 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/arrow-function-functionbody.case
+// - src/statementList/default/eval-block-with-statement.template
+/*---
+description: Arrow Function with a Function Body (Evaluate produciton of StatementList starting with a BlockStatement)
+esid: prod-StatementList
+features: [arrow-function]
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Statement:
+ BlockStatement
+
+ BlockStatement:
+ Block
+
+ Block:
+ { StatementList_opt }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ ...
+
+ AssignmentExpression:
+ ConditionalExpression
+ [+Yield]YieldExpression
+ ArrowFunction
+
+ ArrowFunction:
+ ArrowParameters [no LineTerminator here] => ConciseBody
+
+ ConciseBody:
+ [lookahead ≠ {] AssignmentExpression
+ { FunctionBody }
+
+---*/
+
+
+// length is a label!
+var result = eval('{length: 3000}() => { return 42; };');
+
+// Reuse this value for items with empty completions
+var expected = 3000;
+
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/eval-block-with-statment-block-with-labels.js b/js/src/tests/test262/language/statementList/eval-block-with-statment-block-with-labels.js
new file mode 100644
index 0000000000..f6313f5514
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/eval-block-with-statment-block-with-labels.js
@@ -0,0 +1,48 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/block-with-labels.case
+// - src/statementList/default/eval-block-with-statement.template
+/*---
+description: Block with a label (Evaluate produciton of StatementList starting with a BlockStatement)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Statement:
+ BlockStatement
+
+ BlockStatement:
+ Block
+
+ Block:
+ { StatementList_opt }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ // lookahead here prevents capturing an Object literal
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+---*/
+
+
+// length is a label!
+var result = eval('{length: 3000}{x: 42};');
+
+// Reuse this value for items with empty completions
+var expected = 3000;
+
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/eval-block-with-statment-block.js b/js/src/tests/test262/language/statementList/eval-block-with-statment-block.js
new file mode 100644
index 0000000000..3098521ad0
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/eval-block-with-statment-block.js
@@ -0,0 +1,48 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/block.case
+// - src/statementList/default/eval-block-with-statement.template
+/*---
+description: Block (Evaluate produciton of StatementList starting with a BlockStatement)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Statement:
+ BlockStatement
+
+ BlockStatement:
+ Block
+
+ Block:
+ { StatementList_opt }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ // lookahead here prevents capturing an Object literal
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+---*/
+
+
+// length is a label!
+var result = eval('{length: 3000}{}');
+
+// Reuse this value for items with empty completions
+var expected = 3000;
+
+assert.sameValue(result, expected);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/eval-block-with-statment-expr-arrow-function-boolean-literal.js b/js/src/tests/test262/language/statementList/eval-block-with-statment-expr-arrow-function-boolean-literal.js
new file mode 100644
index 0000000000..a13a372545
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/eval-block-with-statment-expr-arrow-function-boolean-literal.js
@@ -0,0 +1,65 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/expr-arrow-function-boolean-literal.case
+// - src/statementList/default/eval-block-with-statement.template
+/*---
+description: Expression with an Arrow Function and Boolean literal (Evaluate produciton of StatementList starting with a BlockStatement)
+esid: prod-StatementList
+features: [arrow-function]
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Statement:
+ BlockStatement
+
+ BlockStatement:
+ Block
+
+ Block:
+ { StatementList_opt }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ Expression:
+ AssignmentExpression
+ Expression , AssignmentExpression
+
+ AssignmentExpression:
+ ConditionalExpression
+ [+Yield]YieldExpression
+ ArrowFunction
+
+ ArrowFunction:
+ ArrowParameters [no LineTerminator here] => ConciseBody
+
+ ConciseBody:
+ [lookahead ≠ {] AssignmentExpression
+ { FunctionBody }
+
+---*/
+
+
+// length is a label!
+var result = eval('{length: 3000}() => 1, 42;');
+
+// Reuse this value for items with empty completions
+var expected = 3000;
+
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/eval-block-with-statment-let-declaration.js b/js/src/tests/test262/language/statementList/eval-block-with-statment-let-declaration.js
new file mode 100644
index 0000000000..40d02316f9
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/eval-block-with-statment-let-declaration.js
@@ -0,0 +1,46 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/let-declaration.case
+// - src/statementList/default/eval-block-with-statement.template
+/*---
+description: LexicalDeclaration using Let (Evaluate produciton of StatementList starting with a BlockStatement)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Statement:
+ BlockStatement
+
+ BlockStatement:
+ Block
+
+ Block:
+ { StatementList_opt }
+
+ Declaration:
+ LexicalDeclaration
+
+ LexicalDeclaration:
+ LetOrConst BindingList ;
+
+ BindingList:
+ LexicalBinding
+ BindingList , LexicalBinding
+---*/
+
+
+// length is a label!
+var result = eval('{length: 3000}let a, b = 42, c;b;');
+
+// Reuse this value for items with empty completions
+var expected = 3000;
+
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/eval-block-with-statment-regexp-literal-flags.js b/js/src/tests/test262/language/statementList/eval-block-with-statment-regexp-literal-flags.js
new file mode 100644
index 0000000000..abac7a6e33
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/eval-block-with-statment-regexp-literal-flags.js
@@ -0,0 +1,50 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/regexp-literal-flags.case
+// - src/statementList/default/eval-block-with-statement.template
+/*---
+description: Regular Expression Literal with Flags (Evaluate produciton of StatementList starting with a BlockStatement)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Statement:
+ BlockStatement
+
+ BlockStatement:
+ Block
+
+ Block:
+ { StatementList_opt }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement[Yield, Await]:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ RegularExpressionLiteral ::
+ / RegularExpressionBody / RegularExpressionFlags
+---*/
+
+
+// length is a label!
+var result = eval('{length: 3000}/1/g;');
+
+// Reuse this value for items with empty completions
+var expected = 3000;
+
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/eval-block-with-statment-regexp-literal.js b/js/src/tests/test262/language/statementList/eval-block-with-statment-regexp-literal.js
new file mode 100644
index 0000000000..a09cfd914c
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/eval-block-with-statment-regexp-literal.js
@@ -0,0 +1,50 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/regexp-literal.case
+// - src/statementList/default/eval-block-with-statement.template
+/*---
+description: Regular Expression Literal (Evaluate produciton of StatementList starting with a BlockStatement)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Statement:
+ BlockStatement
+
+ BlockStatement:
+ Block
+
+ Block:
+ { StatementList_opt }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement[Yield, Await]:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ RegularExpressionLiteral ::
+ / RegularExpressionBody / RegularExpressionFlags
+---*/
+
+
+// length is a label!
+var result = eval('{length: 3000}/1/;');
+
+// Reuse this value for items with empty completions
+var expected = 3000;
+
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/eval-class-array-literal-with-item.js b/js/src/tests/test262/language/statementList/eval-class-array-literal-with-item.js
new file mode 100644
index 0000000000..1dee5e82dd
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/eval-class-array-literal-with-item.js
@@ -0,0 +1,46 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/array-literal-with-item.case
+// - src/statementList/default/eval-class-declaration.template
+/*---
+description: Array Literal with items (Valid syntax of StatementList starting with a Class Declaration)
+esid: prod-StatementList
+features: [class]
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Declaration:
+ ClassDeclaration
+
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ ArrayLiteral[Yield, Await]:
+ [ Elision_opt ]
+ [ ElementList ]
+ [ ElementList , Elision_opt ]
+---*/
+
+
+var result = eval('class C {}[42];');
+
+assert.sameValue(Object.getPrototypeOf(result), Array.prototype);
+assert.sameValue(result.length, 1);
+assert.sameValue(result[0], 42);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/eval-class-array-literal.js b/js/src/tests/test262/language/statementList/eval-class-array-literal.js
new file mode 100644
index 0000000000..34ef5aaf8b
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/eval-class-array-literal.js
@@ -0,0 +1,45 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/array-literal.case
+// - src/statementList/default/eval-class-declaration.template
+/*---
+description: Array Literal (Valid syntax of StatementList starting with a Class Declaration)
+esid: prod-StatementList
+features: [class]
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Declaration:
+ ClassDeclaration
+
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ ArrayLiteral[Yield, Await]:
+ [ Elision_opt ]
+ [ ElementList ]
+ [ ElementList , Elision_opt ]
+---*/
+
+
+var result = eval('class C {}[];');
+
+assert.sameValue(Object.getPrototypeOf(result), Array.prototype);
+assert.sameValue(result.length, 0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/eval-class-arrow-function-assignment-expr.js b/js/src/tests/test262/language/statementList/eval-class-arrow-function-assignment-expr.js
new file mode 100644
index 0000000000..c75d84ad5f
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/eval-class-arrow-function-assignment-expr.js
@@ -0,0 +1,54 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/arrow-function-assignment-expr.case
+// - src/statementList/default/eval-class-declaration.template
+/*---
+description: Arrow Function with an AssignmentExpression (Valid syntax of StatementList starting with a Class Declaration)
+esid: prod-StatementList
+features: [arrow-function, class]
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Declaration:
+ ClassDeclaration
+
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ ...
+
+ AssignmentExpression:
+ ConditionalExpression
+ [+Yield]YieldExpression
+ ArrowFunction
+
+ ArrowFunction:
+ ArrowParameters [no LineTerminator here] => ConciseBody
+
+ ConciseBody:
+ [lookahead ≠ {] AssignmentExpression
+ { FunctionBody }
+
+---*/
+
+
+var result = eval('class C {}() => 42;');
+
+assert.sameValue(result(), 42);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/eval-class-arrow-function-functionbody.js b/js/src/tests/test262/language/statementList/eval-class-arrow-function-functionbody.js
new file mode 100644
index 0000000000..1ba16b4aa7
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/eval-class-arrow-function-functionbody.js
@@ -0,0 +1,54 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/arrow-function-functionbody.case
+// - src/statementList/default/eval-class-declaration.template
+/*---
+description: Arrow Function with a Function Body (Valid syntax of StatementList starting with a Class Declaration)
+esid: prod-StatementList
+features: [arrow-function, class]
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Declaration:
+ ClassDeclaration
+
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ ...
+
+ AssignmentExpression:
+ ConditionalExpression
+ [+Yield]YieldExpression
+ ArrowFunction
+
+ ArrowFunction:
+ ArrowParameters [no LineTerminator here] => ConciseBody
+
+ ConciseBody:
+ [lookahead ≠ {] AssignmentExpression
+ { FunctionBody }
+
+---*/
+
+
+var result = eval('class C {}() => { return 42; };');
+
+assert.sameValue(result(), 42);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/eval-class-block-with-labels.js b/js/src/tests/test262/language/statementList/eval-class-block-with-labels.js
new file mode 100644
index 0000000000..32f5543b41
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/eval-class-block-with-labels.js
@@ -0,0 +1,40 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/block-with-labels.case
+// - src/statementList/default/eval-class-declaration.template
+/*---
+description: Block with a label (Valid syntax of StatementList starting with a Class Declaration)
+esid: prod-StatementList
+features: [class]
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Declaration:
+ ClassDeclaration
+
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ // lookahead here prevents capturing an Object literal
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+---*/
+
+
+var result = eval('class C {}{x: 42};');
+
+assert.sameValue(result, 42, 'it does not evaluate to an Object with the property x');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/eval-class-block.js b/js/src/tests/test262/language/statementList/eval-class-block.js
new file mode 100644
index 0000000000..1682bca69f
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/eval-class-block.js
@@ -0,0 +1,40 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/block.case
+// - src/statementList/default/eval-class-declaration.template
+/*---
+description: Block (Valid syntax of StatementList starting with a Class Declaration)
+esid: prod-StatementList
+features: [class]
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Declaration:
+ ClassDeclaration
+
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ // lookahead here prevents capturing an Object literal
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+---*/
+
+
+var result = eval('class C {}{}');
+
+assert.sameValue(result, undefined);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/eval-class-expr-arrow-function-boolean-literal.js b/js/src/tests/test262/language/statementList/eval-class-expr-arrow-function-boolean-literal.js
new file mode 100644
index 0000000000..0ea869d92e
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/eval-class-expr-arrow-function-boolean-literal.js
@@ -0,0 +1,56 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/expr-arrow-function-boolean-literal.case
+// - src/statementList/default/eval-class-declaration.template
+/*---
+description: Expression with an Arrow Function and Boolean literal (Valid syntax of StatementList starting with a Class Declaration)
+esid: prod-StatementList
+features: [arrow-function, class]
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Declaration:
+ ClassDeclaration
+
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ Expression:
+ AssignmentExpression
+ Expression , AssignmentExpression
+
+ AssignmentExpression:
+ ConditionalExpression
+ [+Yield]YieldExpression
+ ArrowFunction
+
+ ArrowFunction:
+ ArrowParameters [no LineTerminator here] => ConciseBody
+
+ ConciseBody:
+ [lookahead ≠ {] AssignmentExpression
+ { FunctionBody }
+
+---*/
+
+
+var result = eval('class C {}() => 1, 42;');
+
+assert.sameValue(result, 42);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/eval-class-let-declaration.js b/js/src/tests/test262/language/statementList/eval-class-let-declaration.js
new file mode 100644
index 0000000000..483f40be29
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/eval-class-let-declaration.js
@@ -0,0 +1,38 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/let-declaration.case
+// - src/statementList/default/eval-class-declaration.template
+/*---
+description: LexicalDeclaration using Let (Valid syntax of StatementList starting with a Class Declaration)
+esid: prod-StatementList
+features: [class]
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Declaration:
+ ClassDeclaration
+
+
+ Declaration:
+ LexicalDeclaration
+
+ LexicalDeclaration:
+ LetOrConst BindingList ;
+
+ BindingList:
+ LexicalBinding
+ BindingList , LexicalBinding
+---*/
+
+
+var result = eval('class C {}let a, b = 42, c;b;');
+
+assert.sameValue(result, 42);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/eval-class-regexp-literal-flags.js b/js/src/tests/test262/language/statementList/eval-class-regexp-literal-flags.js
new file mode 100644
index 0000000000..968cfe8fac
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/eval-class-regexp-literal-flags.js
@@ -0,0 +1,44 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/regexp-literal-flags.case
+// - src/statementList/default/eval-class-declaration.template
+/*---
+description: Regular Expression Literal with Flags (Valid syntax of StatementList starting with a Class Declaration)
+esid: prod-StatementList
+features: [class]
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Declaration:
+ ClassDeclaration
+
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement[Yield, Await]:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ RegularExpressionLiteral ::
+ / RegularExpressionBody / RegularExpressionFlags
+---*/
+
+
+var result = eval('class C {}/1/g;');
+
+assert.sameValue(Object.getPrototypeOf(result), RegExp.prototype);
+assert.sameValue(result.flags, 'g');
+assert.sameValue(result.toString(), '/1/g');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/eval-class-regexp-literal.js b/js/src/tests/test262/language/statementList/eval-class-regexp-literal.js
new file mode 100644
index 0000000000..07b0555c47
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/eval-class-regexp-literal.js
@@ -0,0 +1,44 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/regexp-literal.case
+// - src/statementList/default/eval-class-declaration.template
+/*---
+description: Regular Expression Literal (Valid syntax of StatementList starting with a Class Declaration)
+esid: prod-StatementList
+features: [class]
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Declaration:
+ ClassDeclaration
+
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement[Yield, Await]:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ RegularExpressionLiteral ::
+ / RegularExpressionBody / RegularExpressionFlags
+---*/
+
+
+var result = eval('class C {}/1/;');
+
+assert.sameValue(Object.getPrototypeOf(result), RegExp.prototype);
+assert.sameValue(result.flags, '');
+assert.sameValue(result.toString(), '/1/');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/eval-fn-array-literal-with-item.js b/js/src/tests/test262/language/statementList/eval-fn-array-literal-with-item.js
new file mode 100644
index 0000000000..1e00eddc4f
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/eval-fn-array-literal-with-item.js
@@ -0,0 +1,47 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/array-literal-with-item.case
+// - src/statementList/default/eval-function-declaration.template
+/*---
+description: Array Literal with items (Eval production of StatementList starting with a Function Declaration)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Declaration:
+ HoistableDeclaration
+
+ FunctionDeclaration:
+ function BindingIdentifier ( FormalParameters ) { FunctionBody }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ ArrayLiteral[Yield, Await]:
+ [ Elision_opt ]
+ [ ElementList ]
+ [ ElementList , Elision_opt ]
+---*/
+
+
+var result = eval('function fn() {}[42];');
+
+assert.sameValue(Object.getPrototypeOf(result), Array.prototype);
+assert.sameValue(result.length, 1);
+assert.sameValue(result[0], 42);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/eval-fn-array-literal.js b/js/src/tests/test262/language/statementList/eval-fn-array-literal.js
new file mode 100644
index 0000000000..4debcfa534
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/eval-fn-array-literal.js
@@ -0,0 +1,46 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/array-literal.case
+// - src/statementList/default/eval-function-declaration.template
+/*---
+description: Array Literal (Eval production of StatementList starting with a Function Declaration)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Declaration:
+ HoistableDeclaration
+
+ FunctionDeclaration:
+ function BindingIdentifier ( FormalParameters ) { FunctionBody }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ ArrayLiteral[Yield, Await]:
+ [ Elision_opt ]
+ [ ElementList ]
+ [ ElementList , Elision_opt ]
+---*/
+
+
+var result = eval('function fn() {}[];');
+
+assert.sameValue(Object.getPrototypeOf(result), Array.prototype);
+assert.sameValue(result.length, 0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/eval-fn-arrow-function-assignment-expr.js b/js/src/tests/test262/language/statementList/eval-fn-arrow-function-assignment-expr.js
new file mode 100644
index 0000000000..29cd258e7e
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/eval-fn-arrow-function-assignment-expr.js
@@ -0,0 +1,56 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/arrow-function-assignment-expr.case
+// - src/statementList/default/eval-function-declaration.template
+/*---
+description: Arrow Function with an AssignmentExpression (Eval production of StatementList starting with a Function Declaration)
+esid: prod-StatementList
+features: [arrow-function]
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Declaration:
+ HoistableDeclaration
+
+ FunctionDeclaration:
+ function BindingIdentifier ( FormalParameters ) { FunctionBody }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ ...
+
+ AssignmentExpression:
+ ConditionalExpression
+ [+Yield]YieldExpression
+ ArrowFunction
+
+ ArrowFunction:
+ ArrowParameters [no LineTerminator here] => ConciseBody
+
+ ConciseBody:
+ [lookahead ≠ {] AssignmentExpression
+ { FunctionBody }
+
+---*/
+
+
+var result = eval('function fn() {}() => 42;');
+
+assert.sameValue(result(), 42);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/eval-fn-arrow-function-functionbody.js b/js/src/tests/test262/language/statementList/eval-fn-arrow-function-functionbody.js
new file mode 100644
index 0000000000..d41222aac7
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/eval-fn-arrow-function-functionbody.js
@@ -0,0 +1,56 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/arrow-function-functionbody.case
+// - src/statementList/default/eval-function-declaration.template
+/*---
+description: Arrow Function with a Function Body (Eval production of StatementList starting with a Function Declaration)
+esid: prod-StatementList
+features: [arrow-function]
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Declaration:
+ HoistableDeclaration
+
+ FunctionDeclaration:
+ function BindingIdentifier ( FormalParameters ) { FunctionBody }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ ...
+
+ AssignmentExpression:
+ ConditionalExpression
+ [+Yield]YieldExpression
+ ArrowFunction
+
+ ArrowFunction:
+ ArrowParameters [no LineTerminator here] => ConciseBody
+
+ ConciseBody:
+ [lookahead ≠ {] AssignmentExpression
+ { FunctionBody }
+
+---*/
+
+
+var result = eval('function fn() {}() => { return 42; };');
+
+assert.sameValue(result(), 42);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/eval-fn-block-with-labels.js b/js/src/tests/test262/language/statementList/eval-fn-block-with-labels.js
new file mode 100644
index 0000000000..9b4ef5366e
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/eval-fn-block-with-labels.js
@@ -0,0 +1,41 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/block-with-labels.case
+// - src/statementList/default/eval-function-declaration.template
+/*---
+description: Block with a label (Eval production of StatementList starting with a Function Declaration)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Declaration:
+ HoistableDeclaration
+
+ FunctionDeclaration:
+ function BindingIdentifier ( FormalParameters ) { FunctionBody }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ // lookahead here prevents capturing an Object literal
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+---*/
+
+
+var result = eval('function fn() {}{x: 42};');
+
+assert.sameValue(result, 42, 'it does not evaluate to an Object with the property x');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/eval-fn-block.js b/js/src/tests/test262/language/statementList/eval-fn-block.js
new file mode 100644
index 0000000000..4d46e8c74f
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/eval-fn-block.js
@@ -0,0 +1,41 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/block.case
+// - src/statementList/default/eval-function-declaration.template
+/*---
+description: Block (Eval production of StatementList starting with a Function Declaration)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Declaration:
+ HoistableDeclaration
+
+ FunctionDeclaration:
+ function BindingIdentifier ( FormalParameters ) { FunctionBody }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ // lookahead here prevents capturing an Object literal
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+---*/
+
+
+var result = eval('function fn() {}{}');
+
+assert.sameValue(result, undefined);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/eval-fn-expr-arrow-function-boolean-literal.js b/js/src/tests/test262/language/statementList/eval-fn-expr-arrow-function-boolean-literal.js
new file mode 100644
index 0000000000..f900079676
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/eval-fn-expr-arrow-function-boolean-literal.js
@@ -0,0 +1,58 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/expr-arrow-function-boolean-literal.case
+// - src/statementList/default/eval-function-declaration.template
+/*---
+description: Expression with an Arrow Function and Boolean literal (Eval production of StatementList starting with a Function Declaration)
+esid: prod-StatementList
+features: [arrow-function]
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Declaration:
+ HoistableDeclaration
+
+ FunctionDeclaration:
+ function BindingIdentifier ( FormalParameters ) { FunctionBody }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ Expression:
+ AssignmentExpression
+ Expression , AssignmentExpression
+
+ AssignmentExpression:
+ ConditionalExpression
+ [+Yield]YieldExpression
+ ArrowFunction
+
+ ArrowFunction:
+ ArrowParameters [no LineTerminator here] => ConciseBody
+
+ ConciseBody:
+ [lookahead ≠ {] AssignmentExpression
+ { FunctionBody }
+
+---*/
+
+
+var result = eval('function fn() {}() => 1, 42;');
+
+assert.sameValue(result, 42);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/eval-fn-let-declaration.js b/js/src/tests/test262/language/statementList/eval-fn-let-declaration.js
new file mode 100644
index 0000000000..68ae78bb18
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/eval-fn-let-declaration.js
@@ -0,0 +1,39 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/let-declaration.case
+// - src/statementList/default/eval-function-declaration.template
+/*---
+description: LexicalDeclaration using Let (Eval production of StatementList starting with a Function Declaration)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Declaration:
+ HoistableDeclaration
+
+ FunctionDeclaration:
+ function BindingIdentifier ( FormalParameters ) { FunctionBody }
+
+ Declaration:
+ LexicalDeclaration
+
+ LexicalDeclaration:
+ LetOrConst BindingList ;
+
+ BindingList:
+ LexicalBinding
+ BindingList , LexicalBinding
+---*/
+
+
+var result = eval('function fn() {}let a, b = 42, c;b;');
+
+assert.sameValue(result, 42);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/eval-fn-regexp-literal-flags.js b/js/src/tests/test262/language/statementList/eval-fn-regexp-literal-flags.js
new file mode 100644
index 0000000000..48861d4f34
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/eval-fn-regexp-literal-flags.js
@@ -0,0 +1,45 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/regexp-literal-flags.case
+// - src/statementList/default/eval-function-declaration.template
+/*---
+description: Regular Expression Literal with Flags (Eval production of StatementList starting with a Function Declaration)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Declaration:
+ HoistableDeclaration
+
+ FunctionDeclaration:
+ function BindingIdentifier ( FormalParameters ) { FunctionBody }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement[Yield, Await]:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ RegularExpressionLiteral ::
+ / RegularExpressionBody / RegularExpressionFlags
+---*/
+
+
+var result = eval('function fn() {}/1/g;');
+
+assert.sameValue(Object.getPrototypeOf(result), RegExp.prototype);
+assert.sameValue(result.flags, 'g');
+assert.sameValue(result.toString(), '/1/g');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/eval-fn-regexp-literal.js b/js/src/tests/test262/language/statementList/eval-fn-regexp-literal.js
new file mode 100644
index 0000000000..110beae7d8
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/eval-fn-regexp-literal.js
@@ -0,0 +1,45 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/regexp-literal.case
+// - src/statementList/default/eval-function-declaration.template
+/*---
+description: Regular Expression Literal (Eval production of StatementList starting with a Function Declaration)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Declaration:
+ HoistableDeclaration
+
+ FunctionDeclaration:
+ function BindingIdentifier ( FormalParameters ) { FunctionBody }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement[Yield, Await]:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ RegularExpressionLiteral ::
+ / RegularExpressionBody / RegularExpressionFlags
+---*/
+
+
+var result = eval('function fn() {}/1/;');
+
+assert.sameValue(Object.getPrototypeOf(result), RegExp.prototype);
+assert.sameValue(result.flags, '');
+assert.sameValue(result.toString(), '/1/');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/fn-array-literal-with-item.js b/js/src/tests/test262/language/statementList/fn-array-literal-with-item.js
new file mode 100644
index 0000000000..2eb407c6a1
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/fn-array-literal-with-item.js
@@ -0,0 +1,43 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/array-literal-with-item.case
+// - src/statementList/default/function-declaration.template
+/*---
+description: Array Literal with items (Valid syntax of StatementList starting with a Function Declaration)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Declaration:
+ HoistableDeclaration
+
+ FunctionDeclaration:
+ function BindingIdentifier ( FormalParameters ) { FunctionBody }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ ArrayLiteral[Yield, Await]:
+ [ Elision_opt ]
+ [ ElementList ]
+ [ ElementList , Elision_opt ]
+---*/
+
+
+function fn() {}[42];
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/fn-array-literal.js b/js/src/tests/test262/language/statementList/fn-array-literal.js
new file mode 100644
index 0000000000..cd832c2359
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/fn-array-literal.js
@@ -0,0 +1,43 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/array-literal.case
+// - src/statementList/default/function-declaration.template
+/*---
+description: Array Literal (Valid syntax of StatementList starting with a Function Declaration)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Declaration:
+ HoistableDeclaration
+
+ FunctionDeclaration:
+ function BindingIdentifier ( FormalParameters ) { FunctionBody }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ ArrayLiteral[Yield, Await]:
+ [ Elision_opt ]
+ [ ElementList ]
+ [ ElementList , Elision_opt ]
+---*/
+
+
+function fn() {}[];
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/fn-arrow-function-assignment-expr.js b/js/src/tests/test262/language/statementList/fn-arrow-function-assignment-expr.js
new file mode 100644
index 0000000000..16b8c869fd
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/fn-arrow-function-assignment-expr.js
@@ -0,0 +1,54 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/arrow-function-assignment-expr.case
+// - src/statementList/default/function-declaration.template
+/*---
+description: Arrow Function with an AssignmentExpression (Valid syntax of StatementList starting with a Function Declaration)
+esid: prod-StatementList
+features: [arrow-function]
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Declaration:
+ HoistableDeclaration
+
+ FunctionDeclaration:
+ function BindingIdentifier ( FormalParameters ) { FunctionBody }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ ...
+
+ AssignmentExpression:
+ ConditionalExpression
+ [+Yield]YieldExpression
+ ArrowFunction
+
+ ArrowFunction:
+ ArrowParameters [no LineTerminator here] => ConciseBody
+
+ ConciseBody:
+ [lookahead ≠ {] AssignmentExpression
+ { FunctionBody }
+
+---*/
+
+
+function fn() {}() => 42;
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/fn-arrow-function-functionbody.js b/js/src/tests/test262/language/statementList/fn-arrow-function-functionbody.js
new file mode 100644
index 0000000000..1f153799ab
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/fn-arrow-function-functionbody.js
@@ -0,0 +1,54 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/arrow-function-functionbody.case
+// - src/statementList/default/function-declaration.template
+/*---
+description: Arrow Function with a Function Body (Valid syntax of StatementList starting with a Function Declaration)
+esid: prod-StatementList
+features: [arrow-function]
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Declaration:
+ HoistableDeclaration
+
+ FunctionDeclaration:
+ function BindingIdentifier ( FormalParameters ) { FunctionBody }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ ...
+
+ AssignmentExpression:
+ ConditionalExpression
+ [+Yield]YieldExpression
+ ArrowFunction
+
+ ArrowFunction:
+ ArrowParameters [no LineTerminator here] => ConciseBody
+
+ ConciseBody:
+ [lookahead ≠ {] AssignmentExpression
+ { FunctionBody }
+
+---*/
+
+
+function fn() {}() => { return 42; };
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/fn-block-with-labels.js b/js/src/tests/test262/language/statementList/fn-block-with-labels.js
new file mode 100644
index 0000000000..86954a7ace
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/fn-block-with-labels.js
@@ -0,0 +1,39 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/block-with-labels.case
+// - src/statementList/default/function-declaration.template
+/*---
+description: Block with a label (Valid syntax of StatementList starting with a Function Declaration)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Declaration:
+ HoistableDeclaration
+
+ FunctionDeclaration:
+ function BindingIdentifier ( FormalParameters ) { FunctionBody }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ // lookahead here prevents capturing an Object literal
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+---*/
+
+
+function fn() {}{x: 42};
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/fn-block.js b/js/src/tests/test262/language/statementList/fn-block.js
new file mode 100644
index 0000000000..dac598923a
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/fn-block.js
@@ -0,0 +1,39 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/block.case
+// - src/statementList/default/function-declaration.template
+/*---
+description: Block (Valid syntax of StatementList starting with a Function Declaration)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Declaration:
+ HoistableDeclaration
+
+ FunctionDeclaration:
+ function BindingIdentifier ( FormalParameters ) { FunctionBody }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ // lookahead here prevents capturing an Object literal
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+---*/
+
+
+function fn() {}{}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/fn-expr-arrow-function-boolean-literal.js b/js/src/tests/test262/language/statementList/fn-expr-arrow-function-boolean-literal.js
new file mode 100644
index 0000000000..3800df0064
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/fn-expr-arrow-function-boolean-literal.js
@@ -0,0 +1,56 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/expr-arrow-function-boolean-literal.case
+// - src/statementList/default/function-declaration.template
+/*---
+description: Expression with an Arrow Function and Boolean literal (Valid syntax of StatementList starting with a Function Declaration)
+esid: prod-StatementList
+features: [arrow-function]
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Declaration:
+ HoistableDeclaration
+
+ FunctionDeclaration:
+ function BindingIdentifier ( FormalParameters ) { FunctionBody }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ Expression:
+ AssignmentExpression
+ Expression , AssignmentExpression
+
+ AssignmentExpression:
+ ConditionalExpression
+ [+Yield]YieldExpression
+ ArrowFunction
+
+ ArrowFunction:
+ ArrowParameters [no LineTerminator here] => ConciseBody
+
+ ConciseBody:
+ [lookahead ≠ {] AssignmentExpression
+ { FunctionBody }
+
+---*/
+
+
+function fn() {}() => 1, 42;
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/fn-let-declaration.js b/js/src/tests/test262/language/statementList/fn-let-declaration.js
new file mode 100644
index 0000000000..de6c28631f
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/fn-let-declaration.js
@@ -0,0 +1,37 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/let-declaration.case
+// - src/statementList/default/function-declaration.template
+/*---
+description: LexicalDeclaration using Let (Valid syntax of StatementList starting with a Function Declaration)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Declaration:
+ HoistableDeclaration
+
+ FunctionDeclaration:
+ function BindingIdentifier ( FormalParameters ) { FunctionBody }
+
+ Declaration:
+ LexicalDeclaration
+
+ LexicalDeclaration:
+ LetOrConst BindingList ;
+
+ BindingList:
+ LexicalBinding
+ BindingList , LexicalBinding
+---*/
+
+
+function fn() {}let a, b = 42, c;b;
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/fn-regexp-literal-flags.js b/js/src/tests/test262/language/statementList/fn-regexp-literal-flags.js
new file mode 100644
index 0000000000..5c426ec3fa
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/fn-regexp-literal-flags.js
@@ -0,0 +1,41 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/regexp-literal-flags.case
+// - src/statementList/default/function-declaration.template
+/*---
+description: Regular Expression Literal with Flags (Valid syntax of StatementList starting with a Function Declaration)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Declaration:
+ HoistableDeclaration
+
+ FunctionDeclaration:
+ function BindingIdentifier ( FormalParameters ) { FunctionBody }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement[Yield, Await]:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ RegularExpressionLiteral ::
+ / RegularExpressionBody / RegularExpressionFlags
+---*/
+
+
+function fn() {}/1/g;
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/fn-regexp-literal.js b/js/src/tests/test262/language/statementList/fn-regexp-literal.js
new file mode 100644
index 0000000000..e335e4f1d9
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/fn-regexp-literal.js
@@ -0,0 +1,41 @@
+// This file was procedurally generated from the following sources:
+// - src/statementList/regexp-literal.case
+// - src/statementList/default/function-declaration.template
+/*---
+description: Regular Expression Literal (Valid syntax of StatementList starting with a Function Declaration)
+esid: prod-StatementList
+flags: [generated]
+info: |
+ StatementList:
+ StatementListItem
+ StatementList StatementListItem
+
+ StatementListItem:
+ Statement
+ Declaration
+
+ Declaration:
+ HoistableDeclaration
+
+ FunctionDeclaration:
+ function BindingIdentifier ( FormalParameters ) { FunctionBody }
+
+ Statement:
+ BlockStatement
+ VariableStatement
+ EmptyStatement
+ ExpressionStatement
+ ...
+
+ ExpressionStatement[Yield, Await]:
+ [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ Expression ;
+
+ RegularExpressionLiteral ::
+ / RegularExpressionBody / RegularExpressionFlags
+---*/
+
+
+function fn() {}/1/;
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/statementList/shell.js b/js/src/tests/test262/language/statementList/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/language/statementList/shell.js