From d3e987896c5682fccdeb94d634361a6cbfb78be2 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Thu, 20 Nov 2014 19:46:47 +1100 Subject: [PATCH 1/2] Fix spread attributes within elements inside expression containers --- acorn.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/acorn.js b/acorn.js index 419afd10ae..1d357e5133 100644 --- a/acorn.js +++ b/acorn.js @@ -3169,13 +3169,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); From 20a5d62ac643d165144c240a2f5744da86c646f8 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Thu, 20 Nov 2014 21:07:03 +1100 Subject: [PATCH 2/2] Add regression test for #5 --- test/tests-jsx.js | 77 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) 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: [] + } + }] + } + }] } } };