| Index: src/compiler/ast-graph-builder.cc
|
| diff --git a/src/compiler/ast-graph-builder.cc b/src/compiler/ast-graph-builder.cc
|
| index 50216a766c074ec10c30872e6cf9f842288101ac..50e202939aa4cce386678a5e287d6d3a9ded9488 100644
|
| --- a/src/compiler/ast-graph-builder.cc
|
| +++ b/src/compiler/ast-graph-builder.cc
|
| @@ -1357,15 +1357,7 @@ void AstGraphBuilder::VisitClassLiteralContents(ClassLiteral* expr) {
|
| }
|
| }
|
|
|
| - // TODO(mstarzinger): This is temporary to make "super" work and replicates
|
| - // the existing FullCodeGenerator::NeedsHomeObject predicate.
|
| - if (FunctionLiteral::NeedsHomeObject(property->value())) {
|
| - Unique<Name> name =
|
| - MakeUnique(isolate()->factory()->home_object_symbol());
|
| - Node* store = NewNode(javascript()->StoreNamed(language_mode(), name),
|
| - value, receiver);
|
| - PrepareFrameState(store, BailoutId::None());
|
| - }
|
| + AddHomeObjectIfNeeded(property->value(), value, receiver);
|
| }
|
|
|
| // Transform both the class literal and the prototype to fast properties.
|
| @@ -1385,6 +1377,17 @@ void AstGraphBuilder::VisitClassLiteralContents(ClassLiteral* expr) {
|
| }
|
|
|
|
|
| +void AstGraphBuilder::AddHomeObjectIfNeeded(Expression* expr, Node* function,
|
| + Node* home_object) {
|
| + if (FunctionLiteral::NeedsHomeObject(expr)) {
|
| + Unique<Name> name = MakeUnique(isolate()->factory()->home_object_symbol());
|
| + Node* store = NewNode(javascript()->StoreNamed(language_mode(), name),
|
| + function, home_object);
|
| + PrepareFrameState(store, BailoutId::None());
|
| + }
|
| +}
|
| +
|
| +
|
| void AstGraphBuilder::VisitNativeFunctionLiteral(NativeFunctionLiteral* expr) {
|
| UNREACHABLE();
|
| }
|
| @@ -1486,6 +1489,8 @@ void AstGraphBuilder::VisitObjectLiteral(ObjectLiteral* expr) {
|
| NewNode(javascript()->StoreNamed(language_mode(), name),
|
| literal, value);
|
| PrepareFrameState(store, key->id());
|
| +
|
| + AddHomeObjectIfNeeded(property->value(), value, literal);
|
| } else {
|
| VisitForEffect(property->value());
|
| }
|
| @@ -1502,6 +1507,8 @@ void AstGraphBuilder::VisitObjectLiteral(ObjectLiteral* expr) {
|
| const Operator* op =
|
| javascript()->CallRuntime(Runtime::kSetProperty, 4);
|
| NewNode(op, receiver, key, value, language);
|
| +
|
| + AddHomeObjectIfNeeded(property->value(), value, receiver);
|
| }
|
| break;
|
| }
|
| @@ -1541,6 +1548,8 @@ void AstGraphBuilder::VisitObjectLiteral(ObjectLiteral* expr) {
|
| Node* setter = environment()->Pop();
|
| Node* getter = environment()->Pop();
|
| Node* name = environment()->Pop();
|
| + AddHomeObjectIfNeeded(it->second->getter, getter, literal);
|
| + AddHomeObjectIfNeeded(it->second->setter, setter, literal);
|
| Node* attr = jsgraph()->Constant(NONE);
|
| const Operator* op =
|
| javascript()->CallRuntime(Runtime::kDefineAccessorPropertyUnchecked, 5);
|
| @@ -1573,6 +1582,8 @@ void AstGraphBuilder::VisitObjectLiteral(ObjectLiteral* expr) {
|
| Node* key = environment()->Pop();
|
| Node* receiver = environment()->Pop();
|
|
|
| + AddHomeObjectIfNeeded(property->value(), value, receiver);
|
| +
|
| switch (property->kind()) {
|
| case ObjectLiteral::Property::CONSTANT:
|
| case ObjectLiteral::Property::COMPUTED:
|
|
|