diff --git a/acorn.js b/acorn.js index 910f9a9f73..b89158e41e 100644 --- a/acorn.js +++ b/acorn.js @@ -472,9 +472,8 @@ parenL: _parenL, parenR: _parenR, comma: _comma, semi: _semi, colon: _colon, dot: _dot, ellipsis: _ellipsis, question: _question, slash: _slash, eq: _eq, name: _name, eof: _eof, num: _num, regexp: _regexp, string: _string, - arrow: _arrow, bquote: _bquote, dollarBraceL: _dollarBraceL, - xjsName: _xjsName, xjsText: _xjsText, - star: _star, assign: _assign}; + arrow: _arrow, bquote: _bquote, dollarBraceL: _dollarBraceL, star: _star, + assign: _assign, xjsName: _xjsName, xjsText: _xjsText}; for (var kw in keywordTypes) exports.tokTypes["_" + kw] = keywordTypes[kw]; // This is a trick taken from Esprima. It turns out that, on @@ -1015,7 +1014,7 @@ var value = new RegExp(content, mods); } catch (err) { value = null; - } + } return finishToken(_regexp, {pattern: content, flags: mods, value: value}); } @@ -2374,8 +2373,8 @@ nodeType = "SpreadElement"; } else { nodeType = update ? "UpdateExpression" : "UnaryExpression"; - node.operator = tokVal; - node.prefix = true; + node.operator = tokVal; + node.prefix = true; } tokRegexpAllowed = true; next(); @@ -3261,6 +3260,7 @@ inXJSTag = false; next(); + if (tokType !== _ellipsis) unexpected(); var node = parseMaybeUnary(); inXJSTag = origInXJSTag; @@ -3359,6 +3359,9 @@ inXJSChild = origInXJSChild; inXJSTag = origInXJSTag; tokRegexpAllowed = false; + if (inXJSChild) { + tokPos = tokEnd; + } expect(_gt); return finishNode(node, "XJSClosingElement"); } diff --git a/test/run.js b/test/run.js index a717e9800b..4075bc55fb 100644 --- a/test/run.js +++ b/test/run.js @@ -65,10 +65,10 @@ } }; - function report(state, code, message) { +function report(state, code, message) { if (state != "ok") {++stats.failed; log(code, message);} ++stats.testsRun; - } +} group("Errors"); @@ -76,7 +76,7 @@ group(name); var mode = modes[name]; stats = mode.stats = {testsRun: 0, failed: 0}; - var t0 = +new Date; +var t0 = +new Date; driver.runTests(mode.config, report); mode.stats.duration = +new Date - t0; groupEnd(); @@ -104,8 +104,8 @@ groupEnd(); if (total.failed && typeof process === "object") { - process.stdout.write("", function() { - process.exit(1); - }); + process.stdout.write("", function() { + process.exit(1); + }); } })(); diff --git a/test/tests-jsx.js b/test/tests-jsx.js index 5f61b9edf5..d7b58acb94 100644 --- a/test/tests-jsx.js +++ b/test/tests-jsx.js @@ -3199,6 +3199,111 @@ var fbTestFixture = { ] } } + }, + 'Regression': { + '

foo bar baz

;': { + type: "ExpressionStatement", + start: 0, + end: 40, + expression: { + type: "XJSElement", + start: 0, + end: 38, + openingElement: { + type: "XJSOpeningElement", + start: 0, + end: 3, + attributes: [], + name: { + type: "XJSIdentifier", + start: 1, + end: 2, + name: "p" + }, + selfClosing: false + }, + closingElement: { + type: "XJSClosingElement", + start: 34, + end: 38, + name: { + type: "XJSIdentifier", + start: 36, + end: 37, + name: "p" + } + }, + children: [ + { + type: "Literal", + start: 3, + end: 7, + value: "foo ", + raw: "foo " + }, + { + type: "XJSElement", + start: 7, + end: 30, + openingElement: { + type: "XJSOpeningElement", + start: 7, + end: 22, + attributes: [{ + type: "XJSAttribute", + start: 10, + end: 21, + name: { + type: "XJSIdentifier", + start: 10, + end: 14, + name: "href" + }, + value: { + type: "Literal", + start: 15, + end: 21, + value: "test", + raw: "\"test\"" + } + }], + name: { + type: "XJSIdentifier", + start: 8, + end: 9, + name: "a" + }, + selfClosing: false + }, + closingElement: { + type: "XJSClosingElement", + start: 26, + end: 30, + name: { + type: "XJSIdentifier", + start: 28, + end: 29, + name: "a" + } + }, + children: [{ + type: "Literal", + start: 22, + end: 26, + value: " bar", + raw: " bar" + }] + }, + { + type: "Literal", + start: 30, + end: 34, + value: " baz", + raw: " baz" + } + ] + } + } } }; @@ -3206,13 +3311,16 @@ if (typeof exports !== "undefined") { var test = require("./driver.js").test; } -for (var code in fbTestFixture.XJS) { - test(code, { - type: 'Program', - body: [fbTestFixture.XJS[code]] - }, { - ecmaVersion: 6, - locations: true, - ranges: true - }); +for (var ns in fbTestFixture) { + ns = fbTestFixture[ns]; + for (var code in ns) { + test(code, { + type: 'Program', + body: [ns[code]] + }, { + ecmaVersion: 6, + locations: true, + ranges: true + }); + } }