| Index: src/codegen-ia32.cc
|
| ===================================================================
|
| --- src/codegen-ia32.cc (revision 751)
|
| +++ src/codegen-ia32.cc (working copy)
|
| @@ -197,6 +197,10 @@
|
| VirtualFrame virtual_frame(this);
|
| frame_ = &virtual_frame;
|
| cc_reg_ = no_condition;
|
| +
|
| + // Adjust for function-level loop nesting.
|
| + loop_nesting_ += fun->loop_nesting();
|
| +
|
| {
|
| CodeGenState state(this);
|
|
|
| @@ -383,11 +387,15 @@
|
| }
|
| }
|
|
|
| + // Adjust for function-level loop nesting.
|
| + loop_nesting_ -= fun->loop_nesting();
|
| +
|
| // Code generation state must be reset.
|
| scope_ = NULL;
|
| frame_ = NULL;
|
| ASSERT(!has_cc());
|
| ASSERT(state_ == NULL);
|
| + ASSERT(loop_nesting() == 0);
|
| }
|
|
|
|
|
| @@ -2694,14 +2702,15 @@
|
| // patch the stack to use the global proxy as 'this' in the
|
| // invoked function.
|
| LoadGlobal();
|
| -
|
| // Load the arguments.
|
| for (int i = 0; i < args->length(); i++) {
|
| Load(args->at(i));
|
| }
|
|
|
| // Setup the receiver register and call the IC initialization code.
|
| - Handle<Code> stub = ComputeCallInitialize(args->length());
|
| + Handle<Code> stub = (loop_nesting() > 0)
|
| + ? ComputeCallInitializeInLoop(args->length())
|
| + : ComputeCallInitialize(args->length());
|
| __ RecordPosition(node->position());
|
| __ call(stub, RelocInfo::CODE_TARGET_CONTEXT);
|
| __ mov(esi, frame_->Context());
|
| @@ -2745,7 +2754,9 @@
|
| for (int i = 0; i < args->length(); i++) Load(args->at(i));
|
|
|
| // Call the IC initialization code.
|
| - Handle<Code> stub = ComputeCallInitialize(args->length());
|
| + Handle<Code> stub = (loop_nesting() > 0)
|
| + ? ComputeCallInitializeInLoop(args->length())
|
| + : ComputeCallInitialize(args->length());
|
| __ RecordPosition(node->position());
|
| __ call(stub, RelocInfo::CODE_TARGET);
|
| __ mov(esi, frame_->Context());
|
|
|