| Index: src/parsing/parser.cc
|
| diff --git a/src/parsing/parser.cc b/src/parsing/parser.cc
|
| index c103b9efdac606927209a105f4e596a37514dced..46b435bab8efce7339b520c679629a637bab7736 100644
|
| --- a/src/parsing/parser.cc
|
| +++ b/src/parsing/parser.cc
|
| @@ -4236,7 +4236,7 @@ Expression* Parser::ParseClassLiteral(const AstRawString* name,
|
|
|
|
|
| ClassLiteralChecker checker(this);
|
| - ZoneList<ObjectLiteral::Property*>* properties = NewPropertyList(4);
|
| + ZoneList<ClassLiteral::Property*>* properties = NewClassPropertyList(4);
|
| FunctionLiteral* constructor = nullptr;
|
| bool has_seen_constructor = false;
|
|
|
| @@ -4246,14 +4246,13 @@ Expression* Parser::ParseClassLiteral(const AstRawString* name,
|
| while (peek() != Token::RBRACE) {
|
| if (Check(Token::SEMICOLON)) continue;
|
| FuncNameInferrer::State fni_state(fni_);
|
| - const bool in_class = true;
|
| bool is_computed_name = false; // Classes do not care about computed
|
| // property names here.
|
| ExpressionClassifier property_classifier(this);
|
| const AstRawString* property_name = nullptr;
|
| - ObjectLiteral::Property* property = ParsePropertyDefinition(
|
| - &checker, in_class, has_extends, &is_computed_name,
|
| - &has_seen_constructor, &property_name, CHECK_OK);
|
| + ClassLiteral::Property* property = ParseClassPropertyDefinition(
|
| + &checker, has_extends, &is_computed_name, &has_seen_constructor,
|
| + &property_name, CHECK_OK);
|
| RewriteNonPattern(CHECK_OK);
|
| impl()->AccumulateFormalParameterContainmentErrors();
|
|
|
| @@ -5031,7 +5030,7 @@ class NonPatternRewriter : public AstExpressionRewriter {
|
| return false;
|
| }
|
|
|
| - void VisitObjectLiteralProperty(ObjectLiteralProperty* property) override {
|
| + void VisitLiteralProperty(LiteralProperty* property) override {
|
| if (property == nullptr) return;
|
| // Do not rewrite (computed) key expressions
|
| AST_REWRITE_PROPERTY(Expression, property, value);
|
| @@ -5242,6 +5241,34 @@ void Parser::SetFunctionNameFromPropertyName(ObjectLiteralProperty* property,
|
| SetFunctionName(value, name);
|
| }
|
|
|
| +void Parser::SetFunctionNameFromPropertyName(ClassLiteralProperty* property,
|
| + const AstRawString* name) {
|
| + // TODO(bakkot) move this logic into Parse{Object,Class}PropertyDefinition and
|
| + // clean it up.
|
| + Expression* value = property->value();
|
| +
|
| + // Computed name setting must happen at runtime.
|
| + if (property->is_computed_name()) return;
|
| +
|
| + // Getter and setter names are handled here because their names
|
| + // change in ES2015, even though they are not anonymous.
|
| + auto function = value->AsFunctionLiteral();
|
| + DCHECK_NOT_NULL(function);
|
| +
|
| + bool is_getter = property->kind() == ClassLiteralProperty::GETTER;
|
| + bool is_setter = property->kind() == ClassLiteralProperty::SETTER;
|
| + if (is_getter || is_setter) {
|
| + DCHECK_NOT_NULL(name);
|
| + const AstRawString* prefix = is_getter
|
| + ? ast_value_factory()->get_space_string()
|
| + : ast_value_factory()->set_space_string();
|
| + function->set_raw_name(ast_value_factory()->NewConsString(prefix, name));
|
| + return;
|
| + }
|
| +
|
| + SetFunctionName(value, name);
|
| +}
|
| +
|
| void Parser::SetFunctionNameFromIdentifierRef(Expression* value,
|
| Expression* identifier) {
|
| if (!identifier->IsVariableProxy()) return;
|
|
|