| Index: src/x64/codegen-x64.cc
 | 
| ===================================================================
 | 
| --- src/x64/codegen-x64.cc	(revision 5712)
 | 
| +++ src/x64/codegen-x64.cc	(working copy)
 | 
| @@ -4866,6 +4866,11 @@
 | 
|    }
 | 
|    frame_->Push(&clone);
 | 
|  
 | 
| +  // Mark all computed expressions that are bound to a key that
 | 
| +  // is shadowed by a later occurrence of the same key. For the
 | 
| +  // marked expressions, no store code is emitted.
 | 
| +  node->CalculateEmitStore();
 | 
| +
 | 
|    for (int i = 0; i < node->properties()->length(); i++) {
 | 
|      ObjectLiteral::Property* property = node->properties()->at(i);
 | 
|      switch (property->kind()) {
 | 
| @@ -4880,13 +4885,17 @@
 | 
|            // Duplicate the object as the IC receiver.
 | 
|            frame_->Dup();
 | 
|            Load(property->value());
 | 
| -          Result ignored =
 | 
| -              frame_->CallStoreIC(Handle<String>::cast(key), false);
 | 
| -          // A test rax instruction following the store IC call would
 | 
| -          // indicate the presence of an inlined version of the
 | 
| -          // store. Add a nop to indicate that there is no such
 | 
| -          // inlined version.
 | 
| -          __ nop();
 | 
| +          if (property->emit_store()) {
 | 
| +            Result ignored =
 | 
| +                frame_->CallStoreIC(Handle<String>::cast(key), false);
 | 
| +            // A test rax instruction following the store IC call would
 | 
| +            // indicate the presence of an inlined version of the
 | 
| +            // store. Add a nop to indicate that there is no such
 | 
| +            // inlined version.
 | 
| +            __ nop();
 | 
| +          } else {
 | 
| +            frame_->Drop(2);
 | 
| +          }
 | 
|            break;
 | 
|          }
 | 
|          // Fall through
 | 
| @@ -4896,8 +4905,12 @@
 | 
|          frame_->Dup();
 | 
|          Load(property->key());
 | 
|          Load(property->value());
 | 
| -        Result ignored = frame_->CallRuntime(Runtime::kSetProperty, 3);
 | 
| -        // Ignore the result.
 | 
| +        if (property->emit_store()) {
 | 
| +          // Ignore the result.
 | 
| +          Result ignored = frame_->CallRuntime(Runtime::kSetProperty, 3);
 | 
| +        } else {
 | 
| +          frame_->Drop(3);
 | 
| +        }
 | 
|          break;
 | 
|        }
 | 
|        case ObjectLiteral::Property::SETTER: {
 | 
| 
 |