diff --git a/packages/babel-parser/src/index.js b/packages/babel-parser/src/index.js index d9f812695545..3e9696b858fc 100755 --- a/packages/babel-parser/src/index.js +++ b/packages/babel-parser/src/index.js @@ -25,15 +25,32 @@ export function parse(input: string, options?: Options): File { const parser = getParser(options, input); const ast = parser.parse(); - // Rather than try to parse as a script first, we opt to parse as a module and convert back - // to a script where possible to avoid having to do a full re-parse of the input content. - if (!parser.sawUnambiguousESM) ast.program.sourceType = "script"; + if (parser.sawUnambiguousESM) { + return ast; + } + + if (parser.ambiguousScriptDifferentAst) { + // Top level await introduces code which can be both a valid script and + // a valid module, but which produces different ASTs: + // await + // 0 + // can be parsed either as an AwaitExpression, or as two ExpressionStatements. + try { + options.sourceType = "script"; + return getParser(options, input).parse(); + } catch {} + } else { + // This is both a valid module and a valid script, but + // we parse it as a script by default + ast.program.sourceType = "script"; + } + return ast; } catch (moduleError) { try { options.sourceType = "script"; return getParser(options, input).parse(); - } catch (scriptError) {} + } catch {} throw moduleError; } diff --git a/packages/babel-parser/src/parser/base.js b/packages/babel-parser/src/parser/base.js index 1e451794158c..f4fb9f3b66e0 100644 --- a/packages/babel-parser/src/parser/base.js +++ b/packages/babel-parser/src/parser/base.js @@ -13,6 +13,7 @@ export default class BaseParser { plugins: PluginsMap; filename: ?string; sawUnambiguousESM: boolean = false; + ambiguousScriptDifferentAst: boolean = false; // Initialized by Tokenizer state: State; diff --git a/packages/babel-parser/src/parser/expression.js b/packages/babel-parser/src/parser/expression.js index 556ac6daa7be..04299e439830 100644 --- a/packages/babel-parser/src/parser/expression.js +++ b/packages/babel-parser/src/parser/expression.js @@ -2208,6 +2208,7 @@ export default class ExpressionParser extends LValParser { isAwaitAllowed(): boolean { if (this.scope.inFunction) return this.scope.inAsync; if (this.options.allowAwaitOutsideFunction) return true; + if (this.hasPlugin("topLevelAwait")) return this.inModule; return false; } @@ -2234,9 +2235,33 @@ export default class ExpressionParser extends LValParser { ); } + if (!this.scope.inFunction && !this.options.allowAwaitOutsideFunction) { + if ( + this.hasPrecedingLineBreak() || + // All the following expressions are ambiguous: + // await + 0, await - 0, await ( 0 ), await [ 0 ], await / 0 /u, await `` + this.match(tt.plusMin) || + this.match(tt.parenL) || + this.match(tt.bracketL) || + this.match(tt.backQuote) || + // Sometimes the tokenizer generates tt.slash for regexps, and this is + // handler by parseExprAtom + this.match(tt.regexp) || + this.match(tt.slash) || + // This code could be parsed both as a modulo operator or as an intrinsic: + // await %x(0) + (this.hasPlugin("v8intrinsic") && this.match(tt.modulo)) + ) { + this.ambiguousScriptDifferentAst = true; + } else { + this.sawUnambiguousESM = true; + } + } + if (!this.state.soloAwait) { node.argument = this.parseMaybeUnary(); } + return this.finishNode(node, "AwaitExpression"); } diff --git a/packages/babel-parser/src/parser/statement.js b/packages/babel-parser/src/parser/statement.js index 6a67349b2820..9d87c3d27ed2 100644 --- a/packages/babel-parser/src/parser/statement.js +++ b/packages/babel-parser/src/parser/statement.js @@ -495,11 +495,7 @@ export default class StatementParser extends ExpressionParser { this.state.labels.push(loopLabel); let awaitAt = -1; - if ( - (this.scope.inAsync || - (!this.scope.inFunction && this.options.allowAwaitOutsideFunction)) && - this.eatContextual("await") - ) { + if (this.isAwaitAllowed() && this.eatContextual("await")) { awaitAt = this.state.lastTokStart; } this.scope.enter(SCOPE_OTHER); diff --git a/packages/babel-parser/test/fixtures/experimental/top-level-await/export-default/input.js b/packages/babel-parser/test/fixtures/experimental/top-level-await/export-default/input.js new file mode 100644 index 000000000000..fd1dbe08b03f --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/top-level-await/export-default/input.js @@ -0,0 +1 @@ +export default await 0; \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/experimental/top-level-await/export-default/options.json b/packages/babel-parser/test/fixtures/experimental/top-level-await/export-default/options.json new file mode 100644 index 000000000000..4d7a9975be5a --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/top-level-await/export-default/options.json @@ -0,0 +1,4 @@ +{ + "plugins": ["topLevelAwait"], + "sourceType": "module" +} \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/experimental/top-level-await/export-default/output.json b/packages/babel-parser/test/fixtures/experimental/top-level-await/export-default/output.json new file mode 100644 index 000000000000..81e260bd12b2 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/top-level-await/export-default/output.json @@ -0,0 +1,85 @@ +{ + "type": "File", + "start": 0, + "end": 23, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 23 + } + }, + "program": { + "type": "Program", + "start": 0, + "end": 23, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 23 + } + }, + "sourceType": "module", + "interpreter": null, + "body": [ + { + "type": "ExportDefaultDeclaration", + "start": 0, + "end": 23, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 23 + } + }, + "declaration": { + "type": "AwaitExpression", + "start": 15, + "end": 22, + "loc": { + "start": { + "line": 1, + "column": 15 + }, + "end": { + "line": 1, + "column": 22 + } + }, + "argument": { + "type": "NumericLiteral", + "start": 21, + "end": 22, + "loc": { + "start": { + "line": 1, + "column": 21 + }, + "end": { + "line": 1, + "column": 22 + } + }, + "extra": { + "rawValue": 0, + "raw": "0" + }, + "value": 0 + } + } + } + ], + "directives": [] + } +} \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/experimental/top-level-await/for-await-module/input.js b/packages/babel-parser/test/fixtures/experimental/top-level-await/for-await-module/input.js new file mode 100644 index 000000000000..ac76014a6f83 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/top-level-await/for-await-module/input.js @@ -0,0 +1 @@ +for await (const a of b); \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/experimental/top-level-await/for-await-module/options.json b/packages/babel-parser/test/fixtures/experimental/top-level-await/for-await-module/options.json new file mode 100644 index 000000000000..aadc3411ae9b --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/top-level-await/for-await-module/options.json @@ -0,0 +1,4 @@ +{ + "plugins": ["topLevelAwait"], + "sourceType": "module" +} diff --git a/packages/babel-parser/test/fixtures/experimental/top-level-await/for-await-module/output.json b/packages/babel-parser/test/fixtures/experimental/top-level-await/for-await-module/output.json new file mode 100644 index 000000000000..42be5c156ae8 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/top-level-await/for-await-module/output.json @@ -0,0 +1,134 @@ +{ + "type": "File", + "start": 0, + "end": 25, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 25 + } + }, + "program": { + "type": "Program", + "start": 0, + "end": 25, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 25 + } + }, + "sourceType": "module", + "interpreter": null, + "body": [ + { + "type": "ForOfStatement", + "start": 0, + "end": 25, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 25 + } + }, + "await": true, + "left": { + "type": "VariableDeclaration", + "start": 11, + "end": 18, + "loc": { + "start": { + "line": 1, + "column": 11 + }, + "end": { + "line": 1, + "column": 18 + } + }, + "declarations": [ + { + "type": "VariableDeclarator", + "start": 17, + "end": 18, + "loc": { + "start": { + "line": 1, + "column": 17 + }, + "end": { + "line": 1, + "column": 18 + } + }, + "id": { + "type": "Identifier", + "start": 17, + "end": 18, + "loc": { + "start": { + "line": 1, + "column": 17 + }, + "end": { + "line": 1, + "column": 18 + }, + "identifierName": "a" + }, + "name": "a" + }, + "init": null + } + ], + "kind": "const" + }, + "right": { + "type": "Identifier", + "start": 22, + "end": 23, + "loc": { + "start": { + "line": 1, + "column": 22 + }, + "end": { + "line": 1, + "column": 23 + }, + "identifierName": "b" + }, + "name": "b" + }, + "body": { + "type": "EmptyStatement", + "start": 24, + "end": 25, + "loc": { + "start": { + "line": 1, + "column": 24 + }, + "end": { + "line": 1, + "column": 25 + } + } + } + } + ], + "directives": [] + } +} \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/experimental/top-level-await/for-await-script/input.js b/packages/babel-parser/test/fixtures/experimental/top-level-await/for-await-script/input.js new file mode 100644 index 000000000000..ac76014a6f83 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/top-level-await/for-await-script/input.js @@ -0,0 +1 @@ +for await (const a of b); \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/experimental/top-level-await/for-await-script/options.json b/packages/babel-parser/test/fixtures/experimental/top-level-await/for-await-script/options.json new file mode 100644 index 000000000000..ad8783d13faa --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/top-level-await/for-await-script/options.json @@ -0,0 +1,5 @@ +{ + "plugins": ["topLevelAwait"], + "sourceType": "script", + "throws": "Unexpected token, expected \"(\" (1:4)" +} diff --git a/packages/babel-parser/test/fixtures/experimental/top-level-await/inside-arrow/input.js b/packages/babel-parser/test/fixtures/experimental/top-level-await/inside-arrow/input.js new file mode 100644 index 000000000000..bde15d37c8ca --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/top-level-await/inside-arrow/input.js @@ -0,0 +1 @@ +() => await 0; diff --git a/packages/babel-parser/test/fixtures/experimental/top-level-await/inside-arrow/options.json b/packages/babel-parser/test/fixtures/experimental/top-level-await/inside-arrow/options.json new file mode 100644 index 000000000000..95eb740f8dfb --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/top-level-await/inside-arrow/options.json @@ -0,0 +1,5 @@ +{ + "plugins": ["topLevelAwait"], + "sourceType": "module", + "throws": "Can not use keyword 'await' outside an async function (1:6)" +} diff --git a/packages/babel-parser/test/fixtures/experimental/top-level-await/inside-block/input.js b/packages/babel-parser/test/fixtures/experimental/top-level-await/inside-block/input.js new file mode 100644 index 000000000000..f264b0344b3b --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/top-level-await/inside-block/input.js @@ -0,0 +1,3 @@ +if (true) { + await 0; +} \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/experimental/top-level-await/inside-block/options.json b/packages/babel-parser/test/fixtures/experimental/top-level-await/inside-block/options.json new file mode 100644 index 000000000000..aadc3411ae9b --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/top-level-await/inside-block/options.json @@ -0,0 +1,4 @@ +{ + "plugins": ["topLevelAwait"], + "sourceType": "module" +} diff --git a/packages/babel-parser/test/fixtures/experimental/top-level-await/inside-block/output.json b/packages/babel-parser/test/fixtures/experimental/top-level-await/inside-block/output.json new file mode 100644 index 000000000000..b70dffe352c1 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/top-level-await/inside-block/output.json @@ -0,0 +1,135 @@ +{ + "type": "File", + "start": 0, + "end": 24, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 3, + "column": 1 + } + }, + "program": { + "type": "Program", + "start": 0, + "end": 24, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 3, + "column": 1 + } + }, + "sourceType": "module", + "interpreter": null, + "body": [ + { + "type": "IfStatement", + "start": 0, + "end": 24, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 3, + "column": 1 + } + }, + "test": { + "type": "BooleanLiteral", + "start": 4, + "end": 8, + "loc": { + "start": { + "line": 1, + "column": 4 + }, + "end": { + "line": 1, + "column": 8 + } + }, + "value": true + }, + "consequent": { + "type": "BlockStatement", + "start": 10, + "end": 24, + "loc": { + "start": { + "line": 1, + "column": 10 + }, + "end": { + "line": 3, + "column": 1 + } + }, + "body": [ + { + "type": "ExpressionStatement", + "start": 14, + "end": 22, + "loc": { + "start": { + "line": 2, + "column": 2 + }, + "end": { + "line": 2, + "column": 10 + } + }, + "expression": { + "type": "AwaitExpression", + "start": 14, + "end": 21, + "loc": { + "start": { + "line": 2, + "column": 2 + }, + "end": { + "line": 2, + "column": 9 + } + }, + "argument": { + "type": "NumericLiteral", + "start": 20, + "end": 21, + "loc": { + "start": { + "line": 2, + "column": 8 + }, + "end": { + "line": 2, + "column": 9 + } + }, + "extra": { + "rawValue": 0, + "raw": "0" + }, + "value": 0 + } + } + } + ], + "directives": [] + }, + "alternate": null + } + ], + "directives": [] + } +} \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/experimental/top-level-await/inside-function/input.js b/packages/babel-parser/test/fixtures/experimental/top-level-await/inside-function/input.js new file mode 100644 index 000000000000..ced447b77235 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/top-level-await/inside-function/input.js @@ -0,0 +1,3 @@ +function fn() { + await 0; +} \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/experimental/top-level-await/inside-function/options.json b/packages/babel-parser/test/fixtures/experimental/top-level-await/inside-function/options.json new file mode 100644 index 000000000000..d09f3f654766 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/top-level-await/inside-function/options.json @@ -0,0 +1,5 @@ +{ + "plugins": ["topLevelAwait"], + "sourceType": "module", + "throws": "Can not use keyword 'await' outside an async function (2:2)" +} diff --git a/packages/babel-parser/test/fixtures/experimental/top-level-await/top-level-module/input.js b/packages/babel-parser/test/fixtures/experimental/top-level-await/top-level-module/input.js new file mode 100644 index 000000000000..d8ddd6c0ad0b --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/top-level-await/top-level-module/input.js @@ -0,0 +1 @@ +await 0; \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/experimental/top-level-await/top-level-module/options.json b/packages/babel-parser/test/fixtures/experimental/top-level-await/top-level-module/options.json new file mode 100644 index 000000000000..aadc3411ae9b --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/top-level-await/top-level-module/options.json @@ -0,0 +1,4 @@ +{ + "plugins": ["topLevelAwait"], + "sourceType": "module" +} diff --git a/packages/babel-parser/test/fixtures/experimental/top-level-await/top-level-module/output.json b/packages/babel-parser/test/fixtures/experimental/top-level-await/top-level-module/output.json new file mode 100644 index 000000000000..02ef8ffabf64 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/top-level-await/top-level-module/output.json @@ -0,0 +1,85 @@ +{ + "type": "File", + "start": 0, + "end": 8, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 8 + } + }, + "program": { + "type": "Program", + "start": 0, + "end": 8, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 8 + } + }, + "sourceType": "module", + "interpreter": null, + "body": [ + { + "type": "ExpressionStatement", + "start": 0, + "end": 8, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 8 + } + }, + "expression": { + "type": "AwaitExpression", + "start": 0, + "end": 7, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "argument": { + "type": "NumericLiteral", + "start": 6, + "end": 7, + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "extra": { + "rawValue": 0, + "raw": "0" + }, + "value": 0 + } + } + } + ], + "directives": [] + } +} \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/experimental/top-level-await/top-level-script/input.js b/packages/babel-parser/test/fixtures/experimental/top-level-await/top-level-script/input.js new file mode 100644 index 000000000000..d8ddd6c0ad0b --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/top-level-await/top-level-script/input.js @@ -0,0 +1 @@ +await 0; \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/experimental/top-level-await/top-level-script/options.json b/packages/babel-parser/test/fixtures/experimental/top-level-await/top-level-script/options.json new file mode 100644 index 000000000000..c9dc6113fea3 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/top-level-await/top-level-script/options.json @@ -0,0 +1,5 @@ +{ + "plugins": ["topLevelAwait"], + "sourceType": "script", + "throws": "Unexpected token, expected \";\" (1:6)" +} diff --git a/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-ambiguous-allowAwaitOutsideFunction/input.js b/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-ambiguous-allowAwaitOutsideFunction/input.js new file mode 100644 index 000000000000..1fa05e429c67 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-ambiguous-allowAwaitOutsideFunction/input.js @@ -0,0 +1,7 @@ +await 0 + +await + 0 +await - 0 +await ( 0 ) +await [ 0 ] +await / 0 /u diff --git a/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-ambiguous-allowAwaitOutsideFunction/options.json b/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-ambiguous-allowAwaitOutsideFunction/options.json new file mode 100644 index 000000000000..aceca10c3d74 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-ambiguous-allowAwaitOutsideFunction/options.json @@ -0,0 +1,5 @@ +{ + "plugins": ["topLevelAwait"], + "sourceType": "unambiguous", + "allowAwaitOutsideFunction": true +} diff --git a/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-ambiguous-allowAwaitOutsideFunction/output.json b/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-ambiguous-allowAwaitOutsideFunction/output.json new file mode 100644 index 000000000000..76e30779fc90 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-ambiguous-allowAwaitOutsideFunction/output.json @@ -0,0 +1,388 @@ +{ + "type": "File", + "start": 0, + "end": 65, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 7, + "column": 12 + } + }, + "program": { + "type": "Program", + "start": 0, + "end": 65, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 7, + "column": 12 + } + }, + "sourceType": "script", + "interpreter": null, + "body": [ + { + "type": "ExpressionStatement", + "start": 0, + "end": 7, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "expression": { + "type": "AwaitExpression", + "start": 0, + "end": 7, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "argument": { + "type": "NumericLiteral", + "start": 6, + "end": 7, + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "extra": { + "rawValue": 0, + "raw": "0" + }, + "value": 0 + } + } + }, + { + "type": "ExpressionStatement", + "start": 9, + "end": 18, + "loc": { + "start": { + "line": 3, + "column": 0 + }, + "end": { + "line": 3, + "column": 9 + } + }, + "expression": { + "type": "AwaitExpression", + "start": 9, + "end": 18, + "loc": { + "start": { + "line": 3, + "column": 0 + }, + "end": { + "line": 3, + "column": 9 + } + }, + "argument": { + "type": "UnaryExpression", + "start": 15, + "end": 18, + "loc": { + "start": { + "line": 3, + "column": 6 + }, + "end": { + "line": 3, + "column": 9 + } + }, + "operator": "+", + "prefix": true, + "argument": { + "type": "NumericLiteral", + "start": 17, + "end": 18, + "loc": { + "start": { + "line": 3, + "column": 8 + }, + "end": { + "line": 3, + "column": 9 + } + }, + "extra": { + "rawValue": 0, + "raw": "0" + }, + "value": 0 + } + } + } + }, + { + "type": "ExpressionStatement", + "start": 19, + "end": 28, + "loc": { + "start": { + "line": 4, + "column": 0 + }, + "end": { + "line": 4, + "column": 9 + } + }, + "expression": { + "type": "AwaitExpression", + "start": 19, + "end": 28, + "loc": { + "start": { + "line": 4, + "column": 0 + }, + "end": { + "line": 4, + "column": 9 + } + }, + "argument": { + "type": "UnaryExpression", + "start": 25, + "end": 28, + "loc": { + "start": { + "line": 4, + "column": 6 + }, + "end": { + "line": 4, + "column": 9 + } + }, + "operator": "-", + "prefix": true, + "argument": { + "type": "NumericLiteral", + "start": 27, + "end": 28, + "loc": { + "start": { + "line": 4, + "column": 8 + }, + "end": { + "line": 4, + "column": 9 + } + }, + "extra": { + "rawValue": 0, + "raw": "0" + }, + "value": 0 + } + } + } + }, + { + "type": "ExpressionStatement", + "start": 29, + "end": 40, + "loc": { + "start": { + "line": 5, + "column": 0 + }, + "end": { + "line": 5, + "column": 11 + } + }, + "expression": { + "type": "AwaitExpression", + "start": 29, + "end": 40, + "loc": { + "start": { + "line": 5, + "column": 0 + }, + "end": { + "line": 5, + "column": 11 + } + }, + "argument": { + "type": "NumericLiteral", + "start": 37, + "end": 38, + "loc": { + "start": { + "line": 5, + "column": 8 + }, + "end": { + "line": 5, + "column": 9 + } + }, + "extra": { + "rawValue": 0, + "raw": "0", + "parenthesized": true, + "parenStart": 35 + }, + "value": 0 + } + } + }, + { + "type": "ExpressionStatement", + "start": 41, + "end": 52, + "loc": { + "start": { + "line": 6, + "column": 0 + }, + "end": { + "line": 6, + "column": 11 + } + }, + "expression": { + "type": "AwaitExpression", + "start": 41, + "end": 52, + "loc": { + "start": { + "line": 6, + "column": 0 + }, + "end": { + "line": 6, + "column": 11 + } + }, + "argument": { + "type": "ArrayExpression", + "start": 47, + "end": 52, + "loc": { + "start": { + "line": 6, + "column": 6 + }, + "end": { + "line": 6, + "column": 11 + } + }, + "elements": [ + { + "type": "NumericLiteral", + "start": 49, + "end": 50, + "loc": { + "start": { + "line": 6, + "column": 8 + }, + "end": { + "line": 6, + "column": 9 + } + }, + "extra": { + "rawValue": 0, + "raw": "0" + }, + "value": 0 + } + ] + } + } + }, + { + "type": "ExpressionStatement", + "start": 53, + "end": 65, + "loc": { + "start": { + "line": 7, + "column": 0 + }, + "end": { + "line": 7, + "column": 12 + } + }, + "expression": { + "type": "AwaitExpression", + "start": 53, + "end": 65, + "loc": { + "start": { + "line": 7, + "column": 0 + }, + "end": { + "line": 7, + "column": 12 + } + }, + "argument": { + "type": "RegExpLiteral", + "start": 59, + "end": 65, + "loc": { + "start": { + "line": 7, + "column": 6 + }, + "end": { + "line": 7, + "column": 12 + } + }, + "extra": { + "raw": "/ 0 /u" + }, + "pattern": " 0 ", + "flags": "u" + } + } + } + ], + "directives": [] + } +} \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-ambiguous-modulo/input.js b/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-ambiguous-modulo/input.js new file mode 100644 index 000000000000..735a0162b362 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-ambiguous-modulo/input.js @@ -0,0 +1 @@ +await %x(0) \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-ambiguous-modulo/options.json b/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-ambiguous-modulo/options.json new file mode 100644 index 000000000000..2503b82adf74 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-ambiguous-modulo/options.json @@ -0,0 +1,4 @@ +{ + "plugins": ["topLevelAwait"], + "sourceType": "unambiguous" +} diff --git a/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-ambiguous-modulo/output.json b/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-ambiguous-modulo/output.json new file mode 100644 index 000000000000..5805e3195560 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-ambiguous-modulo/output.json @@ -0,0 +1,137 @@ +{ + "type": "File", + "start": 0, + "end": 11, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 11 + } + }, + "program": { + "type": "Program", + "start": 0, + "end": 11, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 11 + } + }, + "sourceType": "script", + "interpreter": null, + "body": [ + { + "type": "ExpressionStatement", + "start": 0, + "end": 11, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 11 + } + }, + "expression": { + "type": "BinaryExpression", + "start": 0, + "end": 11, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 11 + } + }, + "left": { + "type": "Identifier", + "start": 0, + "end": 5, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 5 + }, + "identifierName": "await" + }, + "name": "await" + }, + "operator": "%", + "right": { + "type": "CallExpression", + "start": 7, + "end": 11, + "loc": { + "start": { + "line": 1, + "column": 7 + }, + "end": { + "line": 1, + "column": 11 + } + }, + "callee": { + "type": "Identifier", + "start": 7, + "end": 8, + "loc": { + "start": { + "line": 1, + "column": 7 + }, + "end": { + "line": 1, + "column": 8 + }, + "identifierName": "x" + }, + "name": "x" + }, + "arguments": [ + { + "type": "NumericLiteral", + "start": 9, + "end": 10, + "loc": { + "start": { + "line": 1, + "column": 9 + }, + "end": { + "line": 1, + "column": 10 + } + }, + "extra": { + "rawValue": 0, + "raw": "0" + }, + "value": 0 + } + ] + } + } + } + ], + "directives": [] + } +} \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-ambiguous-script/input.js b/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-ambiguous-script/input.js new file mode 100644 index 000000000000..9fac4af0f0aa --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-ambiguous-script/input.js @@ -0,0 +1,8 @@ +await +0 + +await + 0 +await - 0 +await ( 0 ) +await [ 0 ] +await / 0 /u diff --git a/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-ambiguous-script/options.json b/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-ambiguous-script/options.json new file mode 100644 index 000000000000..2503b82adf74 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-ambiguous-script/options.json @@ -0,0 +1,4 @@ +{ + "plugins": ["topLevelAwait"], + "sourceType": "unambiguous" +} diff --git a/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-ambiguous-script/output.json b/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-ambiguous-script/output.json new file mode 100644 index 000000000000..76a211cbb464 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-ambiguous-script/output.json @@ -0,0 +1,476 @@ +{ + "type": "File", + "start": 0, + "end": 65, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 8, + "column": 12 + } + }, + "program": { + "type": "Program", + "start": 0, + "end": 65, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 8, + "column": 12 + } + }, + "sourceType": "script", + "interpreter": null, + "body": [ + { + "type": "ExpressionStatement", + "start": 0, + "end": 5, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "expression": { + "type": "Identifier", + "start": 0, + "end": 5, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 5 + }, + "identifierName": "await" + }, + "name": "await" + } + }, + { + "type": "ExpressionStatement", + "start": 6, + "end": 7, + "loc": { + "start": { + "line": 2, + "column": 0 + }, + "end": { + "line": 2, + "column": 1 + } + }, + "expression": { + "type": "NumericLiteral", + "start": 6, + "end": 7, + "loc": { + "start": { + "line": 2, + "column": 0 + }, + "end": { + "line": 2, + "column": 1 + } + }, + "extra": { + "rawValue": 0, + "raw": "0" + }, + "value": 0 + } + }, + { + "type": "ExpressionStatement", + "start": 9, + "end": 18, + "loc": { + "start": { + "line": 4, + "column": 0 + }, + "end": { + "line": 4, + "column": 9 + } + }, + "expression": { + "type": "BinaryExpression", + "start": 9, + "end": 18, + "loc": { + "start": { + "line": 4, + "column": 0 + }, + "end": { + "line": 4, + "column": 9 + } + }, + "left": { + "type": "Identifier", + "start": 9, + "end": 14, + "loc": { + "start": { + "line": 4, + "column": 0 + }, + "end": { + "line": 4, + "column": 5 + }, + "identifierName": "await" + }, + "name": "await" + }, + "operator": "+", + "right": { + "type": "NumericLiteral", + "start": 17, + "end": 18, + "loc": { + "start": { + "line": 4, + "column": 8 + }, + "end": { + "line": 4, + "column": 9 + } + }, + "extra": { + "rawValue": 0, + "raw": "0" + }, + "value": 0 + } + } + }, + { + "type": "ExpressionStatement", + "start": 19, + "end": 28, + "loc": { + "start": { + "line": 5, + "column": 0 + }, + "end": { + "line": 5, + "column": 9 + } + }, + "expression": { + "type": "BinaryExpression", + "start": 19, + "end": 28, + "loc": { + "start": { + "line": 5, + "column": 0 + }, + "end": { + "line": 5, + "column": 9 + } + }, + "left": { + "type": "Identifier", + "start": 19, + "end": 24, + "loc": { + "start": { + "line": 5, + "column": 0 + }, + "end": { + "line": 5, + "column": 5 + }, + "identifierName": "await" + }, + "name": "await" + }, + "operator": "-", + "right": { + "type": "NumericLiteral", + "start": 27, + "end": 28, + "loc": { + "start": { + "line": 5, + "column": 8 + }, + "end": { + "line": 5, + "column": 9 + } + }, + "extra": { + "rawValue": 0, + "raw": "0" + }, + "value": 0 + } + } + }, + { + "type": "ExpressionStatement", + "start": 29, + "end": 40, + "loc": { + "start": { + "line": 6, + "column": 0 + }, + "end": { + "line": 6, + "column": 11 + } + }, + "expression": { + "type": "CallExpression", + "start": 29, + "end": 40, + "loc": { + "start": { + "line": 6, + "column": 0 + }, + "end": { + "line": 6, + "column": 11 + } + }, + "callee": { + "type": "Identifier", + "start": 29, + "end": 34, + "loc": { + "start": { + "line": 6, + "column": 0 + }, + "end": { + "line": 6, + "column": 5 + }, + "identifierName": "await" + }, + "name": "await" + }, + "arguments": [ + { + "type": "NumericLiteral", + "start": 37, + "end": 38, + "loc": { + "start": { + "line": 6, + "column": 8 + }, + "end": { + "line": 6, + "column": 9 + } + }, + "extra": { + "rawValue": 0, + "raw": "0" + }, + "value": 0 + } + ] + } + }, + { + "type": "ExpressionStatement", + "start": 41, + "end": 52, + "loc": { + "start": { + "line": 7, + "column": 0 + }, + "end": { + "line": 7, + "column": 11 + } + }, + "expression": { + "type": "MemberExpression", + "start": 41, + "end": 52, + "loc": { + "start": { + "line": 7, + "column": 0 + }, + "end": { + "line": 7, + "column": 11 + } + }, + "object": { + "type": "Identifier", + "start": 41, + "end": 46, + "loc": { + "start": { + "line": 7, + "column": 0 + }, + "end": { + "line": 7, + "column": 5 + }, + "identifierName": "await" + }, + "name": "await" + }, + "property": { + "type": "NumericLiteral", + "start": 49, + "end": 50, + "loc": { + "start": { + "line": 7, + "column": 8 + }, + "end": { + "line": 7, + "column": 9 + } + }, + "extra": { + "rawValue": 0, + "raw": "0" + }, + "value": 0 + }, + "computed": true + } + }, + { + "type": "ExpressionStatement", + "start": 53, + "end": 65, + "loc": { + "start": { + "line": 8, + "column": 0 + }, + "end": { + "line": 8, + "column": 12 + } + }, + "expression": { + "type": "BinaryExpression", + "start": 53, + "end": 65, + "loc": { + "start": { + "line": 8, + "column": 0 + }, + "end": { + "line": 8, + "column": 12 + } + }, + "left": { + "type": "BinaryExpression", + "start": 53, + "end": 62, + "loc": { + "start": { + "line": 8, + "column": 0 + }, + "end": { + "line": 8, + "column": 9 + } + }, + "left": { + "type": "Identifier", + "start": 53, + "end": 58, + "loc": { + "start": { + "line": 8, + "column": 0 + }, + "end": { + "line": 8, + "column": 5 + }, + "identifierName": "await" + }, + "name": "await" + }, + "operator": "/", + "right": { + "type": "NumericLiteral", + "start": 61, + "end": 62, + "loc": { + "start": { + "line": 8, + "column": 8 + }, + "end": { + "line": 8, + "column": 9 + } + }, + "extra": { + "rawValue": 0, + "raw": "0" + }, + "value": 0 + } + }, + "operator": "/", + "right": { + "type": "Identifier", + "start": 64, + "end": 65, + "loc": { + "start": { + "line": 8, + "column": 11 + }, + "end": { + "line": 8, + "column": 12 + }, + "identifierName": "u" + }, + "name": "u" + } + } + } + ], + "directives": [] + } +} \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-ambiguous-v8intrinsinc/input.js b/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-ambiguous-v8intrinsinc/input.js new file mode 100644 index 000000000000..735a0162b362 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-ambiguous-v8intrinsinc/input.js @@ -0,0 +1 @@ +await %x(0) \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-ambiguous-v8intrinsinc/options.json b/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-ambiguous-v8intrinsinc/options.json new file mode 100644 index 000000000000..6732f5f2f093 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-ambiguous-v8intrinsinc/options.json @@ -0,0 +1,4 @@ +{ + "plugins": ["topLevelAwait", "v8intrinsic"], + "sourceType": "unambiguous" +} diff --git a/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-ambiguous-v8intrinsinc/output.json b/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-ambiguous-v8intrinsinc/output.json new file mode 100644 index 000000000000..5805e3195560 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-ambiguous-v8intrinsinc/output.json @@ -0,0 +1,137 @@ +{ + "type": "File", + "start": 0, + "end": 11, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 11 + } + }, + "program": { + "type": "Program", + "start": 0, + "end": 11, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 11 + } + }, + "sourceType": "script", + "interpreter": null, + "body": [ + { + "type": "ExpressionStatement", + "start": 0, + "end": 11, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 11 + } + }, + "expression": { + "type": "BinaryExpression", + "start": 0, + "end": 11, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 11 + } + }, + "left": { + "type": "Identifier", + "start": 0, + "end": 5, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 5 + }, + "identifierName": "await" + }, + "name": "await" + }, + "operator": "%", + "right": { + "type": "CallExpression", + "start": 7, + "end": 11, + "loc": { + "start": { + "line": 1, + "column": 7 + }, + "end": { + "line": 1, + "column": 11 + } + }, + "callee": { + "type": "Identifier", + "start": 7, + "end": 8, + "loc": { + "start": { + "line": 1, + "column": 7 + }, + "end": { + "line": 1, + "column": 8 + }, + "identifierName": "x" + }, + "name": "x" + }, + "arguments": [ + { + "type": "NumericLiteral", + "start": 9, + "end": 10, + "loc": { + "start": { + "line": 1, + "column": 9 + }, + "end": { + "line": 1, + "column": 10 + } + }, + "extra": { + "rawValue": 0, + "raw": "0" + }, + "value": 0 + } + ] + } + } + } + ], + "directives": [] + } +} \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-module/input.js b/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-module/input.js new file mode 100644 index 000000000000..1fa05e429c67 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-module/input.js @@ -0,0 +1,7 @@ +await 0 + +await + 0 +await - 0 +await ( 0 ) +await [ 0 ] +await / 0 /u diff --git a/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-module/options.json b/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-module/options.json new file mode 100644 index 000000000000..2503b82adf74 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-module/options.json @@ -0,0 +1,4 @@ +{ + "plugins": ["topLevelAwait"], + "sourceType": "unambiguous" +} diff --git a/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-module/output.json b/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-module/output.json new file mode 100644 index 000000000000..18617474f20a --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/top-level-await/unambiguous-module/output.json @@ -0,0 +1,388 @@ +{ + "type": "File", + "start": 0, + "end": 65, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 7, + "column": 12 + } + }, + "program": { + "type": "Program", + "start": 0, + "end": 65, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 7, + "column": 12 + } + }, + "sourceType": "module", + "interpreter": null, + "body": [ + { + "type": "ExpressionStatement", + "start": 0, + "end": 7, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "expression": { + "type": "AwaitExpression", + "start": 0, + "end": 7, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "argument": { + "type": "NumericLiteral", + "start": 6, + "end": 7, + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "extra": { + "rawValue": 0, + "raw": "0" + }, + "value": 0 + } + } + }, + { + "type": "ExpressionStatement", + "start": 9, + "end": 18, + "loc": { + "start": { + "line": 3, + "column": 0 + }, + "end": { + "line": 3, + "column": 9 + } + }, + "expression": { + "type": "AwaitExpression", + "start": 9, + "end": 18, + "loc": { + "start": { + "line": 3, + "column": 0 + }, + "end": { + "line": 3, + "column": 9 + } + }, + "argument": { + "type": "UnaryExpression", + "start": 15, + "end": 18, + "loc": { + "start": { + "line": 3, + "column": 6 + }, + "end": { + "line": 3, + "column": 9 + } + }, + "operator": "+", + "prefix": true, + "argument": { + "type": "NumericLiteral", + "start": 17, + "end": 18, + "loc": { + "start": { + "line": 3, + "column": 8 + }, + "end": { + "line": 3, + "column": 9 + } + }, + "extra": { + "rawValue": 0, + "raw": "0" + }, + "value": 0 + } + } + } + }, + { + "type": "ExpressionStatement", + "start": 19, + "end": 28, + "loc": { + "start": { + "line": 4, + "column": 0 + }, + "end": { + "line": 4, + "column": 9 + } + }, + "expression": { + "type": "AwaitExpression", + "start": 19, + "end": 28, + "loc": { + "start": { + "line": 4, + "column": 0 + }, + "end": { + "line": 4, + "column": 9 + } + }, + "argument": { + "type": "UnaryExpression", + "start": 25, + "end": 28, + "loc": { + "start": { + "line": 4, + "column": 6 + }, + "end": { + "line": 4, + "column": 9 + } + }, + "operator": "-", + "prefix": true, + "argument": { + "type": "NumericLiteral", + "start": 27, + "end": 28, + "loc": { + "start": { + "line": 4, + "column": 8 + }, + "end": { + "line": 4, + "column": 9 + } + }, + "extra": { + "rawValue": 0, + "raw": "0" + }, + "value": 0 + } + } + } + }, + { + "type": "ExpressionStatement", + "start": 29, + "end": 40, + "loc": { + "start": { + "line": 5, + "column": 0 + }, + "end": { + "line": 5, + "column": 11 + } + }, + "expression": { + "type": "AwaitExpression", + "start": 29, + "end": 40, + "loc": { + "start": { + "line": 5, + "column": 0 + }, + "end": { + "line": 5, + "column": 11 + } + }, + "argument": { + "type": "NumericLiteral", + "start": 37, + "end": 38, + "loc": { + "start": { + "line": 5, + "column": 8 + }, + "end": { + "line": 5, + "column": 9 + } + }, + "extra": { + "rawValue": 0, + "raw": "0", + "parenthesized": true, + "parenStart": 35 + }, + "value": 0 + } + } + }, + { + "type": "ExpressionStatement", + "start": 41, + "end": 52, + "loc": { + "start": { + "line": 6, + "column": 0 + }, + "end": { + "line": 6, + "column": 11 + } + }, + "expression": { + "type": "AwaitExpression", + "start": 41, + "end": 52, + "loc": { + "start": { + "line": 6, + "column": 0 + }, + "end": { + "line": 6, + "column": 11 + } + }, + "argument": { + "type": "ArrayExpression", + "start": 47, + "end": 52, + "loc": { + "start": { + "line": 6, + "column": 6 + }, + "end": { + "line": 6, + "column": 11 + } + }, + "elements": [ + { + "type": "NumericLiteral", + "start": 49, + "end": 50, + "loc": { + "start": { + "line": 6, + "column": 8 + }, + "end": { + "line": 6, + "column": 9 + } + }, + "extra": { + "rawValue": 0, + "raw": "0" + }, + "value": 0 + } + ] + } + } + }, + { + "type": "ExpressionStatement", + "start": 53, + "end": 65, + "loc": { + "start": { + "line": 7, + "column": 0 + }, + "end": { + "line": 7, + "column": 12 + } + }, + "expression": { + "type": "AwaitExpression", + "start": 53, + "end": 65, + "loc": { + "start": { + "line": 7, + "column": 0 + }, + "end": { + "line": 7, + "column": 12 + } + }, + "argument": { + "type": "RegExpLiteral", + "start": 59, + "end": 65, + "loc": { + "start": { + "line": 7, + "column": 6 + }, + "end": { + "line": 7, + "column": 12 + } + }, + "extra": { + "raw": "/ 0 /u" + }, + "pattern": " 0 ", + "flags": "u" + } + } + } + ], + "directives": [] + } +} \ No newline at end of file diff --git a/packages/babel-parser/typings/babel-parser.d.ts b/packages/babel-parser/typings/babel-parser.d.ts index 575843e6d24b..40161080996b 100644 --- a/packages/babel-parser/typings/babel-parser.d.ts +++ b/packages/babel-parser/typings/babel-parser.d.ts @@ -123,6 +123,7 @@ export type ParserPlugin = 'pipelineOperator' | 'placeholders' | 'throwExpressions' | + 'topLevelAwait' | 'typescript' | 'v8intrinsic' | ParserPluginWithOptions; diff --git a/scripts/tests/test262/run_babel_parser_test262_utils.js b/scripts/tests/test262/run_babel_parser_test262_utils.js index 1434eedfd629..2c35d0ed5933 100644 --- a/scripts/tests/test262/run_babel_parser_test262_utils.js +++ b/scripts/tests/test262/run_babel_parser_test262_utils.js @@ -123,6 +123,7 @@ const featuresToPlugins = { "import.meta": "importMeta", "numeric-separator-literal": "numericSeparator", "optional-chaining": "optionalChaining", + "top-level-await": "topLevelAwait", }; function getPlugins(features) { diff --git a/scripts/tests/test262/test262_whitelist.txt b/scripts/tests/test262/test262_whitelist.txt index 8ed606443333..1e21dcd228dc 100644 --- a/scripts/tests/test262/test262_whitelist.txt +++ b/scripts/tests/test262/test262_whitelist.txt @@ -98,458 +98,6 @@ language/module-code/privatename-not-valid-earlyerr-module-3.js(default) language/module-code/privatename-not-valid-earlyerr-module-3.js(strict mode) language/module-code/privatename-not-valid-earlyerr-module-4.js(default) language/module-code/privatename-not-valid-earlyerr-module-4.js(strict mode) -language/module-code/top-level-await/await-awaits-thenable-not-callable.js(default) -language/module-code/top-level-await/await-awaits-thenable-not-callable.js(strict mode) -language/module-code/top-level-await/await-awaits-thenables-that-throw.js(default) -language/module-code/top-level-await/await-awaits-thenables-that-throw.js(strict mode) -language/module-code/top-level-await/await-awaits-thenables.js(default) -language/module-code/top-level-await/await-awaits-thenables.js(strict mode) -language/module-code/top-level-await/await-dynamic-import-rejection.js(default) -language/module-code/top-level-await/await-dynamic-import-rejection.js(strict mode) -language/module-code/top-level-await/await-dynamic-import-resolution.js(default) -language/module-code/top-level-await/await-dynamic-import-resolution.js(strict mode) -language/module-code/top-level-await/await-expr-func-expression.js(default) -language/module-code/top-level-await/await-expr-func-expression.js(strict mode) -language/module-code/top-level-await/await-expr-new-expr-reject.js(default) -language/module-code/top-level-await/await-expr-new-expr-reject.js(strict mode) -language/module-code/top-level-await/await-expr-new-expr.js(default) -language/module-code/top-level-await/await-expr-new-expr.js(strict mode) -language/module-code/top-level-await/await-expr-regexp.js(default) -language/module-code/top-level-await/await-expr-regexp.js(strict mode) -language/module-code/top-level-await/await-expr-reject-throws.js(default) -language/module-code/top-level-await/await-expr-reject-throws.js(strict mode) -language/module-code/top-level-await/await-expr-resolution.js(default) -language/module-code/top-level-await/await-expr-resolution.js(strict mode) -language/module-code/top-level-await/await-void-expr.js(default) -language/module-code/top-level-await/await-void-expr.js(strict mode) -language/module-code/top-level-await/if-await-expr.js(default) -language/module-code/top-level-await/if-await-expr.js(strict mode) -language/module-code/top-level-await/module-async-import-async-resolution-ticks.js(default) -language/module-code/top-level-await/module-async-import-async-resolution-ticks.js(strict mode) -language/module-code/top-level-await/module-import-unwrapped.js(default) -language/module-code/top-level-await/module-import-unwrapped.js(strict mode) -language/module-code/top-level-await/module-self-import-async-resolution-ticks.js(default) -language/module-code/top-level-await/module-self-import-async-resolution-ticks.js(strict mode) -language/module-code/top-level-await/syntax/await-expr-dyn-import.js(default) -language/module-code/top-level-await/syntax/await-expr-dyn-import.js(strict mode) -language/module-code/top-level-await/syntax/block-await-expr-array-literal.js(default) -language/module-code/top-level-await/syntax/block-await-expr-array-literal.js(strict mode) -language/module-code/top-level-await/syntax/block-await-expr-func-expression.js(default) -language/module-code/top-level-await/syntax/block-await-expr-func-expression.js(strict mode) -language/module-code/top-level-await/syntax/block-await-expr-identifier.js(default) -language/module-code/top-level-await/syntax/block-await-expr-identifier.js(strict mode) -language/module-code/top-level-await/syntax/block-await-expr-literal-number.js(default) -language/module-code/top-level-await/syntax/block-await-expr-literal-number.js(strict mode) -language/module-code/top-level-await/syntax/block-await-expr-literal-string.js(default) -language/module-code/top-level-await/syntax/block-await-expr-literal-string.js(strict mode) -language/module-code/top-level-await/syntax/block-await-expr-nested.js(default) -language/module-code/top-level-await/syntax/block-await-expr-nested.js(strict mode) -language/module-code/top-level-await/syntax/block-await-expr-new-expr.js(default) -language/module-code/top-level-await/syntax/block-await-expr-new-expr.js(strict mode) -language/module-code/top-level-await/syntax/block-await-expr-null.js(default) -language/module-code/top-level-await/syntax/block-await-expr-null.js(strict mode) -language/module-code/top-level-await/syntax/block-await-expr-obj-literal.js(default) -language/module-code/top-level-await/syntax/block-await-expr-obj-literal.js(strict mode) -language/module-code/top-level-await/syntax/block-await-expr-regexp.js(default) -language/module-code/top-level-await/syntax/block-await-expr-regexp.js(strict mode) -language/module-code/top-level-await/syntax/block-await-expr-template-literal.js(default) -language/module-code/top-level-await/syntax/block-await-expr-template-literal.js(strict mode) -language/module-code/top-level-await/syntax/block-await-expr-this.js(default) -language/module-code/top-level-await/syntax/block-await-expr-this.js(strict mode) -language/module-code/top-level-await/syntax/catch-parameter.js(default) -language/module-code/top-level-await/syntax/catch-parameter.js(strict mode) -language/module-code/top-level-await/syntax/export-class-decl-await-expr-array-literal.js(default) -language/module-code/top-level-await/syntax/export-class-decl-await-expr-array-literal.js(strict mode) -language/module-code/top-level-await/syntax/export-class-decl-await-expr-func-expression.js(default) -language/module-code/top-level-await/syntax/export-class-decl-await-expr-func-expression.js(strict mode) -language/module-code/top-level-await/syntax/export-class-decl-await-expr-identifier.js(default) -language/module-code/top-level-await/syntax/export-class-decl-await-expr-identifier.js(strict mode) -language/module-code/top-level-await/syntax/export-class-decl-await-expr-literal-number.js(default) -language/module-code/top-level-await/syntax/export-class-decl-await-expr-literal-number.js(strict mode) -language/module-code/top-level-await/syntax/export-class-decl-await-expr-literal-string.js(default) -language/module-code/top-level-await/syntax/export-class-decl-await-expr-literal-string.js(strict mode) -language/module-code/top-level-await/syntax/export-class-decl-await-expr-nested.js(default) -language/module-code/top-level-await/syntax/export-class-decl-await-expr-nested.js(strict mode) -language/module-code/top-level-await/syntax/export-class-decl-await-expr-new-expr.js(default) -language/module-code/top-level-await/syntax/export-class-decl-await-expr-new-expr.js(strict mode) -language/module-code/top-level-await/syntax/export-class-decl-await-expr-null.js(default) -language/module-code/top-level-await/syntax/export-class-decl-await-expr-null.js(strict mode) -language/module-code/top-level-await/syntax/export-class-decl-await-expr-obj-literal.js(default) -language/module-code/top-level-await/syntax/export-class-decl-await-expr-obj-literal.js(strict mode) -language/module-code/top-level-await/syntax/export-class-decl-await-expr-regexp.js(default) -language/module-code/top-level-await/syntax/export-class-decl-await-expr-regexp.js(strict mode) -language/module-code/top-level-await/syntax/export-class-decl-await-expr-template-literal.js(default) -language/module-code/top-level-await/syntax/export-class-decl-await-expr-template-literal.js(strict mode) -language/module-code/top-level-await/syntax/export-class-decl-await-expr-this.js(default) -language/module-code/top-level-await/syntax/export-class-decl-await-expr-this.js(strict mode) -language/module-code/top-level-await/syntax/export-dflt-assign-expr-await-expr-array-literal.js(default) -language/module-code/top-level-await/syntax/export-dflt-assign-expr-await-expr-array-literal.js(strict mode) -language/module-code/top-level-await/syntax/export-dflt-assign-expr-await-expr-func-expression.js(default) -language/module-code/top-level-await/syntax/export-dflt-assign-expr-await-expr-func-expression.js(strict mode) -language/module-code/top-level-await/syntax/export-dflt-assign-expr-await-expr-identifier.js(default) -language/module-code/top-level-await/syntax/export-dflt-assign-expr-await-expr-identifier.js(strict mode) -language/module-code/top-level-await/syntax/export-dflt-assign-expr-await-expr-literal-number.js(default) -language/module-code/top-level-await/syntax/export-dflt-assign-expr-await-expr-literal-number.js(strict mode) -language/module-code/top-level-await/syntax/export-dflt-assign-expr-await-expr-literal-string.js(default) -language/module-code/top-level-await/syntax/export-dflt-assign-expr-await-expr-literal-string.js(strict mode) -language/module-code/top-level-await/syntax/export-dflt-assign-expr-await-expr-nested.js(default) -language/module-code/top-level-await/syntax/export-dflt-assign-expr-await-expr-nested.js(strict mode) -language/module-code/top-level-await/syntax/export-dflt-assign-expr-await-expr-new-expr.js(default) -language/module-code/top-level-await/syntax/export-dflt-assign-expr-await-expr-new-expr.js(strict mode) -language/module-code/top-level-await/syntax/export-dflt-assign-expr-await-expr-null.js(default) -language/module-code/top-level-await/syntax/export-dflt-assign-expr-await-expr-null.js(strict mode) -language/module-code/top-level-await/syntax/export-dflt-assign-expr-await-expr-obj-literal.js(default) -language/module-code/top-level-await/syntax/export-dflt-assign-expr-await-expr-obj-literal.js(strict mode) -language/module-code/top-level-await/syntax/export-dflt-assign-expr-await-expr-regexp.js(default) -language/module-code/top-level-await/syntax/export-dflt-assign-expr-await-expr-regexp.js(strict mode) -language/module-code/top-level-await/syntax/export-dflt-assign-expr-await-expr-template-literal.js(default) -language/module-code/top-level-await/syntax/export-dflt-assign-expr-await-expr-template-literal.js(strict mode) -language/module-code/top-level-await/syntax/export-dflt-assign-expr-await-expr-this.js(default) -language/module-code/top-level-await/syntax/export-dflt-assign-expr-await-expr-this.js(strict mode) -language/module-code/top-level-await/syntax/export-dft-class-decl-await-expr-array-literal.js(default) -language/module-code/top-level-await/syntax/export-dft-class-decl-await-expr-array-literal.js(strict mode) -language/module-code/top-level-await/syntax/export-dft-class-decl-await-expr-func-expression.js(default) -language/module-code/top-level-await/syntax/export-dft-class-decl-await-expr-func-expression.js(strict mode) -language/module-code/top-level-await/syntax/export-dft-class-decl-await-expr-identifier.js(default) -language/module-code/top-level-await/syntax/export-dft-class-decl-await-expr-identifier.js(strict mode) -language/module-code/top-level-await/syntax/export-dft-class-decl-await-expr-literal-number.js(default) -language/module-code/top-level-await/syntax/export-dft-class-decl-await-expr-literal-number.js(strict mode) -language/module-code/top-level-await/syntax/export-dft-class-decl-await-expr-literal-string.js(default) -language/module-code/top-level-await/syntax/export-dft-class-decl-await-expr-literal-string.js(strict mode) -language/module-code/top-level-await/syntax/export-dft-class-decl-await-expr-nested.js(default) -language/module-code/top-level-await/syntax/export-dft-class-decl-await-expr-nested.js(strict mode) -language/module-code/top-level-await/syntax/export-dft-class-decl-await-expr-new-expr.js(default) -language/module-code/top-level-await/syntax/export-dft-class-decl-await-expr-new-expr.js(strict mode) -language/module-code/top-level-await/syntax/export-dft-class-decl-await-expr-null.js(default) -language/module-code/top-level-await/syntax/export-dft-class-decl-await-expr-null.js(strict mode) -language/module-code/top-level-await/syntax/export-dft-class-decl-await-expr-obj-literal.js(default) -language/module-code/top-level-await/syntax/export-dft-class-decl-await-expr-obj-literal.js(strict mode) -language/module-code/top-level-await/syntax/export-dft-class-decl-await-expr-regexp.js(default) -language/module-code/top-level-await/syntax/export-dft-class-decl-await-expr-regexp.js(strict mode) -language/module-code/top-level-await/syntax/export-dft-class-decl-await-expr-template-literal.js(default) -language/module-code/top-level-await/syntax/export-dft-class-decl-await-expr-template-literal.js(strict mode) -language/module-code/top-level-await/syntax/export-dft-class-decl-await-expr-this.js(default) -language/module-code/top-level-await/syntax/export-dft-class-decl-await-expr-this.js(strict mode) -language/module-code/top-level-await/syntax/export-lex-decl-await-expr-array-literal.js(default) -language/module-code/top-level-await/syntax/export-lex-decl-await-expr-array-literal.js(strict mode) -language/module-code/top-level-await/syntax/export-lex-decl-await-expr-func-expression.js(default) -language/module-code/top-level-await/syntax/export-lex-decl-await-expr-func-expression.js(strict mode) -language/module-code/top-level-await/syntax/export-lex-decl-await-expr-identifier.js(default) -language/module-code/top-level-await/syntax/export-lex-decl-await-expr-identifier.js(strict mode) -language/module-code/top-level-await/syntax/export-lex-decl-await-expr-literal-number.js(default) -language/module-code/top-level-await/syntax/export-lex-decl-await-expr-literal-number.js(strict mode) -language/module-code/top-level-await/syntax/export-lex-decl-await-expr-literal-string.js(default) -language/module-code/top-level-await/syntax/export-lex-decl-await-expr-literal-string.js(strict mode) -language/module-code/top-level-await/syntax/export-lex-decl-await-expr-nested.js(default) -language/module-code/top-level-await/syntax/export-lex-decl-await-expr-nested.js(strict mode) -language/module-code/top-level-await/syntax/export-lex-decl-await-expr-new-expr.js(default) -language/module-code/top-level-await/syntax/export-lex-decl-await-expr-new-expr.js(strict mode) -language/module-code/top-level-await/syntax/export-lex-decl-await-expr-null.js(default) -language/module-code/top-level-await/syntax/export-lex-decl-await-expr-null.js(strict mode) -language/module-code/top-level-await/syntax/export-lex-decl-await-expr-obj-literal.js(default) -language/module-code/top-level-await/syntax/export-lex-decl-await-expr-obj-literal.js(strict mode) -language/module-code/top-level-await/syntax/export-lex-decl-await-expr-regexp.js(default) -language/module-code/top-level-await/syntax/export-lex-decl-await-expr-regexp.js(strict mode) -language/module-code/top-level-await/syntax/export-lex-decl-await-expr-template-literal.js(default) -language/module-code/top-level-await/syntax/export-lex-decl-await-expr-template-literal.js(strict mode) -language/module-code/top-level-await/syntax/export-lex-decl-await-expr-this.js(default) -language/module-code/top-level-await/syntax/export-lex-decl-await-expr-this.js(strict mode) -language/module-code/top-level-await/syntax/export-var-await-expr-array-literal.js(default) -language/module-code/top-level-await/syntax/export-var-await-expr-array-literal.js(strict mode) -language/module-code/top-level-await/syntax/export-var-await-expr-func-expression.js(default) -language/module-code/top-level-await/syntax/export-var-await-expr-func-expression.js(strict mode) -language/module-code/top-level-await/syntax/export-var-await-expr-identifier.js(default) -language/module-code/top-level-await/syntax/export-var-await-expr-identifier.js(strict mode) -language/module-code/top-level-await/syntax/export-var-await-expr-literal-number.js(default) -language/module-code/top-level-await/syntax/export-var-await-expr-literal-number.js(strict mode) -language/module-code/top-level-await/syntax/export-var-await-expr-literal-string.js(default) -language/module-code/top-level-await/syntax/export-var-await-expr-literal-string.js(strict mode) -language/module-code/top-level-await/syntax/export-var-await-expr-nested.js(default) -language/module-code/top-level-await/syntax/export-var-await-expr-nested.js(strict mode) -language/module-code/top-level-await/syntax/export-var-await-expr-new-expr.js(default) -language/module-code/top-level-await/syntax/export-var-await-expr-new-expr.js(strict mode) -language/module-code/top-level-await/syntax/export-var-await-expr-null.js(default) -language/module-code/top-level-await/syntax/export-var-await-expr-null.js(strict mode) -language/module-code/top-level-await/syntax/export-var-await-expr-obj-literal.js(default) -language/module-code/top-level-await/syntax/export-var-await-expr-obj-literal.js(strict mode) -language/module-code/top-level-await/syntax/export-var-await-expr-regexp.js(default) -language/module-code/top-level-await/syntax/export-var-await-expr-regexp.js(strict mode) -language/module-code/top-level-await/syntax/export-var-await-expr-template-literal.js(default) -language/module-code/top-level-await/syntax/export-var-await-expr-template-literal.js(strict mode) -language/module-code/top-level-await/syntax/export-var-await-expr-this.js(default) -language/module-code/top-level-await/syntax/export-var-await-expr-this.js(strict mode) -language/module-code/top-level-await/syntax/for-await-await-expr-array-literal.js(default) -language/module-code/top-level-await/syntax/for-await-await-expr-array-literal.js(strict mode) -language/module-code/top-level-await/syntax/for-await-await-expr-func-expression.js(default) -language/module-code/top-level-await/syntax/for-await-await-expr-func-expression.js(strict mode) -language/module-code/top-level-await/syntax/for-await-await-expr-identifier.js(default) -language/module-code/top-level-await/syntax/for-await-await-expr-identifier.js(strict mode) -language/module-code/top-level-await/syntax/for-await-await-expr-literal-number.js(default) -language/module-code/top-level-await/syntax/for-await-await-expr-literal-number.js(strict mode) -language/module-code/top-level-await/syntax/for-await-await-expr-literal-string.js(default) -language/module-code/top-level-await/syntax/for-await-await-expr-literal-string.js(strict mode) -language/module-code/top-level-await/syntax/for-await-await-expr-nested.js(default) -language/module-code/top-level-await/syntax/for-await-await-expr-nested.js(strict mode) -language/module-code/top-level-await/syntax/for-await-await-expr-new-expr.js(default) -language/module-code/top-level-await/syntax/for-await-await-expr-new-expr.js(strict mode) -language/module-code/top-level-await/syntax/for-await-await-expr-null.js(default) -language/module-code/top-level-await/syntax/for-await-await-expr-null.js(strict mode) -language/module-code/top-level-await/syntax/for-await-await-expr-obj-literal.js(default) -language/module-code/top-level-await/syntax/for-await-await-expr-obj-literal.js(strict mode) -language/module-code/top-level-await/syntax/for-await-await-expr-regexp.js(default) -language/module-code/top-level-await/syntax/for-await-await-expr-regexp.js(strict mode) -language/module-code/top-level-await/syntax/for-await-await-expr-template-literal.js(default) -language/module-code/top-level-await/syntax/for-await-await-expr-template-literal.js(strict mode) -language/module-code/top-level-await/syntax/for-await-await-expr-this.js(default) -language/module-code/top-level-await/syntax/for-await-await-expr-this.js(strict mode) -language/module-code/top-level-await/syntax/for-await-expr-array-literal.js(default) -language/module-code/top-level-await/syntax/for-await-expr-array-literal.js(strict mode) -language/module-code/top-level-await/syntax/for-await-expr-func-expression.js(default) -language/module-code/top-level-await/syntax/for-await-expr-func-expression.js(strict mode) -language/module-code/top-level-await/syntax/for-await-expr-identifier.js(default) -language/module-code/top-level-await/syntax/for-await-expr-identifier.js(strict mode) -language/module-code/top-level-await/syntax/for-await-expr-literal-number.js(default) -language/module-code/top-level-await/syntax/for-await-expr-literal-number.js(strict mode) -language/module-code/top-level-await/syntax/for-await-expr-literal-string.js(default) -language/module-code/top-level-await/syntax/for-await-expr-literal-string.js(strict mode) -language/module-code/top-level-await/syntax/for-await-expr-nested.js(default) -language/module-code/top-level-await/syntax/for-await-expr-nested.js(strict mode) -language/module-code/top-level-await/syntax/for-await-expr-new-expr.js(default) -language/module-code/top-level-await/syntax/for-await-expr-new-expr.js(strict mode) -language/module-code/top-level-await/syntax/for-await-expr-null.js(default) -language/module-code/top-level-await/syntax/for-await-expr-null.js(strict mode) -language/module-code/top-level-await/syntax/for-await-expr-obj-literal.js(default) -language/module-code/top-level-await/syntax/for-await-expr-obj-literal.js(strict mode) -language/module-code/top-level-await/syntax/for-await-expr-regexp.js(default) -language/module-code/top-level-await/syntax/for-await-expr-regexp.js(strict mode) -language/module-code/top-level-await/syntax/for-await-expr-template-literal.js(default) -language/module-code/top-level-await/syntax/for-await-expr-template-literal.js(strict mode) -language/module-code/top-level-await/syntax/for-await-expr-this.js(default) -language/module-code/top-level-await/syntax/for-await-expr-this.js(strict mode) -language/module-code/top-level-await/syntax/for-in-await-expr-array-literal.js(default) -language/module-code/top-level-await/syntax/for-in-await-expr-array-literal.js(strict mode) -language/module-code/top-level-await/syntax/for-in-await-expr-func-expression.js(default) -language/module-code/top-level-await/syntax/for-in-await-expr-func-expression.js(strict mode) -language/module-code/top-level-await/syntax/for-in-await-expr-identifier.js(default) -language/module-code/top-level-await/syntax/for-in-await-expr-identifier.js(strict mode) -language/module-code/top-level-await/syntax/for-in-await-expr-literal-number.js(default) -language/module-code/top-level-await/syntax/for-in-await-expr-literal-number.js(strict mode) -language/module-code/top-level-await/syntax/for-in-await-expr-literal-string.js(default) -language/module-code/top-level-await/syntax/for-in-await-expr-literal-string.js(strict mode) -language/module-code/top-level-await/syntax/for-in-await-expr-nested.js(default) -language/module-code/top-level-await/syntax/for-in-await-expr-nested.js(strict mode) -language/module-code/top-level-await/syntax/for-in-await-expr-new-expr.js(default) -language/module-code/top-level-await/syntax/for-in-await-expr-new-expr.js(strict mode) -language/module-code/top-level-await/syntax/for-in-await-expr-null.js(default) -language/module-code/top-level-await/syntax/for-in-await-expr-null.js(strict mode) -language/module-code/top-level-await/syntax/for-in-await-expr-obj-literal.js(default) -language/module-code/top-level-await/syntax/for-in-await-expr-obj-literal.js(strict mode) -language/module-code/top-level-await/syntax/for-in-await-expr-regexp.js(default) -language/module-code/top-level-await/syntax/for-in-await-expr-regexp.js(strict mode) -language/module-code/top-level-await/syntax/for-in-await-expr-template-literal.js(default) -language/module-code/top-level-await/syntax/for-in-await-expr-template-literal.js(strict mode) -language/module-code/top-level-await/syntax/for-in-await-expr-this.js(default) -language/module-code/top-level-await/syntax/for-in-await-expr-this.js(strict mode) -language/module-code/top-level-await/syntax/for-of-await-expr-array-literal.js(default) -language/module-code/top-level-await/syntax/for-of-await-expr-array-literal.js(strict mode) -language/module-code/top-level-await/syntax/for-of-await-expr-func-expression.js(default) -language/module-code/top-level-await/syntax/for-of-await-expr-func-expression.js(strict mode) -language/module-code/top-level-await/syntax/for-of-await-expr-identifier.js(default) -language/module-code/top-level-await/syntax/for-of-await-expr-identifier.js(strict mode) -language/module-code/top-level-await/syntax/for-of-await-expr-literal-number.js(default) -language/module-code/top-level-await/syntax/for-of-await-expr-literal-number.js(strict mode) -language/module-code/top-level-await/syntax/for-of-await-expr-literal-string.js(default) -language/module-code/top-level-await/syntax/for-of-await-expr-literal-string.js(strict mode) -language/module-code/top-level-await/syntax/for-of-await-expr-nested.js(default) -language/module-code/top-level-await/syntax/for-of-await-expr-nested.js(strict mode) -language/module-code/top-level-await/syntax/for-of-await-expr-new-expr.js(default) -language/module-code/top-level-await/syntax/for-of-await-expr-new-expr.js(strict mode) -language/module-code/top-level-await/syntax/for-of-await-expr-null.js(default) -language/module-code/top-level-await/syntax/for-of-await-expr-null.js(strict mode) -language/module-code/top-level-await/syntax/for-of-await-expr-obj-literal.js(default) -language/module-code/top-level-await/syntax/for-of-await-expr-obj-literal.js(strict mode) -language/module-code/top-level-await/syntax/for-of-await-expr-regexp.js(default) -language/module-code/top-level-await/syntax/for-of-await-expr-regexp.js(strict mode) -language/module-code/top-level-await/syntax/for-of-await-expr-template-literal.js(default) -language/module-code/top-level-await/syntax/for-of-await-expr-template-literal.js(strict mode) -language/module-code/top-level-await/syntax/for-of-await-expr-this.js(default) -language/module-code/top-level-await/syntax/for-of-await-expr-this.js(strict mode) -language/module-code/top-level-await/syntax/if-block-await-expr-array-literal.js(default) -language/module-code/top-level-await/syntax/if-block-await-expr-array-literal.js(strict mode) -language/module-code/top-level-await/syntax/if-block-await-expr-func-expression.js(default) -language/module-code/top-level-await/syntax/if-block-await-expr-func-expression.js(strict mode) -language/module-code/top-level-await/syntax/if-block-await-expr-identifier.js(default) -language/module-code/top-level-await/syntax/if-block-await-expr-identifier.js(strict mode) -language/module-code/top-level-await/syntax/if-block-await-expr-literal-number.js(default) -language/module-code/top-level-await/syntax/if-block-await-expr-literal-number.js(strict mode) -language/module-code/top-level-await/syntax/if-block-await-expr-literal-string.js(default) -language/module-code/top-level-await/syntax/if-block-await-expr-literal-string.js(strict mode) -language/module-code/top-level-await/syntax/if-block-await-expr-nested.js(default) -language/module-code/top-level-await/syntax/if-block-await-expr-nested.js(strict mode) -language/module-code/top-level-await/syntax/if-block-await-expr-new-expr.js(default) -language/module-code/top-level-await/syntax/if-block-await-expr-new-expr.js(strict mode) -language/module-code/top-level-await/syntax/if-block-await-expr-null.js(default) -language/module-code/top-level-await/syntax/if-block-await-expr-null.js(strict mode) -language/module-code/top-level-await/syntax/if-block-await-expr-obj-literal.js(default) -language/module-code/top-level-await/syntax/if-block-await-expr-obj-literal.js(strict mode) -language/module-code/top-level-await/syntax/if-block-await-expr-regexp.js(default) -language/module-code/top-level-await/syntax/if-block-await-expr-regexp.js(strict mode) -language/module-code/top-level-await/syntax/if-block-await-expr-template-literal.js(default) -language/module-code/top-level-await/syntax/if-block-await-expr-template-literal.js(strict mode) -language/module-code/top-level-await/syntax/if-block-await-expr-this.js(default) -language/module-code/top-level-await/syntax/if-block-await-expr-this.js(strict mode) -language/module-code/top-level-await/syntax/if-expr-await-expr-array-literal.js(default) -language/module-code/top-level-await/syntax/if-expr-await-expr-array-literal.js(strict mode) -language/module-code/top-level-await/syntax/if-expr-await-expr-func-expression.js(default) -language/module-code/top-level-await/syntax/if-expr-await-expr-func-expression.js(strict mode) -language/module-code/top-level-await/syntax/if-expr-await-expr-identifier.js(default) -language/module-code/top-level-await/syntax/if-expr-await-expr-identifier.js(strict mode) -language/module-code/top-level-await/syntax/if-expr-await-expr-literal-number.js(default) -language/module-code/top-level-await/syntax/if-expr-await-expr-literal-number.js(strict mode) -language/module-code/top-level-await/syntax/if-expr-await-expr-literal-string.js(default) -language/module-code/top-level-await/syntax/if-expr-await-expr-literal-string.js(strict mode) -language/module-code/top-level-await/syntax/if-expr-await-expr-nested.js(default) -language/module-code/top-level-await/syntax/if-expr-await-expr-nested.js(strict mode) -language/module-code/top-level-await/syntax/if-expr-await-expr-new-expr.js(default) -language/module-code/top-level-await/syntax/if-expr-await-expr-new-expr.js(strict mode) -language/module-code/top-level-await/syntax/if-expr-await-expr-null.js(default) -language/module-code/top-level-await/syntax/if-expr-await-expr-null.js(strict mode) -language/module-code/top-level-await/syntax/if-expr-await-expr-obj-literal.js(default) -language/module-code/top-level-await/syntax/if-expr-await-expr-obj-literal.js(strict mode) -language/module-code/top-level-await/syntax/if-expr-await-expr-regexp.js(default) -language/module-code/top-level-await/syntax/if-expr-await-expr-regexp.js(strict mode) -language/module-code/top-level-await/syntax/if-expr-await-expr-template-literal.js(default) -language/module-code/top-level-await/syntax/if-expr-await-expr-template-literal.js(strict mode) -language/module-code/top-level-await/syntax/if-expr-await-expr-this.js(default) -language/module-code/top-level-await/syntax/if-expr-await-expr-this.js(strict mode) -language/module-code/top-level-await/syntax/top-level-await-expr-array-literal.js(default) -language/module-code/top-level-await/syntax/top-level-await-expr-array-literal.js(strict mode) -language/module-code/top-level-await/syntax/top-level-await-expr-func-expression.js(default) -language/module-code/top-level-await/syntax/top-level-await-expr-func-expression.js(strict mode) -language/module-code/top-level-await/syntax/top-level-await-expr-identifier.js(default) -language/module-code/top-level-await/syntax/top-level-await-expr-identifier.js(strict mode) -language/module-code/top-level-await/syntax/top-level-await-expr-literal-number.js(default) -language/module-code/top-level-await/syntax/top-level-await-expr-literal-number.js(strict mode) -language/module-code/top-level-await/syntax/top-level-await-expr-literal-string.js(default) -language/module-code/top-level-await/syntax/top-level-await-expr-literal-string.js(strict mode) -language/module-code/top-level-await/syntax/top-level-await-expr-nested.js(default) -language/module-code/top-level-await/syntax/top-level-await-expr-nested.js(strict mode) -language/module-code/top-level-await/syntax/top-level-await-expr-new-expr.js(default) -language/module-code/top-level-await/syntax/top-level-await-expr-new-expr.js(strict mode) -language/module-code/top-level-await/syntax/top-level-await-expr-null.js(default) -language/module-code/top-level-await/syntax/top-level-await-expr-null.js(strict mode) -language/module-code/top-level-await/syntax/top-level-await-expr-obj-literal.js(default) -language/module-code/top-level-await/syntax/top-level-await-expr-obj-literal.js(strict mode) -language/module-code/top-level-await/syntax/top-level-await-expr-regexp.js(default) -language/module-code/top-level-await/syntax/top-level-await-expr-regexp.js(strict mode) -language/module-code/top-level-await/syntax/top-level-await-expr-template-literal.js(default) -language/module-code/top-level-await/syntax/top-level-await-expr-template-literal.js(strict mode) -language/module-code/top-level-await/syntax/top-level-await-expr-this.js(default) -language/module-code/top-level-await/syntax/top-level-await-expr-this.js(strict mode) -language/module-code/top-level-await/syntax/try-await-expr-array-literal.js(default) -language/module-code/top-level-await/syntax/try-await-expr-array-literal.js(strict mode) -language/module-code/top-level-await/syntax/try-await-expr-func-expression.js(default) -language/module-code/top-level-await/syntax/try-await-expr-func-expression.js(strict mode) -language/module-code/top-level-await/syntax/try-await-expr-identifier.js(default) -language/module-code/top-level-await/syntax/try-await-expr-identifier.js(strict mode) -language/module-code/top-level-await/syntax/try-await-expr-literal-number.js(default) -language/module-code/top-level-await/syntax/try-await-expr-literal-number.js(strict mode) -language/module-code/top-level-await/syntax/try-await-expr-literal-string.js(default) -language/module-code/top-level-await/syntax/try-await-expr-literal-string.js(strict mode) -language/module-code/top-level-await/syntax/try-await-expr-nested.js(default) -language/module-code/top-level-await/syntax/try-await-expr-nested.js(strict mode) -language/module-code/top-level-await/syntax/try-await-expr-new-expr.js(default) -language/module-code/top-level-await/syntax/try-await-expr-new-expr.js(strict mode) -language/module-code/top-level-await/syntax/try-await-expr-null.js(default) -language/module-code/top-level-await/syntax/try-await-expr-null.js(strict mode) -language/module-code/top-level-await/syntax/try-await-expr-obj-literal.js(default) -language/module-code/top-level-await/syntax/try-await-expr-obj-literal.js(strict mode) -language/module-code/top-level-await/syntax/try-await-expr-regexp.js(default) -language/module-code/top-level-await/syntax/try-await-expr-regexp.js(strict mode) -language/module-code/top-level-await/syntax/try-await-expr-template-literal.js(default) -language/module-code/top-level-await/syntax/try-await-expr-template-literal.js(strict mode) -language/module-code/top-level-await/syntax/try-await-expr-this.js(default) -language/module-code/top-level-await/syntax/try-await-expr-this.js(strict mode) -language/module-code/top-level-await/syntax/typeof-await-expr-array-literal.js(default) -language/module-code/top-level-await/syntax/typeof-await-expr-array-literal.js(strict mode) -language/module-code/top-level-await/syntax/typeof-await-expr-func-expression.js(default) -language/module-code/top-level-await/syntax/typeof-await-expr-func-expression.js(strict mode) -language/module-code/top-level-await/syntax/typeof-await-expr-identifier.js(default) -language/module-code/top-level-await/syntax/typeof-await-expr-identifier.js(strict mode) -language/module-code/top-level-await/syntax/typeof-await-expr-literal-number.js(default) -language/module-code/top-level-await/syntax/typeof-await-expr-literal-number.js(strict mode) -language/module-code/top-level-await/syntax/typeof-await-expr-literal-string.js(default) -language/module-code/top-level-await/syntax/typeof-await-expr-literal-string.js(strict mode) -language/module-code/top-level-await/syntax/typeof-await-expr-nested.js(default) -language/module-code/top-level-await/syntax/typeof-await-expr-nested.js(strict mode) -language/module-code/top-level-await/syntax/typeof-await-expr-new-expr.js(default) -language/module-code/top-level-await/syntax/typeof-await-expr-new-expr.js(strict mode) -language/module-code/top-level-await/syntax/typeof-await-expr-null.js(default) -language/module-code/top-level-await/syntax/typeof-await-expr-null.js(strict mode) -language/module-code/top-level-await/syntax/typeof-await-expr-obj-literal.js(default) -language/module-code/top-level-await/syntax/typeof-await-expr-obj-literal.js(strict mode) -language/module-code/top-level-await/syntax/typeof-await-expr-regexp.js(default) -language/module-code/top-level-await/syntax/typeof-await-expr-regexp.js(strict mode) -language/module-code/top-level-await/syntax/typeof-await-expr-template-literal.js(default) -language/module-code/top-level-await/syntax/typeof-await-expr-template-literal.js(strict mode) -language/module-code/top-level-await/syntax/typeof-await-expr-this.js(default) -language/module-code/top-level-await/syntax/typeof-await-expr-this.js(strict mode) -language/module-code/top-level-await/syntax/void-await-expr-array-literal.js(default) -language/module-code/top-level-await/syntax/void-await-expr-array-literal.js(strict mode) -language/module-code/top-level-await/syntax/void-await-expr-func-expression.js(default) -language/module-code/top-level-await/syntax/void-await-expr-func-expression.js(strict mode) -language/module-code/top-level-await/syntax/void-await-expr-identifier.js(default) -language/module-code/top-level-await/syntax/void-await-expr-identifier.js(strict mode) -language/module-code/top-level-await/syntax/void-await-expr-literal-number.js(default) -language/module-code/top-level-await/syntax/void-await-expr-literal-number.js(strict mode) -language/module-code/top-level-await/syntax/void-await-expr-literal-string.js(default) -language/module-code/top-level-await/syntax/void-await-expr-literal-string.js(strict mode) -language/module-code/top-level-await/syntax/void-await-expr-nested.js(default) -language/module-code/top-level-await/syntax/void-await-expr-nested.js(strict mode) -language/module-code/top-level-await/syntax/void-await-expr-new-expr.js(default) -language/module-code/top-level-await/syntax/void-await-expr-new-expr.js(strict mode) -language/module-code/top-level-await/syntax/void-await-expr-null.js(default) -language/module-code/top-level-await/syntax/void-await-expr-null.js(strict mode) -language/module-code/top-level-await/syntax/void-await-expr-obj-literal.js(default) -language/module-code/top-level-await/syntax/void-await-expr-obj-literal.js(strict mode) -language/module-code/top-level-await/syntax/void-await-expr-regexp.js(default) -language/module-code/top-level-await/syntax/void-await-expr-regexp.js(strict mode) -language/module-code/top-level-await/syntax/void-await-expr-template-literal.js(default) -language/module-code/top-level-await/syntax/void-await-expr-template-literal.js(strict mode) -language/module-code/top-level-await/syntax/void-await-expr-this.js(default) -language/module-code/top-level-await/syntax/void-await-expr-this.js(strict mode) -language/module-code/top-level-await/syntax/while-await-expr-array-literal.js(default) -language/module-code/top-level-await/syntax/while-await-expr-array-literal.js(strict mode) -language/module-code/top-level-await/syntax/while-await-expr-func-expression.js(default) -language/module-code/top-level-await/syntax/while-await-expr-func-expression.js(strict mode) -language/module-code/top-level-await/syntax/while-await-expr-identifier.js(default) -language/module-code/top-level-await/syntax/while-await-expr-identifier.js(strict mode) -language/module-code/top-level-await/syntax/while-await-expr-literal-number.js(default) -language/module-code/top-level-await/syntax/while-await-expr-literal-number.js(strict mode) -language/module-code/top-level-await/syntax/while-await-expr-literal-string.js(default) -language/module-code/top-level-await/syntax/while-await-expr-literal-string.js(strict mode) -language/module-code/top-level-await/syntax/while-await-expr-nested.js(default) -language/module-code/top-level-await/syntax/while-await-expr-nested.js(strict mode) -language/module-code/top-level-await/syntax/while-await-expr-new-expr.js(default) -language/module-code/top-level-await/syntax/while-await-expr-new-expr.js(strict mode) -language/module-code/top-level-await/syntax/while-await-expr-null.js(default) -language/module-code/top-level-await/syntax/while-await-expr-null.js(strict mode) -language/module-code/top-level-await/syntax/while-await-expr-obj-literal.js(default) -language/module-code/top-level-await/syntax/while-await-expr-obj-literal.js(strict mode) -language/module-code/top-level-await/syntax/while-await-expr-regexp.js(default) -language/module-code/top-level-await/syntax/while-await-expr-regexp.js(strict mode) -language/module-code/top-level-await/syntax/while-await-expr-template-literal.js(default) -language/module-code/top-level-await/syntax/while-await-expr-template-literal.js(strict mode) -language/module-code/top-level-await/syntax/while-await-expr-this.js(default) -language/module-code/top-level-await/syntax/while-await-expr-this.js(strict mode) -language/module-code/top-level-await/top-level-ticks-2.js(default) -language/module-code/top-level-await/top-level-ticks-2.js(strict mode) -language/module-code/top-level-await/top-level-ticks.js(default) -language/module-code/top-level-await/top-level-ticks.js(strict mode) -language/module-code/top-level-await/void-await-expr.js(default) -language/module-code/top-level-await/void-await-expr.js(strict mode) -language/module-code/top-level-await/while-dynamic-evaluation.js(default) -language/module-code/top-level-await/while-dynamic-evaluation.js(strict mode) language/statements/class/elements/fields-duplicate-privatenames.js(default) language/statements/class/elements/fields-duplicate-privatenames.js(strict mode) language/statements/class/elements/privatename-not-valid-earlyerr-script-1.js(default)