| 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);
|
|
|