@@ -46,6 +46,7 @@ public Context()
4646 public bool IsModule ;
4747 public bool AllowIn ;
4848 public bool AllowStrictDirective ;
49+ public bool AllowSuper ;
4950 public bool AllowYield ;
5051 public bool IsAsync ;
5152 public Token ? FirstCoverInitializedNameError ;
@@ -1581,7 +1582,7 @@ private Expression ParseLeftHandSideExpressionAllowCall()
15811582 expr = MatchKeyword ( "new" ) ? InheritCoverGrammar ( parseNewExpression ) : InheritCoverGrammar ( parsePrimaryExpression ) ;
15821583 }
15831584
1584- if ( isSuper && ! _context . InClassConstructor )
1585+ if ( isSuper && ( ! _context . InClassConstructor || ! _context . AllowSuper ) )
15851586 {
15861587 TolerateError ( Messages . UnexpectedSuper ) ;
15871588 }
@@ -4477,7 +4478,8 @@ private ClassDeclaration ParseClassDeclaration(bool identifierIsOptional = false
44774478 {
44784479 var node = CreateNode ( ) ;
44794480
4480- var previousStrict = _context . Strict ;
4481+ var previousStrict = _context . Strict ;
4482+ var previousAllowSuper = _context . AllowSuper ;
44814483 _context . Strict = true ;
44824484 ExpectKeyword ( "class" ) ;
44834485
@@ -4489,11 +4491,13 @@ private ClassDeclaration ParseClassDeclaration(bool identifierIsOptional = false
44894491 if ( MatchKeyword ( "extends" ) )
44904492 {
44914493 NextToken ( ) ;
4492- superClass = IsolateCoverGrammar ( ParseLeftHandSideExpressionAllowCall ) ;
4494+ superClass = IsolateCoverGrammar ( ParseLeftHandSideExpressionAllowCall ) ;
4495+ _context . AllowSuper = true ;
44934496 }
44944497
44954498 var classBody = ParseClassBody ( ) ;
44964499 _context . Strict = previousStrict ;
4500+ _context . AllowSuper = previousAllowSuper ;
44974501
44984502 return Finalize ( node , new ClassDeclaration ( id , superClass , classBody ) ) ;
44994503 }
0 commit comments