Index: src/objects.cc |
diff --git a/src/objects.cc b/src/objects.cc |
index 35a38ca3bd9a5476072c44c5f27416f4dc85e635..bff4819db495cbf427a5af9f194ca29cce7b5678 100644 |
--- a/src/objects.cc |
+++ b/src/objects.cc |
@@ -156,14 +156,14 @@ void Object::Lookup(Name* name, LookupResult* result) { |
} |
-Handle<Object> Object::GetPropertyWithReceiver( |
+MaybeHandle<Object> Object::GetPropertyWithReceiver( |
Handle<Object> object, |
Handle<Object> receiver, |
Handle<Name> name, |
PropertyAttributes* attributes) { |
LookupResult lookup(name->GetIsolate()); |
object->Lookup(*name, &lookup); |
- Handle<Object> result = |
+ MaybeHandle<Object> result = |
GetProperty(object, receiver, &lookup, name, attributes); |
ASSERT(*attributes <= ABSENT); |
return result; |
@@ -389,10 +389,10 @@ Handle<FixedArray> JSObject::EnsureWritableFastElements( |
} |
-Handle<Object> JSObject::GetPropertyWithCallback(Handle<JSObject> object, |
- Handle<Object> receiver, |
- Handle<Object> structure, |
- Handle<Name> name) { |
+MaybeHandle<Object> JSObject::GetPropertyWithCallback(Handle<JSObject> object, |
+ Handle<Object> receiver, |
+ Handle<Object> structure, |
+ Handle<Name> name) { |
Isolate* isolate = name->GetIsolate(); |
// To accommodate both the old and the new api we switch on the |
// data structure used to store the callbacks. Eventually foreign |
@@ -415,8 +415,7 @@ Handle<Object> JSObject::GetPropertyWithCallback(Handle<JSObject> object, |
isolate->factory()->NewTypeError("incompatible_method_receiver", |
HandleVector(args, |
ARRAY_SIZE(args))); |
- isolate->Throw(*error); |
- return Handle<Object>::null(); |
+ return isolate->Throw<Object>(error); |
} |
// TODO(rossberg): Handling symbols in the API requires changing the API, |
// so we do not support it for now. |
@@ -443,7 +442,7 @@ Handle<Object> JSObject::GetPropertyWithCallback(Handle<JSObject> object, |
PropertyCallbackArguments args(isolate, data->data(), *self, *object); |
v8::Handle<v8::Value> result = |
args.Call(call_fun, v8::Utils::ToLocal(key)); |
- RETURN_HANDLE_IF_SCHEDULED_EXCEPTION(isolate, Object); |
+ RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(isolate, Object); |
if (result.IsEmpty()) { |
return isolate->factory()->undefined_value(); |
} |
@@ -556,7 +555,7 @@ MaybeObject* Object::GetPropertyWithDefinedGetter(Object* receiver, |
// Only deal with CALLBACKS and INTERCEPTOR |
-Handle<Object> JSObject::GetPropertyWithFailedAccessCheck( |
+MaybeHandle<Object> JSObject::GetPropertyWithFailedAccessCheck( |
Handle<JSObject> object, |
Handle<Object> receiver, |
LookupResult* result, |
@@ -829,11 +828,11 @@ bool JSObject::IsDirty() { |
} |
-Handle<Object> Object::GetProperty(Handle<Object> object, |
- Handle<Object> receiver, |
- LookupResult* result, |
- Handle<Name> key, |
- PropertyAttributes* attributes) { |
+MaybeHandle<Object> Object::GetProperty(Handle<Object> object, |
+ Handle<Object> receiver, |
+ LookupResult* result, |
+ Handle<Name> key, |
+ PropertyAttributes* attributes) { |
Isolate* isolate = result->isolate(); |
CALL_HEAP_FUNCTION( |
isolate, |
@@ -883,13 +882,15 @@ MaybeObject* Object::GetProperty(Object* receiver, |
JSObject* checked = JSObject::cast(current); |
if (!isolate->MayNamedAccess(checked, name, v8::ACCESS_GET)) { |
HandleScope scope(isolate); |
- Handle<Object> value = JSObject::GetPropertyWithFailedAccessCheck( |
- handle(checked, isolate), |
- handle(receiver, isolate), |
- result, |
- handle(name, isolate), |
- attributes); |
- RETURN_IF_EMPTY_HANDLE(isolate, value); |
+ Handle<Object> value; |
+ ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
+ isolate, value, |
+ JSObject::GetPropertyWithFailedAccessCheck( |
+ handle(checked, isolate), |
+ handle(receiver, isolate), |
+ result, |
+ handle(name, isolate), |
+ attributes)); |
return *value; |
} |
} |
@@ -923,24 +924,28 @@ MaybeObject* Object::GetProperty(Object* receiver, |
return result->GetConstant(); |
case CALLBACKS: { |
HandleScope scope(isolate); |
- Handle<Object> value = JSObject::GetPropertyWithCallback( |
- handle(result->holder(), isolate), |
- handle(receiver, isolate), |
- handle(result->GetCallbackObject(), isolate), |
- handle(name, isolate)); |
- RETURN_IF_EMPTY_HANDLE(isolate, value); |
+ Handle<Object> value; |
+ ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
+ isolate, value, |
+ JSObject::GetPropertyWithCallback( |
+ handle(result->holder(), isolate), |
+ handle(receiver, isolate), |
+ handle(result->GetCallbackObject(), isolate), |
+ handle(name, isolate))); |
return *value; |
} |
case HANDLER: |
return result->proxy()->GetPropertyWithHandler(receiver, name); |
case INTERCEPTOR: { |
HandleScope scope(isolate); |
- Handle<Object> value = JSObject::GetPropertyWithInterceptor( |
- handle(result->holder(), isolate), |
- handle(receiver, isolate), |
- handle(name, isolate), |
- attributes); |
- RETURN_IF_EMPTY_HANDLE(isolate, value); |
+ Handle<Object> value; |
+ ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
+ isolate, value, |
+ JSObject::GetPropertyWithInterceptor( |
+ handle(result->holder(), isolate), |
+ handle(receiver, isolate), |
+ handle(name, isolate), |
+ attributes)); |
return *value; |
} |
case NONEXISTENT: |
@@ -13206,7 +13211,7 @@ InterceptorInfo* JSObject::GetIndexedInterceptor() { |
} |
-Handle<Object> JSObject::GetPropertyPostInterceptor( |
+MaybeHandle<Object> JSObject::GetPropertyPostInterceptor( |
Handle<JSObject> object, |
Handle<Object> receiver, |
Handle<Name> name, |
@@ -13215,17 +13220,15 @@ Handle<Object> JSObject::GetPropertyPostInterceptor( |
Isolate* isolate = object->GetIsolate(); |
LookupResult lookup(isolate); |
object->LocalLookupRealNamedProperty(*name, &lookup); |
- Handle<Object> result; |
if (lookup.IsFound()) { |
- result = GetProperty(object, receiver, &lookup, name, attributes); |
+ return GetProperty(object, receiver, &lookup, name, attributes); |
} else { |
// Continue searching via the prototype chain. |
Handle<Object> prototype(object->GetPrototype(), isolate); |
*attributes = ABSENT; |
if (prototype->IsNull()) return isolate->factory()->undefined_value(); |
- result = GetPropertyWithReceiver(prototype, receiver, name, attributes); |
+ return GetPropertyWithReceiver(prototype, receiver, name, attributes); |
} |
- return result; |
} |
@@ -13243,7 +13246,7 @@ MaybeObject* JSObject::GetLocalPropertyPostInterceptor( |
} |
-Handle<Object> JSObject::GetPropertyWithInterceptor( |
+MaybeHandle<Object> JSObject::GetPropertyWithInterceptor( |
Handle<JSObject> object, |
Handle<Object> receiver, |
Handle<Name> name, |
@@ -13265,7 +13268,7 @@ Handle<Object> JSObject::GetPropertyWithInterceptor( |
args(isolate, interceptor->data(), *receiver, *object); |
v8::Handle<v8::Value> result = |
args.Call(getter, v8::Utils::ToLocal(name_string)); |
- RETURN_HANDLE_IF_SCHEDULED_EXCEPTION(isolate, Object); |
+ RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(isolate, Object); |
if (!result.IsEmpty()) { |
*attributes = NONE; |
Handle<Object> result_internal = v8::Utils::OpenHandle(*result); |