use right recursion for right associative operators

This commit is contained in:
Charlie Somerville 2015-01-18 00:42:43 +11:00
parent 5f42326f34
commit b51118c3fc

View File

@ -2515,9 +2515,17 @@
var op = tokType;
next();
var start = storeCurrentPos();
node.right = parseExprOp(parseMaybeUnary(), start, prec, noIn);
if(op.rightAssociative) {
node.right = parseExprOp(parseMaybeUnary(), start, prec - 1, noIn);
} else {
node.right = parseExprOp(parseMaybeUnary(), start, prec, noIn);
}
finishNode(node, (op === _logicalOR || op === _logicalAND) ? "LogicalExpression" : "BinaryExpression");
return parseExprOp(node, leftStart, minPrec, noIn);
if(op.rightAssociative) {
return node;
} else {
return parseExprOp(node, leftStart, minPrec, noIn);
}
}
}
return left;