| Index: src/parsing/parser-base.h
|
| diff --git a/src/parsing/parser-base.h b/src/parsing/parser-base.h
|
| index 3dab585dcdbdbbd906a6952549c7cb75d9fe6317..41c434762905c37a0115e350774d58ea538b2b02 100644
|
| --- a/src/parsing/parser-base.h
|
| +++ b/src/parsing/parser-base.h
|
| @@ -677,7 +677,9 @@ class ParserBase {
|
| instance_field_initializers(parser->impl()->NewExpressionList(0)),
|
| constructor(parser->impl()->EmptyFunctionLiteral()),
|
| has_seen_constructor(false),
|
| - static_initializer_var(nullptr) {}
|
| + static_initializer_var(nullptr),
|
| + has_name_static_property(false),
|
| + has_static_computed_names(false) {}
|
| VariableProxy* proxy;
|
| ExpressionT extends;
|
| typename Types::ClassPropertyList properties;
|
| @@ -685,6 +687,8 @@ class ParserBase {
|
| FunctionLiteralT constructor;
|
| bool has_seen_constructor;
|
| Variable* static_initializer_var;
|
| + bool has_name_static_property;
|
| + bool has_static_computed_names;
|
| };
|
|
|
| DeclarationScope* NewScriptScope() const {
|
| @@ -1168,7 +1172,7 @@ class ParserBase {
|
| ClassLiteralPropertyT ParseClassPropertyDefinition(
|
| ClassLiteralChecker* checker, bool has_extends, bool* is_computed_name,
|
| bool* has_seen_constructor, ClassLiteralProperty::Kind* property_kind,
|
| - bool* is_static, bool* ok);
|
| + bool* is_static, bool* has_name_static_property, bool* ok);
|
| FunctionLiteralT ParseClassFieldForInitializer(bool has_initializer,
|
| bool* ok);
|
| ObjectLiteralPropertyT ParseObjectPropertyDefinition(
|
| @@ -2141,8 +2145,9 @@ typename ParserBase<Impl>::ClassLiteralPropertyT
|
| ParserBase<Impl>::ParseClassPropertyDefinition(
|
| ClassLiteralChecker* checker, bool has_extends, bool* is_computed_name,
|
| bool* has_seen_constructor, ClassLiteralProperty::Kind* property_kind,
|
| - bool* is_static, bool* ok) {
|
| - DCHECK(has_seen_constructor != nullptr);
|
| + bool* is_static, bool* has_name_static_property, bool* ok) {
|
| + DCHECK_NOT_NULL(has_seen_constructor);
|
| + DCHECK_NOT_NULL(has_name_static_property);
|
| bool is_get = false;
|
| bool is_set = false;
|
| bool is_generator = false;
|
| @@ -2177,6 +2182,10 @@ ParserBase<Impl>::ParseClassPropertyDefinition(
|
| is_computed_name, CHECK_OK_CUSTOM(EmptyClassLiteralProperty));
|
| }
|
|
|
| + if (!*has_name_static_property && is_static && impl()->IsName(name)) {
|
| + *has_name_static_property = true;
|
| + }
|
| +
|
| switch (kind) {
|
| case PropertyKind::kClassField:
|
| case PropertyKind::kNotSet: // This case is a name followed by a name or
|
| @@ -4144,7 +4153,12 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseClassLiteral(
|
| bool is_constructor = !class_info.has_seen_constructor;
|
| ClassLiteralPropertyT property = ParseClassPropertyDefinition(
|
| &checker, has_extends, &is_computed_name,
|
| - &class_info.has_seen_constructor, &property_kind, &is_static, CHECK_OK);
|
| + &class_info.has_seen_constructor, &property_kind, &is_static,
|
| + &class_info.has_name_static_property, CHECK_OK);
|
| + if (!class_info.has_static_computed_names && is_static &&
|
| + is_computed_name) {
|
| + class_info.has_static_computed_names = true;
|
| + }
|
| is_constructor &= class_info.has_seen_constructor;
|
| impl()->RewriteNonPattern(CHECK_OK);
|
| impl()->AccumulateFormalParameterContainmentErrors();
|
|
|