From 96bc831306dcd056624224fb64d4e640f28d0e57 Mon Sep 17 00:00:00 2001 From: Ingvar Stepanyan Date: Sun, 7 Dec 2014 19:55:31 +0200 Subject: [PATCH] Fix #173. --- acorn.js | 11 +++-------- test/tests-harmony.js | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 8 deletions(-) diff --git a/acorn.js b/acorn.js index daa502ae16..87956399db 100644 --- a/acorn.js +++ b/acorn.js @@ -803,12 +803,6 @@ return finishToken(_dollarBraceL); } } - - if (code === 125) { // '}' - ++tokPos; - return finishToken(_braceR, undefined, false); - } - // anything else is considered string literal return readTmplString(); } @@ -2153,10 +2147,11 @@ // Parse template expression. function parseTemplate() { + var oldInTemplate = inTemplate; + inTemplate = true; var node = startNode(); node.expressions = []; node.quasis = []; - inTemplate = true; next(); for (;;) { var elem = startNode(); @@ -2176,7 +2171,7 @@ tokPos = tokEnd; expect(_braceR); } - inTemplate = false; + inTemplate = oldInTemplate; next(); return finishNode(node, "TemplateLiteral"); } diff --git a/test/tests-harmony.js b/test/tests-harmony.js index 15e3b98545..50fe007316 100644 --- a/test/tests-harmony.js +++ b/test/tests-harmony.js @@ -14191,3 +14191,44 @@ test("import foo, * as bar from 'baz';", { } }] }, {ecmaVersion: 6}); + +// https://github.com/marijnh/acorn/issues/173 +test("`{${x}}`, `}`", { + type: "Program", + body: [{ + type: "ExpressionStatement", + expression: { + type: "SequenceExpression", + expressions: [ + { + type: "TemplateLiteral", + expressions: [{ + type: "Identifier", + name: "x" + }], + quasis: [ + { + type: "TemplateElement", + value: {cooked: "{", raw: "{"}, + tail: false + }, + { + type: "TemplateElement", + value: {cooked: "}", raw: "}"}, + tail: true + } + ] + }, + { + type: "TemplateLiteral", + expressions: [], + quasis: [{ + type: "TemplateElement", + value: {cooked: "}", raw: "}"}, + tail: true + }] + } + ] + } + }] +}, {ecmaVersion: 6});