Revision: 16675
Author: [email protected]
Date: Thu Sep 12 10:03:56 2013 UTC
Log: Revert "Refactoring PropertyCallbackInfo & FunctionCallbackInfo,
step 1."
[email protected]
Review URL: https://codereview.chromium.org/23431019
http://code.google.com/p/v8/source/detail?r=16675
Modified:
/branches/bleeding_edge/include/v8.h
/branches/bleeding_edge/src/arguments.h
/branches/bleeding_edge/src/arm/stub-cache-arm.cc
/branches/bleeding_edge/src/ia32/stub-cache-ia32.cc
/branches/bleeding_edge/src/stub-cache.cc
/branches/bleeding_edge/src/stub-cache.h
/branches/bleeding_edge/src/x64/stub-cache-x64.cc
=======================================
--- /branches/bleeding_edge/include/v8.h Thu Sep 12 09:09:39 2013 UTC
+++ /branches/bleeding_edge/include/v8.h Thu Sep 12 10:03:56 2013 UTC
@@ -2407,11 +2407,11 @@
friend class internal::PropertyCallbackArguments;
friend class internal::CustomArguments<PropertyCallbackInfo>;
static const int kThisIndex = 0;
- static const int kDataIndex = -1;
- static const int kReturnValueIndex = -2;
- static const int kReturnValueDefaultValueIndex = -3;
- static const int kIsolateIndex = -4;
- static const int kHolderIndex = -5;
+ static const int kHolderIndex = -1;
+ static const int kDataIndex = -2;
+ static const int kReturnValueIndex = -3;
+ static const int kReturnValueDefaultValueIndex = -4;
+ static const int kIsolateIndex = -5;
V8_INLINE PropertyCallbackInfo(internal::Object** args) : args_(args) {}
internal::Object** args_;
=======================================
--- /branches/bleeding_edge/src/arguments.h Thu Sep 12 09:09:39 2013 UTC
+++ /branches/bleeding_edge/src/arguments.h Thu Sep 12 10:03:56 2013 UTC
@@ -175,10 +175,6 @@
static const int kArgsLength = T::kArgsLength;
static const int kThisIndex = T::kThisIndex;
static const int kHolderIndex = T::kHolderIndex;
- static const int kDataIndex = T::kDataIndex;
- static const int kReturnValueDefaultValueIndex =
- T::kReturnValueDefaultValueIndex;
- static const int kIsolateIndex = T::kIsolateIndex;
PropertyCallbackArguments(Isolate* isolate,
Object* data,
=======================================
--- /branches/bleeding_edge/src/arm/stub-cache-arm.cc Thu Sep 12 09:09:39
2013 UTC
+++ /branches/bleeding_edge/src/arm/stub-cache-arm.cc Thu Sep 12 10:03:56
2013 UTC
@@ -785,11 +785,6 @@
Register holder,
Register name,
Handle<JSObject> holder_obj) {
- STATIC_ASSERT(StubCache::kInterceptorArgsNameIndex == 0);
- STATIC_ASSERT(StubCache::kInterceptorArgsInfoIndex == 1);
- STATIC_ASSERT(StubCache::kInterceptorArgsThisIndex == 2);
- STATIC_ASSERT(StubCache::kInterceptorArgsHolderIndex == 3);
- STATIC_ASSERT(StubCache::kInterceptorArgsLength == 4);
__ push(name);
Handle<InterceptorInfo> interceptor(holder_obj->GetNamedInterceptor());
ASSERT(!masm->isolate()->heap()->InNewSpace(*interceptor));
@@ -798,6 +793,10 @@
__ push(scratch);
__ push(receiver);
__ push(holder);
+ __ ldr(scratch, FieldMemOperand(scratch, InterceptorInfo::kDataOffset));
+ __ push(scratch);
+ __ mov(scratch,
Operand(ExternalReference::isolate_address(masm->isolate())));
+ __ push(scratch);
}
@@ -812,7 +811,7 @@
ExternalReference ref =
ExternalReference(IC_Utility(IC::kLoadPropertyWithInterceptorOnly),
masm->isolate());
- __ mov(r0, Operand(StubCache::kInterceptorArgsLength));
+ __ mov(r0, Operand(6));
__ mov(r1, Operand(ref));
CEntryStub stub(1);
@@ -1111,7 +1110,7 @@
__ CallExternalReference(
ExternalReference(IC_Utility(IC::kLoadPropertyWithInterceptorForCall),
masm->isolate()),
- StubCache::kInterceptorArgsLength);
+ 6);
// Restore the name_ register.
__ pop(name_);
// Leave the internal frame.
@@ -1421,12 +1420,6 @@
Handle<ExecutableAccessorInfo> callback) {
// Build AccessorInfo::args_ list on the stack and push property name
below
// the exit frame to make GC aware of them and store pointers to them.
- STATIC_ASSERT(PropertyCallbackArguments::kThisIndex == 0);
- STATIC_ASSERT(PropertyCallbackArguments::kDataIndex == -1);
- STATIC_ASSERT(PropertyCallbackArguments::kReturnValueOffset == -2);
- STATIC_ASSERT(PropertyCallbackArguments::kReturnValueDefaultValueIndex
== -3);
- STATIC_ASSERT(PropertyCallbackArguments::kIsolateIndex == -4);
- STATIC_ASSERT(PropertyCallbackArguments::kHolderIndex == -5);
__ push(receiver());
__ mov(scratch2(), sp); // scratch2 = AccessorInfo::args_
if (heap()->InNewSpace(callback->data())) {
@@ -1436,13 +1429,13 @@
} else {
__ Move(scratch3(), Handle<Object>(callback->data(), isolate()));
}
- __ push(scratch3());
+ __ Push(reg, scratch3());
__ LoadRoot(scratch3(), Heap::kUndefinedValueRootIndex);
__ mov(scratch4(), scratch3());
__ Push(scratch3(), scratch4());
__ mov(scratch4(),
Operand(ExternalReference::isolate_address(isolate())));
- __ Push(scratch4(), reg, name());
+ __ Push(scratch4(), name());
__ mov(r0, sp); // r0 = Handle<Name>
const int kApiStackSpace = 1;
@@ -1472,7 +1465,7 @@
thunk_ref,
r2,
kStackUnwindSpace,
- 6);
+ 5);
}
@@ -1560,7 +1553,7 @@
ExternalReference ref =
ExternalReference(IC_Utility(IC::kLoadPropertyWithInterceptorForLoad),
isolate());
- __ TailCallExternalReference(ref, StubCache::kInterceptorArgsLength,
1);
+ __ TailCallExternalReference(ref, 6, 1);
}
}
=======================================
--- /branches/bleeding_edge/src/ia32/stub-cache-ia32.cc Thu Sep 12 09:09:39
2013 UTC
+++ /branches/bleeding_edge/src/ia32/stub-cache-ia32.cc Thu Sep 12 10:03:56
2013 UTC
@@ -392,11 +392,6 @@
Register holder,
Register name,
Handle<JSObject> holder_obj) {
- STATIC_ASSERT(StubCache::kInterceptorArgsNameIndex == 0);
- STATIC_ASSERT(StubCache::kInterceptorArgsInfoIndex == 1);
- STATIC_ASSERT(StubCache::kInterceptorArgsThisIndex == 2);
- STATIC_ASSERT(StubCache::kInterceptorArgsHolderIndex == 3);
- STATIC_ASSERT(StubCache::kInterceptorArgsLength == 4);
__ push(name);
Handle<InterceptorInfo> interceptor(holder_obj->GetNamedInterceptor());
ASSERT(!masm->isolate()->heap()->InNewSpace(*interceptor));
@@ -405,6 +400,8 @@
__ push(scratch);
__ push(receiver);
__ push(holder);
+ __ push(FieldOperand(scratch, InterceptorInfo::kDataOffset));
+ __ push(Immediate(reinterpret_cast<int>(masm->isolate())));
}
@@ -418,7 +415,7 @@
__ CallExternalReference(
ExternalReference(IC_Utility(IC::kLoadPropertyWithInterceptorOnly),
masm->isolate()),
- StubCache::kInterceptorArgsLength);
+ 6);
}
@@ -736,7 +733,7 @@
__ CallExternalReference(
ExternalReference(IC_Utility(IC::kLoadPropertyWithInterceptorForCall),
masm->isolate()),
- StubCache::kInterceptorArgsLength);
+ 6);
// Restore the name_ register.
__ pop(name_);
@@ -1404,18 +1401,12 @@
ASSERT(!scratch3().is(reg));
__ pop(scratch3()); // Get return address to place it below.
- STATIC_ASSERT(PropertyCallbackArguments::kThisIndex == 0);
- STATIC_ASSERT(PropertyCallbackArguments::kDataIndex == -1);
- STATIC_ASSERT(PropertyCallbackArguments::kReturnValueOffset == -2);
- STATIC_ASSERT(PropertyCallbackArguments::kReturnValueDefaultValueIndex
== -3);
- STATIC_ASSERT(PropertyCallbackArguments::kIsolateIndex == -4);
- STATIC_ASSERT(PropertyCallbackArguments::kHolderIndex == -5);
__ push(receiver()); // receiver
__ mov(scratch2(), esp);
ASSERT(!scratch2().is(reg));
+ __ push(reg); // holder
// Push data from ExecutableAccessorInfo.
if (isolate()->heap()->InNewSpace(callback->data())) {
- ASSERT(!scratch1().is(reg));
__ mov(scratch1(), Immediate(callback));
__ push(FieldOperand(scratch1(), ExecutableAccessorInfo::kDataOffset));
} else {
@@ -1425,7 +1416,6 @@
// ReturnValue default value
__ push(Immediate(isolate()->factory()->undefined_value()));
__ push(Immediate(reinterpret_cast<int>(isolate())));
- __ push(reg); // holder
// Save a pointer to where we pushed the arguments pointer. This will be
// passed as the const ExecutableAccessorInfo& to the C++ callback.
@@ -1460,7 +1450,7 @@
thunk_address,
ApiParameterOperand(2),
kStackSpace,
- 7);
+ 6);
}
@@ -1567,7 +1557,7 @@
ExternalReference ref =
ExternalReference(IC_Utility(IC::kLoadPropertyWithInterceptorForLoad),
isolate());
- __ TailCallExternalReference(ref, StubCache::kInterceptorArgsLength,
1);
+ __ TailCallExternalReference(ref, 6, 1);
}
}
=======================================
--- /branches/bleeding_edge/src/stub-cache.cc Thu Sep 12 09:09:39 2013 UTC
+++ /branches/bleeding_edge/src/stub-cache.cc Thu Sep 12 10:03:56 2013 UTC
@@ -1247,6 +1247,9 @@
RETURN_IF_SCHEDULED_EXCEPTION(isolate);
return *value;
}
+
+
+static const int kAccessorInfoOffsetInInterceptorArgs = 2;
/**
@@ -1257,11 +1260,13 @@
* provide any value for the given name.
*/
RUNTIME_FUNCTION(MaybeObject*, LoadPropertyWithInterceptorOnly) {
- ASSERT(args.length() == StubCache::kInterceptorArgsLength);
- Handle<Name> name_handle =
- args.at<Name>(StubCache::kInterceptorArgsNameIndex);
- Handle<InterceptorInfo> interceptor_info =
- args.at<InterceptorInfo>(StubCache::kInterceptorArgsInfoIndex);
+ typedef PropertyCallbackArguments PCA;
+ static const int kArgsOffset = kAccessorInfoOffsetInInterceptorArgs;
+ Handle<Name> name_handle = args.at<Name>(0);
+ Handle<InterceptorInfo> interceptor_info = args.at<InterceptorInfo>(1);
+ ASSERT(kArgsOffset == 2);
+ // No ReturnValue in interceptors.
+ ASSERT_EQ(kArgsOffset + PCA::kArgsLength - 2, args.length());
// TODO(rossberg): Support symbols in the API.
if (name_handle->IsSymbol())
@@ -1274,11 +1279,13 @@
ASSERT(getter != NULL);
Handle<JSObject> receiver =
- args.at<JSObject>(StubCache::kInterceptorArgsThisIndex);
+ args.at<JSObject>(kArgsOffset - PCA::kThisIndex);
Handle<JSObject> holder =
- args.at<JSObject>(StubCache::kInterceptorArgsHolderIndex);
- PropertyCallbackArguments callback_args(
- isolate, interceptor_info->data(), *receiver, *holder);
+ args.at<JSObject>(kArgsOffset - PCA::kHolderIndex);
+ PropertyCallbackArguments callback_args(isolate,
+ interceptor_info->data(),
+ *receiver,
+ *holder);
{
// Use the interceptor getter.
HandleScope scope(isolate);
@@ -1316,15 +1323,17 @@
static MaybeObject* LoadWithInterceptor(Arguments* args,
PropertyAttributes* attrs) {
- ASSERT(args->length() == StubCache::kInterceptorArgsLength);
- Handle<Name> name_handle =
- args->at<Name>(StubCache::kInterceptorArgsNameIndex);
- Handle<InterceptorInfo> interceptor_info =
- args->at<InterceptorInfo>(StubCache::kInterceptorArgsInfoIndex);
+ typedef PropertyCallbackArguments PCA;
+ static const int kArgsOffset = kAccessorInfoOffsetInInterceptorArgs;
+ Handle<Name> name_handle = args->at<Name>(0);
+ Handle<InterceptorInfo> interceptor_info = args->at<InterceptorInfo>(1);
+ ASSERT(kArgsOffset == 2);
+ // No ReturnValue in interceptors.
+ ASSERT_EQ(kArgsOffset + PCA::kArgsLength - 2, args->length());
Handle<JSObject> receiver_handle =
- args->at<JSObject>(StubCache::kInterceptorArgsThisIndex);
+ args->at<JSObject>(kArgsOffset - PCA::kThisIndex);
Handle<JSObject> holder_handle =
- args->at<JSObject>(StubCache::kInterceptorArgsHolderIndex);
+ args->at<JSObject>(kArgsOffset - PCA::kHolderIndex);
Isolate* isolate = receiver_handle->GetIsolate();
=======================================
--- /branches/bleeding_edge/src/stub-cache.h Thu Sep 12 09:09:39 2013 UTC
+++ /branches/bleeding_edge/src/stub-cache.h Thu Sep 12 10:03:56 2013 UTC
@@ -407,16 +407,6 @@
Isolate* isolate() { return isolate_; }
Heap* heap() { return isolate()->heap(); }
Factory* factory() { return isolate()->factory(); }
-
- // These constants describe the structure of the interceptor arguments
on the
- // stack. The arguments are pushed by the (platform-specific)
- // PushInterceptorArguments and read by LoadPropertyWithInterceptorOnly
and
- // LoadWithInterceptor.
- static const int kInterceptorArgsNameIndex = 0;
- static const int kInterceptorArgsInfoIndex = 1;
- static const int kInterceptorArgsThisIndex = 2;
- static const int kInterceptorArgsHolderIndex = 3;
- static const int kInterceptorArgsLength = 4;
private:
explicit StubCache(Isolate* isolate);
=======================================
--- /branches/bleeding_edge/src/x64/stub-cache-x64.cc Thu Sep 12 09:47:02
2013 UTC
+++ /branches/bleeding_edge/src/x64/stub-cache-x64.cc Thu Sep 12 10:03:56
2013 UTC
@@ -29,7 +29,6 @@
#if V8_TARGET_ARCH_X64
-#include "arguments.h"
#include "ic-inl.h"
#include "codegen.h"
#include "stub-cache.h"
@@ -367,11 +366,6 @@
Register holder,
Register name,
Handle<JSObject> holder_obj) {
- STATIC_ASSERT(StubCache::kInterceptorArgsNameIndex == 0);
- STATIC_ASSERT(StubCache::kInterceptorArgsInfoIndex == 1);
- STATIC_ASSERT(StubCache::kInterceptorArgsThisIndex == 2);
- STATIC_ASSERT(StubCache::kInterceptorArgsHolderIndex == 3);
- STATIC_ASSERT(StubCache::kInterceptorArgsLength == 4);
__ push(name);
Handle<InterceptorInfo> interceptor(holder_obj->GetNamedInterceptor());
ASSERT(!masm->isolate()->heap()->InNewSpace(*interceptor));
@@ -379,6 +373,8 @@
__ push(kScratchRegister);
__ push(receiver);
__ push(holder);
+ __ push(FieldOperand(kScratchRegister, InterceptorInfo::kDataOffset));
+ __ PushAddress(ExternalReference::isolate_address(masm->isolate()));
}
@@ -393,7 +389,7 @@
ExternalReference ref =
ExternalReference(IC_Utility(IC::kLoadPropertyWithInterceptorOnly),
masm->isolate());
- __ Set(rax, StubCache::kInterceptorArgsLength);
+ __ Set(rax, 6);
__ LoadAddress(rbx, ref);
CEntryStub stub(1);
@@ -723,7 +719,7 @@
__ CallExternalReference(
ExternalReference(IC_Utility(IC::kLoadPropertyWithInterceptorForCall),
masm->isolate()),
- StubCache::kInterceptorArgsLength);
+ 6);
// Restore the name_ register.
__ pop(name_);
@@ -1326,27 +1322,19 @@
ASSERT(!scratch4().is(reg));
__ PopReturnAddressTo(scratch4());
- STATIC_ASSERT(PropertyCallbackArguments::kThisIndex == 0);
- STATIC_ASSERT(PropertyCallbackArguments::kDataIndex == -1);
- STATIC_ASSERT(PropertyCallbackArguments::kReturnValueOffset == -2);
- STATIC_ASSERT(PropertyCallbackArguments::kReturnValueDefaultValueIndex
== -3);
- STATIC_ASSERT(PropertyCallbackArguments::kIsolateIndex == -4);
- STATIC_ASSERT(PropertyCallbackArguments::kHolderIndex == -5);
__ push(receiver()); // receiver
+ __ push(reg); // holder
if (heap()->InNewSpace(callback->data())) {
- ASSERT(!scratch1().is(reg));
__ Move(scratch1(), callback);
__ push(FieldOperand(scratch1(),
ExecutableAccessorInfo::kDataOffset)); // data
} else {
__ Push(Handle<Object>(callback->data(), isolate()));
}
- ASSERT(!kScratchRegister.is(reg));
__ LoadRoot(kScratchRegister, Heap::kUndefinedValueRootIndex);
__ push(kScratchRegister); // return value
__ push(kScratchRegister); // return value default
__ PushAddress(ExternalReference::isolate_address(isolate()));
- __ push(reg); // holder
__ push(name()); // name
// Save a pointer to where we pushed the arguments pointer. This will be
// passed as the const ExecutableAccessorInfo& to the C++ callback.
@@ -1390,7 +1378,7 @@
thunk_address,
getter_arg,
kStackSpace,
- 6);
+ 5);
}
@@ -1489,7 +1477,7 @@
ExternalReference ref = ExternalReference(
IC_Utility(IC::kLoadPropertyWithInterceptorForLoad), isolate());
- __ TailCallExternalReference(ref, StubCache::kInterceptorArgsLength,
1);
+ __ TailCallExternalReference(ref, 6, 1);
}
}
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.