From 9b5d4e417b41eaca44565c60fd433791c2a3a4aa Mon Sep 17 00:00:00 2001 From: orktes Date: Thu, 20 Nov 2025 20:06:50 +0200 Subject: [PATCH] Fix https://github.com/dop251/goja/issues/688 --- parser/parser_test.go | 6 ++++++ parser/statement.go | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/parser/parser_test.go b/parser/parser_test.go index e09a7d6cc..4534c391a 100644 --- a/parser/parser_test.go +++ b/parser/parser_test.go @@ -930,6 +930,12 @@ func TestParser(t *testing.T) { `, nil) is(len(program.Body), 1) + test("function f() { if (true) { return class A {} } let A; if (true) { A = class A {} } }", nil) + test("function f() { if (true) return class A {} }", nil) + test("function f() { let A; if (true) A = class A {} }", nil) + test("function f() { if (false) {} else return class A {} }", nil) + test("function f() { let A; if (false) {} else A = class A {} }", nil) + { program := test(`(-2)**53`, nil) st := program.Body[0].(*ast.ExpressionStatement).Expression.(*ast.BinaryExpression) diff --git a/parser/statement.go b/parser/statement.go index 8ec5cdeb7..d72050461 100644 --- a/parser/statement.go +++ b/parser/statement.go @@ -299,7 +299,7 @@ func (self *_parser) parseArrowFunctionBody(async bool) (ast.ConciseBody, []*ast } func (self *_parser) parseClass(declaration bool) *ast.ClassLiteral { - if !self.scope.allowLet && self.token == token.CLASS { + if declaration && !self.scope.allowLet && self.token == token.CLASS { self.errorUnexpectedToken(token.CLASS) }