diff options
author | Anthony Ramine <n.oxyde@gmail.com> | 2017-09-26 16:10:57 +0200 |
---|---|---|
committer | Anthony Ramine <n.oxyde@gmail.com> | 2017-09-26 18:29:15 +0200 |
commit | 9ea645481b62b52c638c5fe3ccebb2518509ce37 (patch) | |
tree | 7a524a69b5f575923f53f841555d37355e70adf3 /components/script/dom/bindings/root.rs | |
parent | 1ff6c4f9aa52fa9dca5a370e30e92ad45549217b (diff) | |
download | servo-9ea645481b62b52c638c5fe3ccebb2518509ce37.tar.gz servo-9ea645481b62b52c638c5fe3ccebb2518509ce37.zip |
Store a Dom<T> in DomRoot<T>
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 3a6a3521132..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 unsafe 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(); - (*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> { - unsafe { DomRoot::new(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 } } |