Avoid separate handling of SpreadElement in favor of UnaryExpression parser.

This commit is contained in:
Ingvar Stepanyan 2014-10-26 20:58:05 +02:00 committed by Marijn Haverbeke
parent ac8bdc608d
commit 72df78cc88

View File

@ -401,8 +401,9 @@
var _bracketL = {type: "[", beforeExpr: true}, _bracketR = {type: "]"}, _braceL = {type: "{", beforeExpr: true}; var _bracketL = {type: "[", beforeExpr: true}, _bracketR = {type: "]"}, _braceL = {type: "{", beforeExpr: true};
var _braceR = {type: "}"}, _parenL = {type: "(", beforeExpr: true}, _parenR = {type: ")"}; var _braceR = {type: "}"}, _parenL = {type: "(", beforeExpr: true}, _parenR = {type: ")"};
var _comma = {type: ",", beforeExpr: true}, _semi = {type: ";", beforeExpr: true}; var _comma = {type: ",", beforeExpr: true}, _semi = {type: ";", beforeExpr: true};
var _colon = {type: ":", beforeExpr: true}, _dot = {type: "."}, _ellipsis = {type: "..."}, _question = {type: "?", beforeExpr: true}; var _colon = {type: ":", beforeExpr: true}, _dot = {type: "."}, _question = {type: "?", beforeExpr: true};
var _arrow = {type: "=>", beforeExpr: true}, _bquote = {type: "`"}, _dollarBraceL = {type: "${", beforeExpr: true}; var _arrow = {type: "=>", beforeExpr: true}, _bquote = {type: "`"}, _dollarBraceL = {type: "${", beforeExpr: true};
var _ellipsis = {type: "...", prefix: true, beforeExpr: true};
// Operators. These carry several kinds of properties to help the // Operators. These carry several kinds of properties to help the
// parser use them properly (the presence of these properties is // parser use them properly (the presence of these properties is
@ -1949,6 +1950,8 @@
function parseMaybeUnary() { function parseMaybeUnary() {
if (tokType.prefix) { if (tokType.prefix) {
var node = startNode(), update = tokType.isUpdate; var node = startNode(), update = tokType.isUpdate;
var nodeType = tokType === _ellipsis ? "SpreadElement" :
(update ? "UpdateExpression" : "UnaryExpression");
node.operator = tokVal; node.operator = tokVal;
node.prefix = true; node.prefix = true;
tokRegexpAllowed = true; tokRegexpAllowed = true;
@ -1958,7 +1961,7 @@
else if (strict && node.operator === "delete" && else if (strict && node.operator === "delete" &&
node.argument.type === "Identifier") node.argument.type === "Identifier")
raise(node.start, "Deleting local variable in strict mode"); raise(node.start, "Deleting local variable in strict mode");
return finishNode(node, update ? "UpdateExpression" : "UnaryExpression"); return finishNode(node, nodeType);
} }
var start = storeCurrentPos(); var start = storeCurrentPos();
var expr = parseExprSubscripts(); var expr = parseExprSubscripts();
@ -2115,9 +2118,6 @@
case _new: case _new:
return parseNew(); return parseNew();
case _ellipsis:
return parseSpread();
case _bquote: case _bquote:
return parseTemplate(); return parseTemplate();
@ -2140,15 +2140,6 @@
return finishNode(node, "NewExpression"); return finishNode(node, "NewExpression");
} }
// Parse spread element '...expr'
function parseSpread() {
var node = startNode();
next();
node.argument = parseExpression(true);
return finishNode(node, "SpreadElement");
}
// Parse template expression. // Parse template expression.
function parseTemplate() { function parseTemplate() {