Index: src/runtime.cc |
diff --git a/src/runtime.cc b/src/runtime.cc |
index 4997d56df54b8dceb95b98938b0bff0dca4283d7..ff1ad67313ad909f351b7210ebbe1966beb9706a 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,19 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_ClassOf) { |
} |
+RUNTIME_FUNCTION(MaybeObject*, Runtime_GetPrototype) { |
+ NoHandleAllocation ha; |
+ ASSERT(args.length() == 1); |
+ Object* obj = args[0]; |
+ obj = obj->GetPrototype(); |
+ while (obj->IsJSObject() && |
Kevin Millikin (Chromium)
2011/06/03 09:52:48
Maybe clearer with do...while, if you like that so
|
+ JSObject::cast(obj)->map()->is_hidden_prototype()) { |
+ obj = obj->GetPrototype(); |
+ } |
+ return obj; |
+} |
+ |
+ |
RUNTIME_FUNCTION(MaybeObject*, Runtime_IsInPrototypeChain) { |
NoHandleAllocation ha; |
ASSERT(args.length() == 2); |