Index: src/builtins-ia32.cc |
=================================================================== |
--- src/builtins-ia32.cc (revision 1658) |
+++ src/builtins-ia32.cc (working copy) |
@@ -54,9 +54,16 @@ |
// -- edi: constructor function |
// ----------------------------------- |
+ Label non_function_call; |
+ // Check that function is not a Smi. |
+ __ test(edi, Immediate(kSmiTagMask)); |
+ __ j(zero, &non_function_call); |
+ // Check that function is a JSFunction |
+ __ CmpObjectType(edi, JS_FUNCTION_TYPE, ecx); |
+ __ j(not_equal, &non_function_call); |
+ |
// Enter a construct frame. |
__ EnterConstructFrame(); |
- |
// Store a smi-tagged arguments count on the stack. |
__ shl(eax, kSmiTagSize); |
__ push(eax); |
@@ -73,12 +80,6 @@ |
ExternalReference::debug_step_in_fp_address(); |
__ cmp(Operand::StaticVariable(debug_step_in_fp), Immediate(0)); |
__ j(not_equal, &rt_call); |
- // Check that function is not a Smi. |
- __ test(edi, Immediate(kSmiTagMask)); |
- __ j(zero, &rt_call); |
- // Check that function is a JSFunction |
- __ CmpObjectType(edi, JS_FUNCTION_TYPE, eax); |
- __ j(not_equal, &rt_call); |
// Verified that the constructor is a JSFunction. |
// Load the initial map and verify that it is in fact a map. |
@@ -300,6 +301,15 @@ |
__ lea(esp, Operand(esp, ebx, times_2, 1 * kPointerSize)); // 1 ~ receiver |
__ push(ecx); |
__ ret(0); |
+ |
+ // edi: called object |
+ // eax: number of arguments |
+ __ bind(&non_function_call); |
+ |
+ __ xor_(ebx, Operand(ebx)); |
Mads Ager (chromium)
2009/04/28 10:50:15
Add a comment that this is setting the arguments c
Kevin Millikin (Chromium)
2009/04/28 11:48:43
Setting the expected number of arguments (not chan
|
+ __ GetBuiltinEntry(edx, Builtins::CALL_NON_FUNCTION); |
+ __ jmp(Handle<Code>(builtin(ArgumentsAdaptorTrampoline)), |
+ RelocInfo::CODE_TARGET); |
} |