Index: vm/intermediate_language_ia32.cc |
=================================================================== |
--- vm/intermediate_language_ia32.cc (revision 8752) |
+++ vm/intermediate_language_ia32.cc (working copy) |
@@ -568,14 +568,18 @@ |
// Push the result place holder initialized to NULL. |
__ PushObject(Object::ZoneHandle()); |
// Pass a pointer to the first argument in EAX. |
- if (!has_optional_parameters()) { |
- __ leal(EAX, Address(EBP, (1 + argument_count()) * kWordSize)); |
+ intptr_t arg_count = argument_count(); |
+ if (is_native_instance_closure()) { |
+ arg_count += 1; |
+ } |
+ if (!has_optional_parameters() && !is_native_instance_closure()) { |
+ __ leal(EAX, Address(EBP, (1 + arg_count) * kWordSize)); |
} else { |
__ leal(EAX, |
Address(EBP, ParsedFunction::kFirstLocalSlotIndex * kWordSize)); |
} |
__ movl(ECX, Immediate(reinterpret_cast<uword>(native_c_function()))); |
- __ movl(EDX, Immediate(argument_count())); |
+ __ movl(EDX, Immediate(arg_count)); |
compiler->GenerateCall(token_index(), |
try_index(), |
&StubCode::CallNativeCFunctionLabel(), |