Index: src/runtime.cc |
diff --git a/src/runtime.cc b/src/runtime.cc |
index 252b624024cd431bed30f75165798abfa7108b62..fb626948fbb23ac3539e07bd817b9f3f6e151ad6 100644 |
--- a/src/runtime.cc |
+++ b/src/runtime.cc |
@@ -13158,6 +13158,12 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_HaveSameMap) { |
RUNTIME_FUNCTION(MaybeObject*, Runtime_IsObserved) { |
ASSERT(args.length() == 1); |
CONVERT_ARG_CHECKED(JSReceiver, obj, 0); |
+ if (obj->IsJSGlobalProxy()) { |
+ Object* proto = obj->GetPrototype(); |
+ if (obj->IsNull()) return isolate->heap()->undefined_value(); |
rossberg
2012/11/21 12:43:17
Perhaps you should return false here.
adamk
2012/11/21 17:02:57
Ah, that's probably a better plan, yes.
|
+ ASSERT(proto->IsJSGlobalObject()); |
+ obj = JSReceiver::cast(proto); |
+ } |
return isolate->heap()->ToBoolean(obj->map()->is_observed()); |
} |
@@ -13166,6 +13172,14 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_SetIsObserved) { |
ASSERT(args.length() == 2); |
CONVERT_ARG_CHECKED(JSReceiver, obj, 0); |
CONVERT_BOOLEAN_ARG_CHECKED(is_observed, 1); |
+ JSGlobalProxy* global_proxy = NULL; |
rossberg
2012/11/21 12:43:17
What do you need this for?
adamk
2012/11/21 17:02:57
Cruft from a previous version before I discovered
|
+ if (obj->IsJSGlobalProxy()) { |
+ Object* proto = obj->GetPrototype(); |
+ if (obj->IsNull()) return isolate->heap()->undefined_value(); |
+ ASSERT(proto->IsJSGlobalObject()); |
+ global_proxy = JSGlobalProxy::cast(obj); |
+ obj = JSReceiver::cast(proto); |
+ } |
if (obj->map()->is_observed() != is_observed) { |
MaybeObject* maybe = obj->map()->Copy(); |
Map* map; |
@@ -13201,6 +13215,10 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_ObjectHashTableGet) { |
ASSERT(args.length() == 2); |
CONVERT_ARG_CHECKED(ObjectHashTable, table, 0); |
Object* key = args[1]; |
+ if (key->IsJSGlobalProxy()) { |
+ key = key->GetPrototype(); |
+ if (key->IsNull()) return isolate->heap()->undefined_value(); |
+ } |
Object* lookup = table->Lookup(key); |
return lookup->IsTheHole() ? isolate->heap()->undefined_value() : lookup; |
} |
@@ -13211,6 +13229,10 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_ObjectHashTableSet) { |
ASSERT(args.length() == 3); |
CONVERT_ARG_HANDLE_CHECKED(ObjectHashTable, table, 0); |
Handle<Object> key = args.at<Object>(1); |
+ if (key->IsJSGlobalProxy()) { |
+ key = handle(key->GetPrototype(), isolate); |
+ if (key->IsNull()) return isolate->heap()->undefined_value(); |
rossberg
2012/11/21 12:43:17
Return this.
adamk
2012/11/21 17:02:57
Woops, fixed. This is one that will be covered by
|
+ } |
Handle<Object> value = args.at<Object>(2); |
return *PutIntoObjectHashTable(table, key, value); |
} |
@@ -13221,6 +13243,10 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_ObjectHashTableHas) { |
ASSERT(args.length() == 2); |
CONVERT_ARG_CHECKED(ObjectHashTable, table, 0); |
Object* key = args[1]; |
+ if (key->IsJSGlobalProxy()) { |
+ key = key->GetPrototype(); |
+ if (key->IsNull()) return isolate->heap()->undefined_value(); |
rossberg
2012/11/21 12:43:17
False here, too.
adamk
2012/11/21 17:02:57
This function wasn't carrying its weight, just rem
rossberg
2012/11/22 12:17:05
I'm fine with that. But note that there no longer
|
+ } |
Object* lookup = table->Lookup(key); |
return isolate->heap()->ToBoolean(!lookup->IsTheHole()); |
} |