Browse Source

Fix https://github.com/dop251/goja/issues/688

orktes 3 weeks ago
parent
commit
9b5d4e417b
2 changed files with 7 additions and 1 deletions
  1. 6 0
      parser/parser_test.go
  2. 1 1
      parser/statement.go

+ 6 - 0
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)

+ 1 - 1
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)
 	}