Index: src/parsing/preparser.cc |
diff --git a/src/parsing/preparser.cc b/src/parsing/preparser.cc |
index 8712fff3b9896e8bb44bbc5d054c03ba37066121..822614e86c606c91fdd714cb40b02316f72b75d7 100644 |
--- a/src/parsing/preparser.cc |
+++ b/src/parsing/preparser.cc |
@@ -140,11 +140,11 @@ PreParser::PreParseResult PreParser::PreParseLazyFunction( |
return kPreParseSuccess; |
} |
- |
PreParserExpression PreParserTraits::ParseClassLiteral( |
- PreParserIdentifier name, Scanner::Location class_name_location, |
- bool name_is_strict_reserved, int pos, bool* ok) { |
- return pre_parser_->ParseClassLiteral(name, class_name_location, |
+ Type::ExpressionClassifier* classifier, PreParserIdentifier name, |
+ Scanner::Location class_name_location, bool name_is_strict_reserved, |
+ int pos, bool* ok) { |
+ return pre_parser_->ParseClassLiteral(classifier, name, class_name_location, |
name_is_strict_reserved, pos, ok); |
} |
@@ -418,8 +418,8 @@ PreParser::Statement PreParser::ParseClassDeclaration(bool* ok) { |
bool is_strict_reserved = false; |
Identifier name = |
ParseIdentifierOrStrictReservedWord(&is_strict_reserved, CHECK_OK); |
- ParseClassLiteral(name, scanner()->location(), is_strict_reserved, pos, |
- CHECK_OK); |
+ ParseClassLiteral(nullptr, name, scanner()->location(), is_strict_reserved, |
+ pos, CHECK_OK); |
return Statement::Default(); |
} |
@@ -1136,10 +1136,10 @@ void PreParser::ParseLazyFunctionLiteralBody(bool* ok, |
scope_->uses_super_property(), scope_->calls_eval()); |
} |
- |
PreParserExpression PreParser::ParseClassLiteral( |
- PreParserIdentifier name, Scanner::Location class_name_location, |
- bool name_is_strict_reserved, int pos, bool* ok) { |
+ ExpressionClassifier* classifier, PreParserIdentifier name, |
+ Scanner::Location class_name_location, bool name_is_strict_reserved, |
+ int pos, bool* ok) { |
// All parts of a ClassDeclaration and ClassExpression are strict code. |
if (name_is_strict_reserved) { |
ReportMessageAt(class_name_location, |
@@ -1163,9 +1163,13 @@ PreParserExpression PreParser::ParseClassLiteral( |
bool has_extends = Check(Token::EXTENDS); |
if (has_extends) { |
- ExpressionClassifier classifier(this); |
- ParseLeftHandSideExpression(&classifier, CHECK_OK); |
- ValidateExpression(&classifier, CHECK_OK); |
+ ExpressionClassifier extends_classifier(this); |
+ ParseLeftHandSideExpression(&extends_classifier, CHECK_OK); |
+ ValidateExpression(&extends_classifier, CHECK_OK); |
+ if (classifier != nullptr) { |
+ classifier->Accumulate(&extends_classifier, |
+ ExpressionClassifier::ExpressionProductions); |
+ } |
} |
ClassLiteralChecker checker(this); |