Merge pull request #18 from charliesome/pow-associativity

Fix ** operator associativity
This commit is contained in:
Sebastian McKenzie 2015-01-18 00:46:24 +11:00
commit 572b98b6b9

View File

@ -469,7 +469,7 @@
// '*' may be multiply or have special meaning in ES6
var _star = {binop: 10, beforeExpr: true};
var _exponent = {binop: 11, beforeExpr: true};
var _exponent = {binop: 11, beforeExpr: true, rightAssociative: true};
// '<', '>' may be relational or have special meaning in JSX
var _lt = {binop: 7, beforeExpr: true}, _gt = {binop: 7, beforeExpr: true};
@ -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;