| Index: src/arm/codegen-arm.cc
 | 
| ===================================================================
 | 
| --- src/arm/codegen-arm.cc	(revision 5712)
 | 
| +++ src/arm/codegen-arm.cc	(working copy)
 | 
| @@ -3596,6 +3596,12 @@
 | 
|      frame_->CallRuntime(Runtime::kCreateObjectLiteralShallow, 4);
 | 
|    }
 | 
|    frame_->EmitPush(r0);  // save the result
 | 
| +
 | 
| +  // 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++) {
 | 
|      // At the start of each iteration, the top of stack contains
 | 
|      // the newly created object literal.
 | 
| @@ -3612,11 +3618,15 @@
 | 
|          if (key->handle()->IsSymbol()) {
 | 
|            Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Initialize));
 | 
|            Load(value);
 | 
| -          frame_->PopToR0();
 | 
| -          // Fetch the object literal.
 | 
| -          frame_->SpillAllButCopyTOSToR1();
 | 
| -          __ mov(r2, Operand(key->handle()));
 | 
| -          frame_->CallCodeObject(ic, RelocInfo::CODE_TARGET, 0);
 | 
| +          if (property->emit_store()) {
 | 
| +            frame_->PopToR0();
 | 
| +            // Fetch the object literal.
 | 
| +            frame_->SpillAllButCopyTOSToR1();
 | 
| +            __ mov(r2, Operand(key->handle()));
 | 
| +            frame_->CallCodeObject(ic, RelocInfo::CODE_TARGET, 0);
 | 
| +          } else {
 | 
| +            frame_->Drop();
 | 
| +          }
 | 
|            break;
 | 
|          }
 | 
|          // else fall through
 | 
| @@ -3624,7 +3634,11 @@
 | 
|          frame_->Dup();
 | 
|          Load(key);
 | 
|          Load(value);
 | 
| -        frame_->CallRuntime(Runtime::kSetProperty, 3);
 | 
| +        if (property->emit_store()) {
 | 
| +          frame_->CallRuntime(Runtime::kSetProperty, 3);
 | 
| +        } else {
 | 
| +          frame_->Drop(3);
 | 
| +        }
 | 
|          break;
 | 
|        }
 | 
|        case ObjectLiteral::Property::SETTER: {
 | 
| 
 |