diff --git a/packages/babel-parser/src/parser/expression.js b/packages/babel-parser/src/parser/expression.js index daa217fad4c5..b157b1d3482a 100644 --- a/packages/babel-parser/src/parser/expression.js +++ b/packages/babel-parser/src/parser/expression.js @@ -1133,6 +1133,8 @@ export default class ExpressionParser extends LValParser { case tt.backQuote: return this.parseTemplate(false); + // BindExpression[Yield] + // :: MemberExpression[?Yield] case tt.doubleColon: { node = this.startNode(); this.next(); @@ -1165,6 +1167,9 @@ export default class ExpressionParser extends LValParser { return this.finishNode(node, "PipelinePrimaryTopicReference"); } + // https://tc39.es/proposal-private-fields-in-in + // RelationalExpression [In, Yield, Await] + // [+In] PrivateIdentifier in ShiftExpression[?Yield, ?Await] const nextCh = this.input.codePointAt(this.state.end); if (isIdentifierStart(nextCh) || nextCh === charCodes.backslash) { const start = this.state.start; @@ -1322,6 +1327,7 @@ export default class ExpressionParser extends LValParser { node.meta = meta; if (meta.name === "function" && propertyName === "sent") { + // https://github.com/tc39/proposal-function.sent#syntax-1 if (this.isContextual(propertyName)) { this.expectPlugin("functionSent"); } else if (!this.hasPlugin("functionSent")) { @@ -1346,6 +1352,7 @@ export default class ExpressionParser extends LValParser { return this.finishNode(node, "MetaProperty"); } + // https://tc39.es/ecma262/#prod-ImportMeta parseImportMetaProperty(node: N.MetaProperty): N.MetaProperty { const id = this.createIdentifier(this.startNodeAtNode(node), "import"); this.expect(tt.dot); @@ -1381,12 +1388,13 @@ export default class ExpressionParser extends LValParser { return this.finishNode(node, type); } + // https://tc39.es/ecma262/#prod-CoverParenthesizedExpressionAndArrowParameterList parseParenAndDistinguishExpression(canBeArrow: boolean): N.Expression { const startPos = this.state.start; const startLoc = this.state.startLoc; let val; - this.expect(tt.parenL); + this.next(); // eat `(` const oldMaybeInArrowParameters = this.state.maybeInArrowParameters; const oldYieldPos = this.state.yieldPos;