| Index: src/arm/codegen-arm.cc
|
| ===================================================================
|
| --- src/arm/codegen-arm.cc (revision 4554)
|
| +++ src/arm/codegen-arm.cc (working copy)
|
| @@ -1563,12 +1563,11 @@
|
|
|
|
|
| void CodeGenerator::DeclareGlobals(Handle<FixedArray> pairs) {
|
| - VirtualFrame::SpilledScope spilled_scope(frame_);
|
| frame_->EmitPush(cp);
|
| - __ mov(r0, Operand(pairs));
|
| - frame_->EmitPush(r0);
|
| - __ mov(r0, Operand(Smi::FromInt(is_eval() ? 1 : 0)));
|
| - frame_->EmitPush(r0);
|
| + frame_->EmitPush(Operand(pairs));
|
| + frame_->EmitPush(Operand(Smi::FromInt(is_eval() ? 1 : 0)));
|
| +
|
| + VirtualFrame::SpilledScope spilled_scope(frame_);
|
| frame_->CallRuntime(Runtime::kDeclareGlobals, 3);
|
| // The result is discarded.
|
| }
|
| @@ -1578,7 +1577,6 @@
|
| #ifdef DEBUG
|
| int original_height = frame_->height();
|
| #endif
|
| - VirtualFrame::SpilledScope spilled_scope(frame_);
|
| Comment cmnt(masm_, "[ Declaration");
|
| Variable* var = node->proxy()->var();
|
| ASSERT(var != NULL); // must have been resolved
|
| @@ -1593,28 +1591,27 @@
|
| ASSERT(var->is_dynamic());
|
| // For now, just do a runtime call.
|
| frame_->EmitPush(cp);
|
| - __ mov(r0, Operand(var->name()));
|
| - frame_->EmitPush(r0);
|
| + frame_->EmitPush(Operand(var->name()));
|
| // Declaration nodes are always declared in only two modes.
|
| ASSERT(node->mode() == Variable::VAR || node->mode() == Variable::CONST);
|
| PropertyAttributes attr = node->mode() == Variable::VAR ? NONE : READ_ONLY;
|
| - __ mov(r0, Operand(Smi::FromInt(attr)));
|
| - frame_->EmitPush(r0);
|
| + frame_->EmitPush(Operand(Smi::FromInt(attr)));
|
| // Push initial value, if any.
|
| // Note: For variables we must not push an initial value (such as
|
| // 'undefined') because we may have a (legal) redeclaration and we
|
| // must not destroy the current value.
|
| if (node->mode() == Variable::CONST) {
|
| - __ LoadRoot(r0, Heap::kTheHoleValueRootIndex);
|
| - frame_->EmitPush(r0);
|
| + frame_->EmitPushRoot(Heap::kTheHoleValueRootIndex);
|
| } else if (node->fun() != NULL) {
|
| - LoadAndSpill(node->fun());
|
| + Load(node->fun());
|
| } else {
|
| - __ mov(r0, Operand(0)); // no initial value!
|
| - frame_->EmitPush(r0);
|
| + frame_->EmitPush(Operand(0));
|
| }
|
| +
|
| + VirtualFrame::SpilledScope spilled_scope(frame_);
|
| frame_->CallRuntime(Runtime::kDeclareContextSlot, 4);
|
| // Ignore the return value (declarations are statements).
|
| +
|
| ASSERT(frame_->height() == original_height);
|
| return;
|
| }
|
| @@ -1630,12 +1627,11 @@
|
| }
|
|
|
| if (val != NULL) {
|
| - {
|
| - // Set initial value.
|
| - Reference target(this, node->proxy());
|
| - LoadAndSpill(val);
|
| - target.SetValue(NOT_CONST_INIT);
|
| - }
|
| + // Set initial value.
|
| + Reference target(this, node->proxy());
|
| + Load(val);
|
| + target.SetValue(NOT_CONST_INIT);
|
| +
|
| // Get rid of the assigned value (declarations are statements).
|
| frame_->Drop();
|
| }
|
|
|