diff --git a/packages/babel-parser/src/parser/expression.js b/packages/babel-parser/src/parser/expression.js index 36881c58b2d8..38780b29118e 100644 --- a/packages/babel-parser/src/parser/expression.js +++ b/packages/babel-parser/src/parser/expression.js @@ -1023,14 +1023,7 @@ export default class ExpressionParser extends LValParser { } case tt._do: { - this.expectPlugin("doExpressions"); - const node = this.startNode(); - this.next(); - const oldLabels = this.state.labels; - this.state.labels = []; - node.body = this.parseBlock(); - this.state.labels = oldLabels; - return this.finishNode(node, "DoExpression"); + return this.parseDo(); } case tt.regexp: { @@ -1237,6 +1230,18 @@ export default class ExpressionParser extends LValParser { return node; } + // https://github.com/tc39/proposal-do-expressions + parseDo(): N.DoExpression { + this.expectPlugin("doExpressions"); + const node = this.startNode(); + this.next(); // eat `do` + const oldLabels = this.state.labels; + this.state.labels = []; + node.body = this.parseBlock(); + this.state.labels = oldLabels; + return this.finishNode(node, "DoExpression"); + } + // Parse the `super` keyword parseSuper(): N.Super { const node = this.startNode(); diff --git a/packages/babel-parser/src/types.js b/packages/babel-parser/src/types.js index 17f96dc4934c..8ae00f25d29f 100644 --- a/packages/babel-parser/src/types.js +++ b/packages/babel-parser/src/types.js @@ -389,6 +389,11 @@ export type ArrayExpression = NodeBase & { elements: $ReadOnlyArray, }; +export type DoExpression = NodeBase & { + type: "DoExpression", + body: ?BlockStatement, +}; + export type TupleExpression = NodeBase & { type: "TupleExpression", elements: $ReadOnlyArray,