From 1affea322480295a944e5328877687073fe5c0c6 Mon Sep 17 00:00:00 2001 From: sosukesuzuki Date: Wed, 23 Dec 2020 23:01:48 +0900 Subject: [PATCH] Support TLA error in script --- .../babel-parser/src/parser/expression.js | 10 ++++-- .../top-level-script/options.json | 3 +- .../top-level-script/output.json | 33 +++++++++++++++++++ 3 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 packages/babel-parser/test/fixtures/experimental/top-level-await/top-level-script/output.json diff --git a/packages/babel-parser/src/parser/expression.js b/packages/babel-parser/src/parser/expression.js index f7d01c4e9e38..38496a423b13 100644 --- a/packages/babel-parser/src/parser/expression.js +++ b/packages/babel-parser/src/parser/expression.js @@ -534,11 +534,15 @@ export default class ExpressionParser extends LValParser { const expr = this.parseUpdate(node, update, refExpressionErrors); + const startsExpr = this.hasPlugin("v8intrinsic") + ? this.state.type.startsExpr + : this.state.type.startsExpr && !this.match(tt.modulo); if ( isAwait && - this.scope.inFunction && - this.state.type.startsExpr && - !this.isAmbiguousAwait() + startsExpr && + !this.isAmbiguousAwait() && + (this.scope.inFunction || + (this.hasPlugin("topLevelAwait") && !this.inModule)) ) { this.raise(startPos, Errors.AwaitNotInAsyncContext); return this.parseAwait(startPos, startLoc); 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 index c9dc6113fea3..fc666b8d2c59 100644 --- 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 @@ -1,5 +1,4 @@ { "plugins": ["topLevelAwait"], - "sourceType": "script", - "throws": "Unexpected token, expected \";\" (1:6)" + "sourceType": "script" } diff --git a/packages/babel-parser/test/fixtures/experimental/top-level-await/top-level-script/output.json b/packages/babel-parser/test/fixtures/experimental/top-level-await/top-level-script/output.json new file mode 100644 index 000000000000..1b4283b27129 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/top-level-await/top-level-script/output.json @@ -0,0 +1,33 @@ +{ + "type": "File", + "start":0,"end":8,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":8}}, + "errors": [ + "SyntaxError: 'await' is only allowed within async functions and at the top levels of modules (1:0)" + ], + "program": { + "type": "Program", + "start":0,"end":8,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":8}}, + "sourceType": "script", + "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