aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/bindings/root.rs
diff options
context:
space:
mode:
authorAnthony Ramine <n.oxyde@gmail.com>2017-09-26 16:10:57 +0200
committerAnthony Ramine <n.oxyde@gmail.com>2017-09-26 18:29:15 +0200
commit9ea645481b62b52c638c5fe3ccebb2518509ce37 (patch)
tree7a524a69b5f575923f53f841555d37355e70adf3 /components/script/dom/bindings/root.rs
parent1ff6c4f9aa52fa9dca5a370e30e92ad45549217b (diff)
downloadservo-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.rs12
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
}
}