Chromium Code Reviews| 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(); |