diff --git a/parser/parser_test.go b/parser/parser_test.go index e09a7d6c..4534c391 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 8ec5cdeb..d7205046 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) }