From 3b2a162fdb5403e0e8fd3e120da653375f970265 Mon Sep 17 00:00:00 2001 From: Taco de Wolff Date: Fri, 16 Feb 2024 19:35:29 -0300 Subject: [PATCH] JS: fix precedence of OptionalChaining expression --- js/parse.go | 3 +++ js/parse_test.go | 1 + 2 files changed, 4 insertions(+) diff --git a/js/parse.go b/js/parse.go index ea6475b..aab4002 100644 --- a/js/parse.go +++ b/js/parse.go @@ -2002,6 +2002,9 @@ func (p *Parser) parseExpressionSuffix(left IExpr, prec, precLeft OpPrec) IExpr case OptChainToken: if OpCall < prec { return left + } else if precLeft < OpCall { + p.fail("expression") + return nil } p.next() if p.tt == OpenParenToken { diff --git a/js/parse_test.go b/js/parse_test.go index 0bf6d42..1835f13 100644 --- a/js/parse_test.go +++ b/js/parse_test.go @@ -590,6 +590,7 @@ func TestParseError(t *testing.T) { {"function*a(){ (yield) => yield }", "unexpected => in expression"}, {"function*a(){ (yield=5) => yield }", "unexpected = in expression"}, {"function*a(){ (...yield) => yield }", "unexpected => in expression"}, + {"function*a(){ yield yield\n?.() }", "unexpected ?. in expression"}, {"x = await\n=> a++", "unexpected => in expression"}, {"x=async (await,", "unexpected , in expression"}, {"async function a() { class a extends await", "unexpected await in expression"},