| Index: src/ast/ast.cc
|
| diff --git a/src/ast/ast.cc b/src/ast/ast.cc
|
| index d0015fa041ea51d90c14fb8e51da7ad9faf609a9..518cef15fbad7926d957090b79dc52ef8247358e 100644
|
| --- a/src/ast/ast.cc
|
| +++ b/src/ast/ast.cc
|
| @@ -323,27 +323,16 @@ bool FunctionLiteral::NeedsHomeObject(Expression* expr) {
|
| return expr->AsFunctionLiteral()->scope()->NeedsHomeObject();
|
| }
|
|
|
| -
|
| ObjectLiteralProperty::ObjectLiteralProperty(Expression* key, Expression* value,
|
| - Kind kind, bool is_static,
|
| - bool is_computed_name)
|
| - : key_(key),
|
| - value_(value),
|
| + Kind kind, bool is_computed_name)
|
| + : LiteralProperty(key, value, is_computed_name),
|
| kind_(kind),
|
| - emit_store_(true),
|
| - is_static_(is_static),
|
| - is_computed_name_(is_computed_name) {}
|
| -
|
| + emit_store_(true) {}
|
|
|
| ObjectLiteralProperty::ObjectLiteralProperty(AstValueFactory* ast_value_factory,
|
| Expression* key, Expression* value,
|
| - bool is_static,
|
| bool is_computed_name)
|
| - : key_(key),
|
| - value_(value),
|
| - emit_store_(true),
|
| - is_static_(is_static),
|
| - is_computed_name_(is_computed_name) {
|
| + : LiteralProperty(key, value, is_computed_name), emit_store_(true) {
|
| if (!is_computed_name &&
|
| key->AsLiteral()->raw_value()->EqualsString(
|
| ast_value_factory->proto_string())) {
|
| @@ -357,13 +346,20 @@ ObjectLiteralProperty::ObjectLiteralProperty(AstValueFactory* ast_value_factory,
|
| }
|
| }
|
|
|
| -bool ObjectLiteralProperty::NeedsSetFunctionName() const {
|
| +bool LiteralProperty::NeedsSetFunctionName() const {
|
| return is_computed_name_ &&
|
| (value_->IsAnonymousFunctionDefinition() ||
|
| (value_->IsFunctionLiteral() &&
|
| IsConciseMethod(value_->AsFunctionLiteral()->kind())));
|
| }
|
|
|
| +ClassLiteralProperty::ClassLiteralProperty(Expression* key, Expression* value,
|
| + Kind kind, bool is_static,
|
| + bool is_computed_name)
|
| + : LiteralProperty(key, value, is_computed_name),
|
| + kind_(kind),
|
| + is_static_(is_static) {}
|
| +
|
| void ClassLiteral::AssignFeedbackVectorSlots(Isolate* isolate,
|
| FeedbackVectorSpec* spec,
|
| FeedbackVectorSlotCache* cache) {
|
| @@ -375,7 +371,7 @@ void ClassLiteral::AssignFeedbackVectorSlots(Isolate* isolate,
|
| }
|
|
|
| for (int i = 0; i < properties()->length(); i++) {
|
| - ObjectLiteral::Property* property = properties()->at(i);
|
| + ClassLiteral::Property* property = properties()->at(i);
|
| Expression* value = property->value();
|
| if (FunctionLiteral::NeedsHomeObject(value)) {
|
| property->SetSlot(spec->AddStoreICSlot());
|
| @@ -383,8 +379,7 @@ void ClassLiteral::AssignFeedbackVectorSlots(Isolate* isolate,
|
| }
|
| }
|
|
|
| -
|
| -bool ObjectLiteral::Property::IsCompileTimeValue() {
|
| +bool ObjectLiteral::Property::IsCompileTimeValue() const {
|
| return kind_ == CONSTANT ||
|
| (kind_ == MATERIALIZED_LITERAL &&
|
| CompileTimeValue::IsCompileTimeValue(value_));
|
| @@ -395,11 +390,7 @@ void ObjectLiteral::Property::set_emit_store(bool emit_store) {
|
| emit_store_ = emit_store;
|
| }
|
|
|
| -
|
| -bool ObjectLiteral::Property::emit_store() {
|
| - return emit_store_;
|
| -}
|
| -
|
| +bool ObjectLiteral::Property::emit_store() const { return emit_store_; }
|
|
|
| void ObjectLiteral::AssignFeedbackVectorSlots(Isolate* isolate,
|
| FeedbackVectorSpec* spec,
|
|
|