Index: src/stub-cache.cc |
diff --git a/src/stub-cache.cc b/src/stub-cache.cc |
index f83a7d2a88f6eabbc472f65e6471416a01a5bbac..f3dbd64f147045e5a06b33f769c13d7f7b183179 100644 |
--- a/src/stub-cache.cc |
+++ b/src/stub-cache.cc |
@@ -1278,10 +1278,14 @@ RUNTIME_FUNCTION(MaybeObject*, LoadPropertyWithInterceptorOnly) { |
FUNCTION_CAST<v8::NamedPropertyGetterCallback>(getter_address); |
ASSERT(getter != NULL); |
- Handle<JSObject> receiver = |
- args.at<JSObject>(kArgsOffset - PCA::kThisIndex); |
- Handle<JSObject> holder = |
- args.at<JSObject>(kArgsOffset - PCA::kHolderIndex); |
+ int this_index = kArgsOffset - PCA::kThisIndex; |
+ int holder_index = kArgsOffset - PCA::kHolderIndex; |
+ if (PCA::kThisIndex < PCA::kReturnValueOffset) |
Michael Starzinger
2013/09/11 09:55:19
Instead of overlaying the indices used for the arg
marja
2013/09/11 16:35:32
Done.
|
+ this_index -= 2; |
+ if (PCA::kHolderIndex < PCA::kReturnValueOffset) |
+ holder_index -= 2; |
+ Handle<JSObject> receiver = args.at<JSObject>(this_index); |
+ Handle<JSObject> holder = args.at<JSObject>(holder_index); |
PropertyCallbackArguments callback_args(isolate, |
interceptor_info->data(), |
*receiver, |
@@ -1330,10 +1334,14 @@ static MaybeObject* LoadWithInterceptor(Arguments* args, |
ASSERT(kArgsOffset == 2); |
// No ReturnValue in interceptors. |
ASSERT_EQ(kArgsOffset + PCA::kArgsLength - 2, args->length()); |
- Handle<JSObject> receiver_handle = |
- args->at<JSObject>(kArgsOffset - PCA::kThisIndex); |
- Handle<JSObject> holder_handle = |
- args->at<JSObject>(kArgsOffset - PCA::kHolderIndex); |
+ int this_index = kArgsOffset - PCA::kThisIndex; |
+ int holder_index = kArgsOffset - PCA::kHolderIndex; |
+ if (PCA::kThisIndex < PCA::kReturnValueOffset) |
+ this_index -= 2; |
+ if (PCA::kHolderIndex < PCA::kReturnValueOffset) |
+ holder_index -= 2; |
+ Handle<JSObject> receiver_handle = args->at<JSObject>(this_index); |
+ Handle<JSObject> holder_handle = args->at<JSObject>(holder_index); |
Isolate* isolate = receiver_handle->GetIsolate(); |