diff --git a/acorn.js b/acorn.js index 87956399db..e39c3261e1 100644 --- a/acorn.js +++ b/acorn.js @@ -1605,7 +1605,10 @@ labels.pop(); expect(_while); node.test = parseParenExpression(); - semicolon(); + if (options.ecmaVersion >= 6) + eat(_semi); + else + semicolon(); return finishNode(node, "DoWhileStatement"); } diff --git a/test/tests-harmony.js b/test/tests-harmony.js index 50fe007316..9180e29abd 100644 --- a/test/tests-harmony.js +++ b/test/tests-harmony.js @@ -13605,6 +13605,52 @@ test("/[a-z]/u", { ecmaVersion: 6 }); + +test("do {} while (false) foo();", { + type: "Program", + start: 0, + end: 26, + body: [ + { + type: "DoWhileStatement", + start: 0, + end: 19, + body: { + type: "BlockStatement", + start: 3, + end: 5, + body: [] + }, + test: { + type: "Literal", + start: 13, + end: 18, + value: false, + raw: "false" + } + }, + { + type: "ExpressionStatement", + start: 20, + end: 26, + expression: { + type: "CallExpression", + start: 20, + end: 25, + callee: { + type: "Identifier", + start: 20, + end: 23, + name: "foo" + }, + arguments: [] + } + } + ] +}, { + ecmaVersion: 6 +}); + // Harmony Invalid syntax testFail("0o", "Expected number in radix 8 (1:2)", {ecmaVersion: 6});