Index: src/ia32/code-stubs-ia32.cc |
diff --git a/src/ia32/code-stubs-ia32.cc b/src/ia32/code-stubs-ia32.cc |
index dc3f50f5b4d8a19c349e2e543b0fbfa34e93d5b3..fe65f1576929b2beec7ca6c9921e6db1ebbe6ade 100644 |
--- a/src/ia32/code-stubs-ia32.cc |
+++ b/src/ia32/code-stubs-ia32.cc |
@@ -5664,50 +5664,38 @@ |
void CallApiGetterStub::Generate(MacroAssembler* masm) { |
// ----------- S t a t e ------------- |
- // -- esp[0] : return address |
- // -- esp[4] : name |
- // -- esp[8 .. (8 + kArgsLength*4)] : v8::PropertyCallbackInfo::args_ |
+ // -- esp[0] : return address |
+ // -- esp[4] : name |
+ // -- esp[8 - kArgsLength*4] : PropertyCallbackArguments object |
// -- ... |
- // -- edx : api_function_address |
+ // -- edx : api_function_address |
// ----------------------------------- |
DCHECK(edx.is(ApiGetterDescriptor::function_address())); |
- // v8::PropertyCallbackInfo::args_ array and name handle. |
- const int kStackUnwindSpace = PropertyCallbackArguments::kArgsLength + 1; |
- |
- // Allocate v8::PropertyCallbackInfo object, arguments for callback and |
- // space for optional callback address parameter (in case CPU profiler is |
- // active) in non-GCed stack space. |
- const int kApiArgc = 3 + 1; |
+ // array for v8::Arguments::values_, handler for name and pointer |
+ // to the values (it considered as smi in GC). |
+ const int kStackSpace = PropertyCallbackArguments::kArgsLength + 2; |
+ // Allocate space for opional callback address parameter in case |
+ // CPU profiler is active. |
+ const int kApiArgc = 2 + 1; |
Register api_function_address = edx; |
Register scratch = ebx; |
- // Load address of v8::PropertyAccessorInfo::args_ array. |
- __ lea(scratch, Operand(esp, 2 * kPointerSize)); |
+ // load address of name |
+ __ lea(scratch, Operand(esp, 1 * kPointerSize)); |
PrepareCallApiFunction(masm, kApiArgc); |
- // Create v8::PropertyCallbackInfo object on the stack and initialize |
- // it's args_ field. |
- Operand info_object = ApiParameterOperand(3); |
- __ mov(info_object, scratch); |
- |
- __ sub(scratch, Immediate(kPointerSize)); |
__ mov(ApiParameterOperand(0), scratch); // name. |
- __ lea(scratch, info_object); |
+ __ add(scratch, Immediate(kPointerSize)); |
__ mov(ApiParameterOperand(1), scratch); // arguments pointer. |
- // Reserve space for optional callback address parameter. |
- Operand thunk_last_arg = ApiParameterOperand(2); |
ExternalReference thunk_ref = |
ExternalReference::invoke_accessor_getter_callback(isolate()); |
- // +3 is to skip prolog, return address and name handle. |
- Operand return_value_operand( |
- ebp, (PropertyCallbackArguments::kReturnValueOffset + 3) * kPointerSize); |
CallApiFunctionAndReturn(masm, api_function_address, thunk_ref, |
- thunk_last_arg, kStackUnwindSpace, nullptr, |
- return_value_operand, NULL); |
+ ApiParameterOperand(2), kStackSpace, nullptr, |
+ Operand(ebp, 7 * kPointerSize), NULL); |
} |