From d0e5cd3bee62a966f5f44f6b07fc5d7a01a32714 Mon Sep 17 00:00:00 2001 From: Christian Zosel Date: Sun, 10 May 2020 21:56:44 +0200 Subject: [PATCH] fix(precedence): right-associative operators --- src/ast.js | 3 ++- test/precedence.test.js | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/ast.js b/src/ast.js index de87fee8b..bff1c2959 100644 --- a/src/ast.js +++ b/src/ast.js @@ -239,7 +239,8 @@ AST.prototype.resolvePrecedence = function (result, parser) { lLevel && rLevel && rLevel <= lLevel && - !this.isRightAssociative(result.type) + (result.type !== result.right.type || + !this.isRightAssociative(result.type)) ) { // https://github.com/glayzzle/php-parser/issues/79 // shift precedence diff --git a/test/precedence.test.js b/test/precedence.test.js index d759848bc..3eabd0a76 100644 --- a/test/precedence.test.js +++ b/test/precedence.test.js @@ -89,6 +89,9 @@ describe("Test precedence", function () { it("test ?? right-associative", function () { shouldBeSame("1 ?? 2 ?? 3", "1 ?? (2 ?? 3)"); }); + it("test ** precedence", function () { + shouldBeSame("1 ** 2 + 3", "(1 ** 2) + 3"); + }); it("test ** right-associative", function () { shouldBeSame("1 ** 2 ** 3", "1 ** (2 ** 3)"); });