Index: src/runtime.cc |
=================================================================== |
--- src/runtime.cc (revision 8174) |
+++ src/runtime.cc (working copy) |
@@ -594,12 +594,26 @@ |
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,19 @@ |
} |
+RUNTIME_FUNCTION(MaybeObject*, Runtime_GetPrototype) { |
+ NoHandleAllocation ha; |
+ ASSERT(args.length() == 1); |
+ Object* obj = args[0]; |
+ obj = obj->GetPrototype(); |
+ while (obj->IsJSObject() && |
+ JSObject::cast(obj)->map()->is_hidden_prototype()) { |
+ obj = obj->GetPrototype(); |
+ } |
+ return obj; |
+} |
+ |
+ |
RUNTIME_FUNCTION(MaybeObject*, Runtime_IsInPrototypeChain) { |
NoHandleAllocation ha; |
ASSERT(args.length() == 2); |