diff --git a/src/acorn/src/expression.js b/src/acorn/src/expression.js index b40024559f..0702837dcb 100755 --- a/src/acorn/src/expression.js +++ b/src/acorn/src/expression.js @@ -245,6 +245,14 @@ pp.parseExprAtom = function(refShorthandDefaultPos) { case tt._yield: if (this.inGenerator) unexpected() + case tt._do: + if (this.options.features["es7.doExpressions"]) { + let node = this.startNode() + this.next() + node.body = this.parseBlock() + return this.finishNode(node, "DoExpression") + } + case tt.name: let start = this.markPosition() node = this.startNode() diff --git a/src/babel/transformation/transformers/es7/do-expressions.js b/src/babel/transformation/transformers/es7/do-expressions.js new file mode 100644 index 0000000000..3ebb275c68 --- /dev/null +++ b/src/babel/transformation/transformers/es7/do-expressions.js @@ -0,0 +1,15 @@ +import * as t from "../../../types"; + +export var metadata = { + experimental: true, + optional: true +}; + +export function DoExpression(node) { + var body = node.body.body; + if (body.length) { + return body; + } else { + return t.identifier("undefined"); + } +} diff --git a/src/babel/transformation/transformers/index.js b/src/babel/transformation/transformers/index.js index 9ae788d1fa..40fd40d29f 100644 --- a/src/babel/transformation/transformers/index.js +++ b/src/babel/transformation/transformers/index.js @@ -90,6 +90,8 @@ export default { _shadowFunctions: require("./internal/alias-functions"), + "es7.doExpressions": require("./es7/do-expressions"), + "es6.symbols": require("./es6/symbols"), "spec.undefinedToVoid": require("./spec/undefined-to-void"), diff --git a/src/babel/types/alias-keys.json b/src/babel/types/alias-keys.json index a8b227ddae..784e2eb78f 100644 --- a/src/babel/types/alias-keys.json +++ b/src/babel/types/alias-keys.json @@ -57,6 +57,7 @@ "CallExpression": ["Expression"], "ComprehensionExpression": ["Expression", "Scopable"], "ConditionalExpression": ["Expression"], + "DoExpression": ["Expression"], "Identifier": ["Expression"], "Literal": ["Expression"], "MemberExpression": ["Expression"], diff --git a/src/babel/types/visitor-keys.json b/src/babel/types/visitor-keys.json index bfe628c1cc..83bd7beeed 100644 --- a/src/babel/types/visitor-keys.json +++ b/src/babel/types/visitor-keys.json @@ -19,6 +19,7 @@ "ContinueStatement": ["label"], "DebuggerStatement": [], "DoWhileStatement": ["body", "test"], + "DoExpression": ["body"], "EmptyStatement": [], "ExportAllDeclaration": ["source"], "ExportDefaultDeclaration": ["declaration"],