From a46474c3c22cfe3bae59ee520c47415e4cf3cfa1 Mon Sep 17 00:00:00 2001 From: Dave Holoway Date: Sat, 23 May 2020 13:22:01 +0100 Subject: [PATCH] fix parsing of binary operstors following a bracket expression --- src/expression/parse.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/expression/parse.js b/src/expression/parse.js index eaceaf4..100d4d2 100644 --- a/src/expression/parse.js +++ b/src/expression/parse.js @@ -387,7 +387,10 @@ function parseNewExpression(e) { */ function parse_expression_term(e) { if (e.expr[0] === '(') { - return parseBracketOrCastExpression(new ExpressionText(e.expr)); + const subexpr = new ExpressionText(e.expr); + const bexpr = parseBracketOrCastExpression(subexpr); + e.expr = subexpr.expr; + return bexpr; } const unop = e.expr.match(/^(?:(!\s?)+|(~\s?)+|(?:([+-]\s?)+(?![\d.])))/); if (unop) { @@ -411,7 +414,7 @@ function parse_expression_term(e) { * @param {string} s */ function getBinaryOperator(s) { - const binary_op_match = s.match(/^([/%*&|^+-]=|<<=|>>>?=|[>>>?|[><]|&&|\|\||[/%*&|^]|\+(?=[^+]|[+][\w\d.])|\-(?=[^-]|[-][\w\d.])|instanceof\b|\?)/); + const binary_op_match = s.match(/^([!=/%*&|^+-]=?|<>?[>=]?|&&|\|\||[/%*&|^]|\+(?=[^+]|[+][\w\d.])|\-(?=[^-]|[-][\w\d.])|instanceof\b|\?)/); return binary_op_match ? binary_op_match[0] : null; }