Index: src/runtime/runtime-object.cc |
diff --git a/src/runtime/runtime-object.cc b/src/runtime/runtime-object.cc |
index fc97d6b9a0723bc79093eb0cb7be3316406a147d..3b302d160964044fb7e85e1d578e87db11e34496 100644 |
--- a/src/runtime/runtime-object.cc |
+++ b/src/runtime/runtime-object.cc |
@@ -242,10 +242,8 @@ MaybeHandle<Object> Runtime::DefineObjectProperty(Handle<JSObject> js_object, |
} |
-RUNTIME_FUNCTION(Runtime_GetPrototype) { |
- HandleScope scope(isolate); |
- DCHECK(args.length() == 1); |
- CONVERT_ARG_HANDLE_CHECKED(Object, obj, 0); |
+MaybeHandle<Object> Runtime::GetPrototype(Isolate* isolate, |
+ Handle<Object> obj) { |
// We don't expect access checks to be needed on JSProxy objects. |
DCHECK(!obj->IsAccessCheckNeeded() || obj->IsJSObject()); |
PrototypeIterator iter(isolate, obj, PrototypeIterator::START_AT_RECEIVER); |
@@ -257,15 +255,26 @@ RUNTIME_FUNCTION(Runtime_GetPrototype) { |
isolate->ReportFailedAccessCheck( |
Handle<JSObject>::cast(PrototypeIterator::GetCurrent(iter)), |
v8::ACCESS_GET); |
- RETURN_FAILURE_IF_SCHEDULED_EXCEPTION(isolate); |
- return isolate->heap()->undefined_value(); |
+ RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(isolate, Object); |
+ return isolate->factory()->undefined_value(); |
} |
iter.AdvanceIgnoringProxies(); |
if (PrototypeIterator::GetCurrent(iter)->IsJSProxy()) { |
- return *PrototypeIterator::GetCurrent(iter); |
+ return PrototypeIterator::GetCurrent(iter); |
} |
} while (!iter.IsAtEnd(PrototypeIterator::END_AT_NON_HIDDEN)); |
- return *PrototypeIterator::GetCurrent(iter); |
+ return PrototypeIterator::GetCurrent(iter); |
+} |
+ |
+ |
+RUNTIME_FUNCTION(Runtime_GetPrototype) { |
+ HandleScope scope(isolate); |
+ DCHECK(args.length() == 1); |
+ CONVERT_ARG_HANDLE_CHECKED(Object, obj, 0); |
+ Handle<Object> result; |
+ ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, |
+ Runtime::GetPrototype(isolate, obj)); |
+ return *result; |
} |