Index: src/stub-cache.cc |
diff --git a/src/stub-cache.cc b/src/stub-cache.cc |
index 4eb6241d87fd0225ef73274bdd469f60f97d98b1..f8e09c405defdd691e218c34115fc13bed46b9ce 100644 |
--- a/src/stub-cache.cc |
+++ b/src/stub-cache.cc |
@@ -1223,8 +1223,8 @@ static MaybeObject* ThrowReferenceError(Isolate* isolate, Name* name) { |
} |
-static MaybeObject* LoadWithInterceptor(Arguments* args, |
- PropertyAttributes* attrs) { |
+static Handle<Object> LoadWithInterceptor(Arguments* args, |
+ PropertyAttributes* attrs) { |
ASSERT(args->length() == StubCache::kInterceptorArgsLength); |
Handle<Name> name_handle = |
args->at<Name>(StubCache::kInterceptorArgsNameIndex); |
@@ -1238,9 +1238,10 @@ static MaybeObject* LoadWithInterceptor(Arguments* args, |
Isolate* isolate = receiver_handle->GetIsolate(); |
// TODO(rossberg): Support symbols in the API. |
- if (name_handle->IsSymbol()) |
- return holder_handle->GetPropertyPostInterceptor( |
- *receiver_handle, *name_handle, attrs); |
+ if (name_handle->IsSymbol()) { |
+ return JSObject::GetPropertyPostInterceptor( |
+ holder_handle, receiver_handle, name_handle, attrs); |
+ } |
Handle<String> name = Handle<String>::cast(name_handle); |
Address getter_address = v8::ToCData<Address>(interceptor_info->getter()); |
@@ -1253,24 +1254,21 @@ static MaybeObject* LoadWithInterceptor(Arguments* args, |
*receiver_handle, |
*holder_handle); |
{ |
- // Use the interceptor getter. |
HandleScope scope(isolate); |
+ // Use the interceptor getter. |
v8::Handle<v8::Value> r = |
callback_args.Call(getter, v8::Utils::ToLocal(name)); |
- RETURN_IF_SCHEDULED_EXCEPTION(isolate); |
+ RETURN_HANDLE_IF_SCHEDULED_EXCEPTION(isolate, Object); |
if (!r.IsEmpty()) { |
*attrs = NONE; |
Handle<Object> result = v8::Utils::OpenHandle(*r); |
result->VerifyApiCallResultType(); |
- return *result; |
+ return scope.CloseAndEscape(result); |
} |
} |
- MaybeObject* result = holder_handle->GetPropertyPostInterceptor( |
- *receiver_handle, |
- *name_handle, |
- attrs); |
- RETURN_IF_SCHEDULED_EXCEPTION(isolate); |
+ Handle<Object> result = JSObject::GetPropertyPostInterceptor( |
+ holder_handle, receiver_handle, name_handle, attrs); |
return result; |
} |
@@ -1281,25 +1279,25 @@ static MaybeObject* LoadWithInterceptor(Arguments* args, |
*/ |
RUNTIME_FUNCTION(MaybeObject*, LoadPropertyWithInterceptorForLoad) { |
PropertyAttributes attr = NONE; |
- Object* result; |
- { MaybeObject* maybe_result = LoadWithInterceptor(&args, &attr); |
- if (!maybe_result->ToObject(&result)) return maybe_result; |
- } |
+ HandleScope scope(isolate); |
+ Handle<Object> result = LoadWithInterceptor(&args, &attr); |
+ RETURN_IF_EMPTY_HANDLE(isolate, result); |
// If the property is present, return it. |
- if (attr != ABSENT) return result; |
+ if (attr != ABSENT) return *result; |
return ThrowReferenceError(isolate, Name::cast(args[0])); |
} |
RUNTIME_FUNCTION(MaybeObject*, LoadPropertyWithInterceptorForCall) { |
PropertyAttributes attr; |
- MaybeObject* result = LoadWithInterceptor(&args, &attr); |
- RETURN_IF_SCHEDULED_EXCEPTION(isolate); |
+ HandleScope scope(isolate); |
+ Handle<Object> result = LoadWithInterceptor(&args, &attr); |
+ RETURN_IF_EMPTY_HANDLE(isolate, result); |
// This is call IC. In this case, we simply return the undefined result which |
// will lead to an exception when trying to invoke the result as a |
// function. |
- return result; |
+ return *result; |
} |