Bug 602223 - Use the global object instead of the parent so we're sure to have a non-null parent. r=gal a=blocking beta7

This commit is contained in:
Blake Kaplan 2010-11-01 18:28:14 -07:00
Родитель 9d1fe775c9
Коммит f14c5e0020
2 изменённых файлов: 4 добавлений и 2 удалений

Просмотреть файл

@ -295,6 +295,7 @@ JSObject *
JSWrapper::New(JSContext *cx, JSObject *obj, JSObject *proto, JSObject *parent, JSWrapper::New(JSContext *cx, JSObject *obj, JSObject *proto, JSObject *parent,
JSWrapper *handler) JSWrapper *handler)
{ {
JS_ASSERT(parent);
return NewProxyObject(cx, handler, ObjectValue(*obj), proto, parent, return NewProxyObject(cx, handler, ObjectValue(*obj), proto, parent,
obj->isCallable() ? obj : NULL, NULL); obj->isCallable() ? obj : NULL, NULL);
} }
@ -345,6 +346,7 @@ AutoCompartment::enter()
context->compartment = destination; context->compartment = destination;
JSObject *scopeChain = target->getGlobal(); JSObject *scopeChain = target->getGlobal();
JS_ASSERT(scopeChain->isNative());
frame.construct(); frame.construct();
if (!context->stack().pushDummyFrame(context, *scopeChain, &frame.ref())) { if (!context->stack().pushDummyFrame(context, *scopeChain, &frame.ref())) {
frame.destroy(); frame.destroy();

Просмотреть файл

@ -71,7 +71,7 @@ DoubleWrap(JSContext *cx, JSObject *obj, uintN flags)
{ {
if (flags & WrapperFactory::WAIVE_XRAY_WRAPPER_FLAG) { if (flags & WrapperFactory::WAIVE_XRAY_WRAPPER_FLAG) {
js::SwitchToCompartment sc(cx, obj->compartment()); js::SwitchToCompartment sc(cx, obj->compartment());
return JSWrapper::New(cx, obj, NULL, obj->getParent(), return JSWrapper::New(cx, obj, NULL, obj->getGlobal(),
&WaiveXrayWrapperWrapper); &WaiveXrayWrapperWrapper);
} }
return obj; return obj;
@ -323,7 +323,7 @@ WrapperFactory::WaiveXrayAndWrap(JSContext *cx, jsval *vp)
{ {
js::SwitchToCompartment sc(cx, obj->compartment()); js::SwitchToCompartment sc(cx, obj->compartment());
obj = JSWrapper::New(cx, obj, NULL, obj->getParent(), &WaiveXrayWrapperWrapper); obj = JSWrapper::New(cx, obj, NULL, obj->getGlobal(), &WaiveXrayWrapperWrapper);
if (!obj) if (!obj)
return false; return false;
} }