| Index: src/parsing/parser.cc
|
| diff --git a/src/parsing/parser.cc b/src/parsing/parser.cc
|
| index 25126e1cf3295fd4b90b0efe719f10a7d54b19ab..91d3fb8f0f31dc0fd9d828ddb37ac6d89526e8b3 100644
|
| --- a/src/parsing/parser.cc
|
| +++ b/src/parsing/parser.cc
|
| @@ -753,11 +753,11 @@ FunctionLiteral* ParserTraits::ParseFunctionLiteral(
|
| function_token_position, type, language_mode, ok);
|
| }
|
|
|
| -
|
| ClassLiteral* ParserTraits::ParseClassLiteral(
|
| - const AstRawString* name, Scanner::Location class_name_location,
|
| - bool name_is_strict_reserved, int pos, bool* ok) {
|
| - return parser_->ParseClassLiteral(name, class_name_location,
|
| + Type::ExpressionClassifier* classifier, const AstRawString* name,
|
| + Scanner::Location class_name_location, bool name_is_strict_reserved,
|
| + int pos, bool* ok) {
|
| + return parser_->ParseClassLiteral(classifier, name, class_name_location,
|
| name_is_strict_reserved, pos, ok);
|
| }
|
|
|
| @@ -1564,9 +1564,9 @@ Statement* Parser::ParseExportDefault(bool* ok) {
|
| if (peek() == Token::EXTENDS || peek() == Token::LBRACE) {
|
| // ClassDeclaration[+Default] ::
|
| // 'class' ('extends' LeftHandExpression)? '{' ClassBody '}'
|
| - default_export =
|
| - ParseClassLiteral(default_string, Scanner::Location::invalid(),
|
| - false, position(), CHECK_OK);
|
| + default_export = ParseClassLiteral(nullptr, default_string,
|
| + Scanner::Location::invalid(), false,
|
| + position(), CHECK_OK);
|
| result = factory()->NewEmptyStatement(RelocInfo::kNoPosition);
|
| } else {
|
| result = ParseClassDeclaration(&names, CHECK_OK);
|
| @@ -2130,7 +2130,7 @@ Statement* Parser::ParseClassDeclaration(ZoneList<const AstRawString*>* names,
|
| bool is_strict_reserved = false;
|
| const AstRawString* name =
|
| ParseIdentifierOrStrictReservedWord(&is_strict_reserved, CHECK_OK);
|
| - ClassLiteral* value = ParseClassLiteral(name, scanner()->location(),
|
| + ClassLiteral* value = ParseClassLiteral(nullptr, name, scanner()->location(),
|
| is_strict_reserved, pos, CHECK_OK);
|
|
|
| VariableProxy* proxy = NewUnresolved(name, LET);
|
| @@ -4630,8 +4630,8 @@ PreParser::PreParseResult Parser::ParseLazyFunctionBodyWithPreParser(
|
| return result;
|
| }
|
|
|
| -
|
| -ClassLiteral* Parser::ParseClassLiteral(const AstRawString* name,
|
| +ClassLiteral* Parser::ParseClassLiteral(ExpressionClassifier* classifier,
|
| + const AstRawString* name,
|
| Scanner::Location class_name_location,
|
| bool name_is_strict_reserved, int pos,
|
| bool* ok) {
|
| @@ -4664,9 +4664,13 @@ ClassLiteral* Parser::ParseClassLiteral(const AstRawString* name,
|
| Expression* extends = NULL;
|
| if (Check(Token::EXTENDS)) {
|
| block_scope->set_start_position(scanner()->location().end_pos);
|
| - ExpressionClassifier classifier(this);
|
| - extends = ParseLeftHandSideExpression(&classifier, CHECK_OK);
|
| - RewriteNonPattern(&classifier, CHECK_OK);
|
| + ExpressionClassifier extends_classifier(this);
|
| + extends = ParseLeftHandSideExpression(&extends_classifier, CHECK_OK);
|
| + RewriteNonPattern(&extends_classifier, CHECK_OK);
|
| + if (classifier != nullptr) {
|
| + classifier->Accumulate(&extends_classifier,
|
| + ExpressionClassifier::ExpressionProductions);
|
| + }
|
| } else {
|
| block_scope->set_start_position(scanner()->location().end_pos);
|
| }
|
|
|