From b51118c3fcd05cbd0cce58826f4c561a3a57e3d3 Mon Sep 17 00:00:00 2001 From: Charlie Somerville Date: Sun, 18 Jan 2015 00:42:43 +1100 Subject: [PATCH] use right recursion for right associative operators --- acorn.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/acorn.js b/acorn.js index a3be8bdb90..3cf3f06e87 100644 --- a/acorn.js +++ b/acorn.js @@ -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;