From 841ab6802f572b1b2567497801249073261df1eb Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Wed, 10 Dec 2014 18:59:24 +1100 Subject: [PATCH] Make semicolon optional in do-while in >=ES6 --- acorn.js | 6 +++++- test/tests-harmony.js | 46 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/acorn.js b/acorn.js index 401b9421c8..126ef8ad8c 100644 --- a/acorn.js +++ b/acorn.js @@ -1603,7 +1603,11 @@ 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 539418f870..d1ca1c4571 100644 --- a/test/tests-harmony.js +++ b/test/tests-harmony.js @@ -13405,6 +13405,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});