diff options
author | Anthony Ramine <n.oxyde@gmail.com> | 2016-08-24 23:56:58 +0200 |
---|---|---|
committer | Anthony Ramine <n.oxyde@gmail.com> | 2016-08-25 14:03:09 +0200 |
commit | 0729000b56bffd943bb7ed925e28ebc2f5fb2adf (patch) | |
tree | e1d7bf2dd2dcf3e511563e006b43e1be849e49f5 /components/script/dom/bindings/interface.rs | |
parent | 5f59bb2e0c61b6f8a009021d8203214ef3602f24 (diff) | |
download | servo-0729000b56bffd943bb7ed925e28ebc2f5fb2adf.tar.gz servo-0729000b56bffd943bb7ed925e28ebc2f5fb2adf.zip |
Pass a MutableHandleObject to create_global_object
Diffstat (limited to 'components/script/dom/bindings/interface.rs')
-rw-r--r-- | components/script/dom/bindings/interface.rs | 30 |
1 files changed, 14 insertions, 16 deletions
diff --git a/components/script/dom/bindings/interface.rs b/components/script/dom/bindings/interface.rs index ffb33f8f438..d92510754d5 100644 --- a/components/script/dom/bindings/interface.rs +++ b/components/script/dom/bindings/interface.rs @@ -218,35 +218,33 @@ pub unsafe fn create_global_object( cx: *mut JSContext, class: &'static JSClass, private: *const libc::c_void, - trace: TraceHook) - -> *mut JSObject { + trace: TraceHook, + rval: MutableHandleObject) { + assert!(rval.is_null()); + let mut options = CompartmentOptions::default(); options.behaviors_.version_ = JSVersion::JSVERSION_ECMA_5; options.creationOptions_.traceGlobal_ = Some(trace); options.creationOptions_.sharedMemoryAndAtomics_ = true; - rooted!(in(cx) let obj = - JS_NewGlobalObject(cx, - class, - ptr::null_mut(), - OnNewGlobalHookOption::DontFireOnNewGlobalHook, - &options)); - if obj.is_null() { - return ptr::null_mut(); - } + rval.set(JS_NewGlobalObject(cx, + class, + ptr::null_mut(), + OnNewGlobalHookOption::DontFireOnNewGlobalHook, + &options)); + assert!(!rval.is_null()); // Initialize the reserved slots before doing anything that can GC, to // avoid getting trace hooks called on a partially initialized object. - JS_SetReservedSlot(obj.get(), DOM_OBJECT_SLOT, PrivateValue(private)); + JS_SetReservedSlot(rval.get(), DOM_OBJECT_SLOT, PrivateValue(private)); let proto_array: Box<ProtoOrIfaceArray> = box [0 as *mut JSObject; PrototypeList::PROTO_OR_IFACE_LENGTH]; - JS_SetReservedSlot(obj.get(), + JS_SetReservedSlot(rval.get(), DOM_PROTOTYPE_SLOT, PrivateValue(Box::into_raw(proto_array) as *const libc::c_void)); - let _ac = JSAutoCompartment::new(cx, obj.get()); - JS_FireOnNewGlobalObject(cx, obj.handle()); - obj.get() + let _ac = JSAutoCompartment::new(cx, rval.get()); + JS_FireOnNewGlobalObject(cx, rval.handle()); } /// Create and define the interface object of a callback interface. |