diff --git a/acorn.js b/acorn.js index 7de20be2ad..da572a8ce3 100644 --- a/acorn.js +++ b/acorn.js @@ -1734,6 +1734,9 @@ case _new: return parseNew(); + case _ellipsis: + return parseSpread(); + default: unexpected(); } @@ -1752,6 +1755,15 @@ return finishNode(node, "NewExpression"); } + // Parse spread element '...expr' + + function parseSpread() { + var node = startNode(); + next(); + node.argument = parseExpression(true); + return finishNode(node, "SpreadElement"); + } + // Parse an object literal. function parseObj() { diff --git a/test/tests-harmony.js b/test/tests-harmony.js index cbab6dc117..cc9e13d612 100644 --- a/test/tests-harmony.js +++ b/test/tests-harmony.js @@ -15773,9 +15773,9 @@ testFail("x \n isnt y", "Unexpected token (2:7)", {ecmaVersion: 6}); testFail("function default() {}", "Unexpected token (1:9)", {ecmaVersion: 6}); -testFail("function hello() {'use strict'; ({ i: 10, s(eval) { } }); }", "Unexpected token (1:45)", {ecmaVersion: 6}); +testFail("function hello() {'use strict'; ({ i: 10, s(eval) { } }); }", "Defining 'eval' in strict mode (1:44)", {ecmaVersion: 6}); -testFail("function a() { \"use strict\"; ({ b(t, t) { } }); }", "Unexpected token (1:38)", {ecmaVersion: 6}); +testFail("function a() { \"use strict\"; ({ b(t, t) { } }); }", "Argument name clash in strict mode (1:37)", {ecmaVersion: 6}); testFail("var super", "Unexpected token (1:5)", {ecmaVersion: 6});