From 9d197959f065e178f88440a5f048085db8c78374 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jochen=20K=C3=BChner?= Date: Mon, 1 Nov 2021 13:19:59 +0100 Subject: [PATCH] Fix parsing error in exponent expressions with unary left-hand sides. Esprima (correctly) rejects expressions like -1**2. - https://github.com/jquery/esprima/pull/2070 However, expressions like (-1)**2 are valid but still rejected. This commit fixes this issue by identifying when the left operand is parenthesized. Fixes https://github.com/jquery/esprima/issues/1981 --- src/Esprima/JavascriptParser.cs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/Esprima/JavascriptParser.cs b/src/Esprima/JavascriptParser.cs index fd2b8869..107cb7a2 100644 --- a/src/Esprima/JavascriptParser.cs +++ b/src/Esprima/JavascriptParser.cs @@ -1860,10 +1860,14 @@ private Expression ParseUnaryExpression() private Expression ParseExponentiationExpression() { - var startToken = _lookahead; - - var expr = InheritCoverGrammar(parseUnaryExpression); - if (expr.Type != Nodes.UnaryExpression && Match("**")) + var startToken = _lookahead; + + var isLeftParenthesized = this.Match("("); + var expr = InheritCoverGrammar(parseUnaryExpression); + + var exponentAllowed = expr.Type != Nodes.UnaryExpression || isLeftParenthesized; + + if (exponentAllowed && Match("**")) { NextToken(); _context.IsAssignmentTarget = false;