When calling constructors, retrieve the global object from the callee rather than the JSContext.

This commit is contained in:
Ms2ger 2014-03-04 10:46:49 +01:00
parent 4a6077ca4c
commit c8bd9615f4
3 changed files with 6 additions and 11 deletions

View file

@ -720,13 +720,13 @@ pub fn CreateDOMGlobal(cx: *JSContext, class: *JSClass) -> *JSObject {
}
/// Returns the global object of the realm that the given JS object was created in.
fn global_object_for_js_object(obj: *JSObject) -> *Box<window::Window> {
pub fn global_object_for_js_object(obj: *JSObject) -> *mut Box<window::Window> {
unsafe {
let global = GetGlobalForObjectCrossCompartment(obj);
let clasp = JS_GetClass(global);
assert!(((*clasp).flags & (JSCLASS_IS_DOMJSCLASS | JSCLASS_IS_GLOBAL)) != 0);
// FIXME(jdm): Either don't hardcode or sanity assert prototype stuff.
match unwrap_object::<*Box<window::Window>>(global, PrototypeList::id::Window, 1) {
match unwrap_object::<*mut Box<window::Window>>(global, PrototypeList::id::Window, 1) {
Ok(win) => win,
Err(_) => fail!("found DOM global that doesn't unwrap to Window"),
}
@ -745,7 +745,7 @@ fn cx_for_dom_reflector(obj: *JSObject) -> *JSContext {
}
/// Returns the global object of the realm that the given DOM object was created in.
pub fn global_object_for_dom_object<T: Reflectable>(obj: &T) -> *Box<window::Window> {
pub fn global_object_for_dom_object<T: Reflectable>(obj: &T) -> *mut Box<window::Window> {
global_object_for_js_object(obj.reflector().get_jsobject())
}