diff options
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/bindings/codegen/CodegenRust.py | 14 | ||||
-rw-r--r-- | components/script/dom/bindings/root.rs | 22 |
2 files changed, 23 insertions, 13 deletions
diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py index a06414c306e..f7ce60cc80c 100644 --- a/components/script/dom/bindings/codegen/CodegenRust.py +++ b/components/script/dom/bindings/codegen/CodegenRust.py @@ -2728,7 +2728,7 @@ assert!(!obj.is_null()); SetProxyReservedSlot( obj.get(), 0, - &PrivateValue(&*raw as *const %(concreteType)s as *const libc::c_void), + &PrivateValue(raw.as_ptr() as *const %(concreteType)s as *const libc::c_void), ); """ else: @@ -2742,7 +2742,7 @@ assert!(!obj.is_null()); JS_SetReservedSlot( obj.get(), DOM_OBJECT_SLOT, - &PrivateValue(&*raw as *const %(concreteType)s as *const libc::c_void), + &PrivateValue(raw.as_ptr() as *const %(concreteType)s as *const libc::c_void), ); """ create = create % {"concreteType": self.descriptor.concreteType} @@ -2765,11 +2765,11 @@ GetProtoObject(cx, scope, proto.handle_mut()); assert!(!proto.is_null()); %(createObject)s -raw.init_reflector(obj.get()); +let root = raw.reflect_with(obj.get()); %(copyUnforgeable)s -DomRoot::from_ref(&*raw)\ +DomRoot::from_ref(&*root)\ """ % {'copyUnforgeable': unforgeable, 'createObject': create}) @@ -2809,12 +2809,12 @@ rooted!(in(*cx) let mut obj = ptr::null_mut::<JSObject>()); create_global_object( cx, &Class.base, - &*raw as *const %(concreteType)s as *const libc::c_void, + raw.as_ptr() as *const %(concreteType)s as *const libc::c_void, _trace, obj.handle_mut()); assert!(!obj.is_null()); -raw.init_reflector(obj.get()); +let root = raw.reflect_with(obj.get()); let _ac = JSAutoRealm::new(*cx, obj.get()); rooted!(in(*cx) let mut proto = ptr::null_mut::<JSObject>()); @@ -2828,7 +2828,7 @@ assert!(immutable); %(unforgeable)s -DomRoot::from_ref(&*raw)\ +DomRoot::from_ref(&*root)\ """ % values) diff --git a/components/script/dom/bindings/root.rs b/components/script/dom/bindings/root.rs index 1fea453e35a..3111182a638 100644 --- a/components/script/dom/bindings/root.rs +++ b/components/script/dom/bindings/root.rs @@ -26,7 +26,7 @@ use crate::dom::bindings::conversions::DerivedFrom; use crate::dom::bindings::inheritance::Castable; -use crate::dom::bindings::reflector::{DomObject, Reflector}; +use crate::dom::bindings::reflector::{DomObject, MutDomObject, Reflector}; use crate::dom::bindings::trace::trace_reflector; use crate::dom::bindings::trace::JSTraceable; use crate::dom::node::Node; @@ -385,15 +385,25 @@ where } } -impl<T> Deref for MaybeUnreflectedDom<T> +impl<T> Root<MaybeUnreflectedDom<T>> where T: DomObject, { - type Target = T; + pub fn as_ptr(&self) -> *const T { + self.value.ptr.as_ptr() + } +} - fn deref(&self) -> &T { - debug_assert!(thread_state::get().is_script()); - unsafe { &*self.ptr.as_ptr() } +impl<T> Root<MaybeUnreflectedDom<T>> +where + T: MutDomObject, +{ + pub unsafe fn reflect_with(self, obj: *mut JSObject) -> DomRoot<T> { + let ptr = self.as_ptr(); + drop(self); + let root = DomRoot::from_ref(&*ptr); + root.init_reflector(obj); + root } } |