Index: src/arm/codegen-arm.cc |
=================================================================== |
--- src/arm/codegen-arm.cc (revision 3596) |
+++ src/arm/codegen-arm.cc (working copy) |
@@ -247,25 +247,25 @@ |
// initialization because the arguments object may be stored in the |
// context. |
if (scope_->arguments() != NULL) { |
- ASSERT(scope_->arguments_shadow() != NULL); |
Comment cmnt(masm_, "[ allocate arguments object"); |
- { Reference shadow_ref(this, scope_->arguments_shadow()); |
- { Reference arguments_ref(this, scope_->arguments()); |
- ArgumentsAccessStub stub(ArgumentsAccessStub::NEW_OBJECT); |
- __ ldr(r2, frame_->Function()); |
- // The receiver is below the arguments, the return address, |
- // and the frame pointer on the stack. |
- const int kReceiverDisplacement = 2 + scope_->num_parameters(); |
- __ add(r1, fp, Operand(kReceiverDisplacement * kPointerSize)); |
- __ mov(r0, Operand(Smi::FromInt(scope_->num_parameters()))); |
- frame_->Adjust(3); |
- __ stm(db_w, sp, r0.bit() | r1.bit() | r2.bit()); |
- frame_->CallStub(&stub, 3); |
- frame_->EmitPush(r0); |
- arguments_ref.SetValue(NOT_CONST_INIT); |
- } |
- shadow_ref.SetValue(NOT_CONST_INIT); |
- } |
+ ASSERT(scope_->arguments_shadow() != NULL); |
+ Variable* arguments = scope_->arguments()->var(); |
+ Variable* shadow = scope_->arguments_shadow()->var(); |
+ ASSERT(arguments != NULL && arguments->slot() != NULL); |
+ ASSERT(shadow != NULL && shadow->slot() != NULL); |
+ ArgumentsAccessStub stub(ArgumentsAccessStub::NEW_OBJECT); |
+ __ ldr(r2, frame_->Function()); |
+ // The receiver is below the arguments, the return address, and the |
+ // frame pointer on the stack. |
+ const int kReceiverDisplacement = 2 + scope_->num_parameters(); |
+ __ add(r1, fp, Operand(kReceiverDisplacement * kPointerSize)); |
+ __ mov(r0, Operand(Smi::FromInt(scope_->num_parameters()))); |
+ frame_->Adjust(3); |
+ __ stm(db_w, sp, r0.bit() | r1.bit() | r2.bit()); |
+ frame_->CallStub(&stub, 3); |
+ frame_->EmitPush(r0); |
+ StoreToSlot(arguments->slot(), NOT_CONST_INIT); |
+ StoreToSlot(shadow->slot(), NOT_CONST_INIT); |
frame_->Drop(); // Value is no longer needed. |
} |
@@ -1992,13 +1992,9 @@ |
frame_->EmitPush(r0); |
// Store the caught exception in the catch variable. |
- { Reference ref(this, node->catch_var()); |
- ASSERT(ref.is_slot()); |
- // Here we make use of the convenient property that it doesn't matter |
- // whether a value is immediately on top of or underneath a zero-sized |
- // reference. |
- ref.SetValue(NOT_CONST_INIT); |
- } |
+ Variable* catch_var = node->catch_var()->var(); |
+ ASSERT(catch_var != NULL && catch_var->slot() != NULL); |
+ StoreToSlot(catch_var->slot(), NOT_CONST_INIT); |
// Remove the exception from the stack. |
frame_->Drop(); |