Index: src/builtins-ia32.cc |
=================================================================== |
--- src/builtins-ia32.cc (revision 311) |
+++ src/builtins-ia32.cc (working copy) |
@@ -40,12 +40,21 @@ |
void Builtins::Generate_Adaptor(MacroAssembler* masm, |
int argc, |
CFunctionId id) { |
- // argc is the number of arguments excluding the receiver. |
- // JumpToBuiltin expects eax to contain the number of arguments |
- // including the receiver. |
- __ mov(eax, argc + 1); |
- __ mov(Operand::StaticVariable(ExternalReference::builtin_passed_function()), |
- edi); |
+ // TODO(1238487): Don't pass the function in a static variable. |
+ ExternalReference passed = ExternalReference::builtin_passed_function(); |
+ __ mov(Operand::StaticVariable(passed), edi); |
+ |
+ if (argc == -1) { |
+ // The actual argument count has already been loaded into register |
+ // eax, but JumpToBuiltin expects eax to contain the number of |
+ // arguments including the receiver. |
+ __ inc(eax); |
+ } else { |
+ // The number passed in argc excludes the receiver, but |
+ // JumpToBuiltin expects eax to contain the number of arguments |
+ // including the receiver. |
+ __ mov(eax, argc + 1); |
+ } |
__ JumpToBuiltin(ExternalReference(id)); |
} |