diff options
Diffstat (limited to 'components/script/dom/bindings/root.rs')
-rw-r--r-- | components/script/dom/bindings/root.rs | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/components/script/dom/bindings/root.rs b/components/script/dom/bindings/root.rs index 1a81965fef9..251b17c3054 100644 --- a/components/script/dom/bindings/root.rs +++ b/components/script/dom/bindings/root.rs @@ -558,10 +558,11 @@ pub unsafe fn trace_roots(tracer: *mut JSTracer) { /// are additive, so this object's destruction will not invalidate other roots /// for the same JS value. `Root`s cannot outlive the associated /// `RootCollection` object. +#[allow(unrooted_must_root)] #[allow_unrooted_interior] pub struct DomRoot<T: DomObject> { /// Reference to rooted value that must not outlive this container - ptr: NonZero<*const T>, + ptr: Dom<T>, /// List that ensures correct dynamic root ordering root_list: *const RootCollection, } @@ -591,11 +592,12 @@ impl<T: DomObject> DomRoot<T> { /// Create a new stack-bounded root for the provided JS-owned value. /// It cannot outlive its associated `RootCollection`, and it gives /// out references which cannot outlive this new `Root`. - pub fn new(unrooted: NonZero<*const T>) -> DomRoot<T> { + #[allow(unrooted_must_root)] + unsafe fn new(unrooted: Dom<T>) -> DomRoot<T> { debug_assert!(thread_state::get().is_script()); STACK_ROOTS.with(|ref collection| { let RootCollectionPtr(collection) = collection.get().unwrap(); - unsafe { (*collection).root(&*(*unrooted.get()).reflector()) } + (*collection).root(unrooted.reflector()); DomRoot { ptr: unrooted, root_list: collection, @@ -605,7 +607,7 @@ impl<T: DomObject> DomRoot<T> { /// Generate a new root from a reference pub fn from_ref(unrooted: &T) -> DomRoot<T> { - DomRoot::new(unsafe { NonZero::new_unchecked(unrooted) }) + unsafe { DomRoot::new(Dom::from_ref(unrooted)) } } } @@ -620,7 +622,7 @@ impl<T: DomObject> Deref for DomRoot<T> { type Target = T; fn deref(&self) -> &T { debug_assert!(thread_state::get().is_script()); - unsafe { &*self.ptr.get() } + &self.ptr } } |