| 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));
|
| }
|
|
|
|
|