diff --git a/acorn.js b/acorn.js index f0740d8154..997a670ab9 100644 --- a/acorn.js +++ b/acorn.js @@ -2027,7 +2027,7 @@ labels.pop(); expect(_while); node.test = parseParenExpression(); - semicolon(); + eat(_semi); return finishNode(node, "DoWhileStatement"); } diff --git a/test/tests.js b/test/tests.js index 72b9340307..f40dcced6c 100644 --- a/test/tests.js +++ b/test/tests.js @@ -17911,6 +17911,49 @@ test("do keep(); while (true);", { } }); +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: [] + } + } + ] +}); + test("do { x++; y--; } while (x < 10)", { type: "Program", body: [