From 6a944faa1557269e84c40851923d139048b6837e Mon Sep 17 00:00:00 2001 From: fisker Date: Mon, 28 Aug 2023 17:36:20 +0800 Subject: [PATCH] Minor refactor to `getPrecedence` --- src/util.js | 82 ++++++++++++++++++++++++++--------------------------- 1 file changed, 40 insertions(+), 42 deletions(-) diff --git a/src/util.js b/src/util.js index 9466f91cb..1a5ce2fde 100644 --- a/src/util.js +++ b/src/util.js @@ -53,49 +53,47 @@ function printNumber(rawNumber) { } // http://php.net/manual/en/language.operators.precedence.php -const PRECEDENCE = {}; -[ - ["or"], - ["xor"], - ["and"], +const PRECEDENCE = new Map( [ - "=", - "+=", - "-=", - "*=", - "**=", - "/=", - ".=", - "%=", - "&=", - "|=", - "^=", - "<<=", - ">>=", - ], - ["??"], - ["||"], - ["&&"], - ["|"], - ["^"], - ["&"], - ["==", "===", "!=", "!==", "<>", "<=>"], - ["<", ">", "<=", ">="], - [">>", "<<"], - ["+", "-", "."], - ["*", "/", "%"], - ["!"], - ["instanceof"], - ["++", "--", "~"], - ["**"], -].forEach((tier, i) => { - tier.forEach((op) => { - PRECEDENCE[op] = i; - }); -}); - -function getPrecedence(op) { - return PRECEDENCE[op]; + ["or"], + ["xor"], + ["and"], + [ + "=", + "+=", + "-=", + "*=", + "**=", + "/=", + ".=", + "%=", + "&=", + "|=", + "^=", + "<<=", + ">>=", + ], + ["??"], + ["||"], + ["&&"], + ["|"], + ["^"], + ["&"], + ["==", "===", "!=", "!==", "<>", "<=>"], + ["<", ">", "<=", ">="], + [">>", "<<"], + ["+", "-", "."], + ["*", "/", "%"], + ["!"], + ["instanceof"], + ["++", "--", "~"], + ["**"], + ].flatMap((operators, index) => + operators.map((operator) => [operator, index]) + ) +); +function getPrecedence(operator) { + return PRECEDENCE.get(operator); } const equalityOperators = ["==", "!=", "===", "!==", "<>", "<=>"];