| Index: src/ia32/codegen-ia32.cc
|
| ===================================================================
|
| --- src/ia32/codegen-ia32.cc (revision 5833)
|
| +++ src/ia32/codegen-ia32.cc (working copy)
|
| @@ -6294,6 +6294,18 @@
|
| // Push the receiver onto the frame.
|
| Load(property->obj());
|
|
|
| + // Load the name of the function.
|
| + Load(property->key());
|
| +
|
| + // Swap the name of the function and the receiver on the stack to follow
|
| + // the calling convention for call ICs.
|
| + Result key = frame_->Pop();
|
| + Result receiver = frame_->Pop();
|
| + frame_->Push(&key);
|
| + frame_->Push(&receiver);
|
| + key.Unuse();
|
| + receiver.Unuse();
|
| +
|
| // Load the arguments.
|
| int arg_count = args->length();
|
| for (int i = 0; i < arg_count; i++) {
|
| @@ -6301,15 +6313,14 @@
|
| frame_->SpillTop();
|
| }
|
|
|
| - // Load the name of the function.
|
| - Load(property->key());
|
| -
|
| - // Call the IC initialization code.
|
| + // Place the key on top of stack and call the IC initialization code.
|
| + frame_->PushElementAt(arg_count + 1);
|
| CodeForSourcePosition(node->position());
|
| Result result =
|
| frame_->CallKeyedCallIC(RelocInfo::CODE_TARGET,
|
| arg_count,
|
| loop_nesting());
|
| + frame_->Drop(); // Drop the key still on the stack.
|
| frame_->RestoreContextRegister();
|
| frame_->Push(&result);
|
| }
|
|
|