fix flow type param parsing position - fixes #24

This commit is contained in:
Sebastian McKenzie 2015-01-26 20:30:21 +11:00
parent 189d2c3fa9
commit e14e6473ff

View File

@ -2414,7 +2414,7 @@
while (!eat(close)) { while (!eat(close)) {
first ? first = false : expect(_comma); first ? first = false : expect(_comma);
if (tokType === _ellipsis) { if (tokType === _ellipsis) {
elts.push(parseAssignableListItem(parseRest())); elts.push(parseAssignableListItemTypes(parseRest()));
expect(close); expect(close);
break; break;
} }
@ -2422,14 +2422,16 @@
if (allowEmpty && tokType === _comma) { if (allowEmpty && tokType === _comma) {
elem = null; elem = null;
} else { } else {
elem = parseAssignableListItem(parseMaybeDefault()); var left = parseAssignableAtom();
parseAssignableListItemTypes(left);
elem = parseMaybeDefault(null, left);
} }
elts.push(elem); elts.push(elem);
} }
return elts; return elts;
} }
function parseAssignableListItem(param) { function parseAssignableListItemTypes(param) {
if (eat(_question)) { if (eat(_question)) {
param.optional = true; param.optional = true;
} }
@ -3000,7 +3002,7 @@
// Parse an assignment expression. This includes applications of // Parse an assignment expression. This includes applications of
// operators like `+=`. // operators like `+=`.
function parseMaybeAssign(noIn, refShorthandDefaultPos) { function parseMaybeAssign(noIn, refShorthandDefaultPos, afterLeftParse) {
var failOnShorthandAssign; var failOnShorthandAssign;
if (!refShorthandDefaultPos) { if (!refShorthandDefaultPos) {
refShorthandDefaultPos = {start: 0}; refShorthandDefaultPos = {start: 0};
@ -3010,6 +3012,7 @@
} }
var start = storeCurrentPos(); var start = storeCurrentPos();
var left = parseMaybeConditional(noIn, refShorthandDefaultPos); var left = parseMaybeConditional(noIn, refShorthandDefaultPos);
if (afterLeftParse) afterLeftParse(left);
if (tokType.isAssign) { if (tokType.isAssign) {
var node = startNodeAt(start); var node = startNodeAt(start);
node.operator = tokVal; node.operator = tokVal;
@ -3348,7 +3351,7 @@
if (tokType === _parenL && !innerParenStart) { if (tokType === _parenL && !innerParenStart) {
innerParenStart = tokStart; innerParenStart = tokStart;
} }
exprList.push(parseParenItem(parseMaybeAssign(false, refShorthandDefaultPos))); exprList.push(parseMaybeAssign(false, refShorthandDefaultPos, parseParenItem));
} }
} }
var innerEnd = storeCurrentPos(); var innerEnd = storeCurrentPos();