Index: src/runtime.cc |
diff --git a/src/runtime.cc b/src/runtime.cc |
index 4997d56df54b8dceb95b98938b0bff0dca4283d7..08acfd120b5caf11b9bd1d249cbabfa328d4f374 100644 |
--- a/src/runtime.cc |
+++ b/src/runtime.cc |
@@ -594,12 +594,26 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_CreateJSProxy) { |
Object* handler = args[0]; |
Object* prototype = args[1]; |
Object* used_prototype = |
- (prototype->IsJSObject() || prototype->IsJSProxy()) ? prototype |
- : isolate->heap()->null_value(); |
+ prototype->IsJSReceiver() ? prototype : isolate->heap()->null_value(); |
return isolate->heap()->AllocateJSProxy(handler, used_prototype); |
} |
+RUNTIME_FUNCTION(MaybeObject*, Runtime_IsJSProxy) { |
+ ASSERT(args.length() == 1); |
+ Object* obj = args[0]; |
+ return obj->IsJSProxy() |
+ ? isolate->heap()->true_value() : isolate->heap()->false_value(); |
+} |
+ |
+ |
+RUNTIME_FUNCTION(MaybeObject*, Runtime_GetHandler) { |
+ ASSERT(args.length() == 1); |
+ CONVERT_CHECKED(JSProxy, proxy, args[0]); |
+ return proxy->handler(); |
+} |
+ |
+ |
RUNTIME_FUNCTION(MaybeObject*, Runtime_CreateCatchExtensionObject) { |
ASSERT(args.length() == 2); |
CONVERT_CHECKED(String, key, args[0]); |
@@ -634,6 +648,15 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_ClassOf) { |
} |
+RUNTIME_FUNCTION(MaybeObject*, Runtime_GetPrototype) { |
+ NoHandleAllocation ha; |
+ ASSERT(args.length() == 1); |
+ Object* obj = args[0]; |
+ if (obj->IsJSGlobalProxy()) obj = obj->GetPrototype(); |
+ return obj->GetPrototype(); |
+} |
+ |
+ |
RUNTIME_FUNCTION(MaybeObject*, Runtime_IsInPrototypeChain) { |
NoHandleAllocation ha; |
ASSERT(args.length() == 2); |