Tighten up Object.observe code to ASSERT that it never deals with globals
After r21126, Object.observe no longer allows observing the global proxy object. This patch replaces codepaths that used to handle that case with asserts showing that no such observation happens. R=verwaest@chromium.org Review URL: https://codereview.chromium.org/261773006 git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@21151 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
3274485c50
commit
9c52caa86e
@ -1976,12 +1976,11 @@ void JSObject::EnqueueChangeRecord(Handle<JSObject> object,
|
||||
const char* type_str,
|
||||
Handle<Name> name,
|
||||
Handle<Object> old_value) {
|
||||
ASSERT(!object->IsJSGlobalProxy());
|
||||
ASSERT(!object->IsJSGlobalObject());
|
||||
Isolate* isolate = object->GetIsolate();
|
||||
HandleScope scope(isolate);
|
||||
Handle<String> type = isolate->factory()->InternalizeUtf8String(type_str);
|
||||
if (object->IsJSGlobalObject()) {
|
||||
object = handle(JSGlobalObject::cast(*object)->global_receiver(), isolate);
|
||||
}
|
||||
Handle<Object> args[] = { type, object, name, old_value };
|
||||
int argc = name.is_null() ? 2 : old_value->IsTheHole() ? 3 : 4;
|
||||
|
||||
@ -5927,6 +5926,8 @@ MaybeHandle<Object> JSObject::Freeze(Handle<JSObject> object) {
|
||||
|
||||
|
||||
void JSObject::SetObserved(Handle<JSObject> object) {
|
||||
ASSERT(!object->IsJSGlobalProxy());
|
||||
ASSERT(!object->IsJSGlobalObject());
|
||||
Isolate* isolate = object->GetIsolate();
|
||||
Handle<Map> new_map;
|
||||
Handle<Map> old_map(object->map(), isolate);
|
||||
|
@ -14883,12 +14883,7 @@ RUNTIME_FUNCTION(Runtime_IsObserved) {
|
||||
|
||||
if (!args[0]->IsJSReceiver()) return isolate->heap()->false_value();
|
||||
CONVERT_ARG_CHECKED(JSReceiver, obj, 0);
|
||||
if (obj->IsJSGlobalProxy()) {
|
||||
Object* proto = obj->GetPrototype();
|
||||
if (proto->IsNull()) return isolate->heap()->false_value();
|
||||
ASSERT(proto->IsJSGlobalObject());
|
||||
obj = JSReceiver::cast(proto);
|
||||
}
|
||||
ASSERT(!obj->IsJSGlobalProxy() || !obj->map()->is_observed());
|
||||
return isolate->heap()->ToBoolean(obj->map()->is_observed());
|
||||
}
|
||||
|
||||
@ -14897,12 +14892,7 @@ RUNTIME_FUNCTION(Runtime_SetIsObserved) {
|
||||
HandleScope scope(isolate);
|
||||
ASSERT(args.length() == 1);
|
||||
CONVERT_ARG_HANDLE_CHECKED(JSReceiver, obj, 0);
|
||||
if (obj->IsJSGlobalProxy()) {
|
||||
Object* proto = obj->GetPrototype();
|
||||
if (proto->IsNull()) return isolate->heap()->undefined_value();
|
||||
ASSERT(proto->IsJSGlobalObject());
|
||||
obj = handle(JSReceiver::cast(proto));
|
||||
}
|
||||
ASSERT(!obj->IsJSGlobalProxy());
|
||||
if (obj->IsJSProxy())
|
||||
return isolate->heap()->undefined_value();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user