From 53d98f1175d69c8117168bfcb30b9285c414dd8b 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 | 5 ++++- test/tests-harmony.js | 46 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) 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});