diff options
Diffstat (limited to 'js/src/tests/test262/language/statementList')
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 |