diff --git a/acorn.js b/acorn.js index b89158e41e..ce23f3c453 100644 --- a/acorn.js +++ b/acorn.js @@ -3256,13 +3256,14 @@ if (tokType === _braceL) { var tokStart1 = tokStart, tokStartLoc1 = tokStartLoc; - var origInXJSTag = inXJSTag; - inXJSTag = false; + var origInXJSTag = inXJSTag, origInXJSChildExpression = inXJSChildExpression; + inXJSTag = inXJSChildExpression = false; next(); if (tokType !== _ellipsis) unexpected(); var node = parseMaybeUnary(); + inXJSChildExpression = origInXJSChildExpression; inXJSTag = origInXJSTag; expect(_braceR); diff --git a/test/run.js b/test/run.js index f7dbbe7c94..f394353d1e 100644 --- a/test/run.js +++ b/test/run.js @@ -50,7 +50,19 @@ config: { parse: (typeof require === "undefined" ? window.acorn : require("../acorn.js")).parse } - } + }/*, + Loose: { + config: { + parse: (typeof require === "undefined" ? window.acorn : require("../acorn_loose")).parse_dammit, + loose: true, + filter: function (test) { + if (/`/.test(test.code)) return false; // FIXME remove this when the loose parse supports template strings + var opts = test.options || {}; + if (opts.loose === false) return false; + return (opts.ecmaVersion || 5) <= 6; + } + } + }*/ }; function report(state, code, message) { diff --git a/test/tests-jsx.js b/test/tests-jsx.js index d7b58acb94..d0348a253e 100644 --- a/test/tests-jsx.js +++ b/test/tests-jsx.js @@ -3303,6 +3303,83 @@ var fbTestFixture = { } ] } + }, + + '
{
}
': { + type: 'Program', + start: 0, + end: 30, + body: [{ + type: 'ExpressionStatement', + start: 0, + end: 30, + expression: { + type: 'XJSElement', + start: 0, + end: 30, + openingElement: { + type: 'XJSOpeningElement', + start: 0, + end: 5, + attributes: [], + name: { + type: 'XJSIdentifier', + start: 1, + end: 4, + name: 'div' + }, + selfClosing: false + }, + closingElement: { + type: 'XJSClosingElement', + start: 24, + end: 30, + name: { + type: 'XJSIdentifier', + start: 26, + end: 29, + name: 'div' + } + }, + children: [{ + type: 'XJSExpressionContainer', + start: 5, + end: 24, + expression: { + type: 'XJSElement', + start: 6, + end: 23, + openingElement: { + type: 'XJSOpeningElement', + start: 6, + end: 23, + attributes: [ + { + type: 'XJSSpreadAttribute', + start: 11, + end: 20, + argument: { + type: 'Identifier', + start: 15, + end: 19, + name: 'test' + } + } + ], + name: { + type: 'XJSIdentifier', + start: 7, + end: 10, + name: 'div' + }, + selfClosing: true + }, + closingElement: null, + children: [] + } + }] + } + }] } } };