aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/bindings/root.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/bindings/root.rs')
-rw-r--r--components/script/dom/bindings/root.rs38
1 files changed, 10 insertions, 28 deletions
diff --git a/components/script/dom/bindings/root.rs b/components/script/dom/bindings/root.rs
index 8fed6a584b3..9afb421abbb 100644
--- a/components/script/dom/bindings/root.rs
+++ b/components/script/dom/bindings/root.rs
@@ -330,8 +330,7 @@ impl<T> Dom<T> {
pub unsafe fn to_layout(&self) -> LayoutDom<T> {
debug_assert!(thread_state::get().is_layout());
LayoutDom {
- ptr: self.ptr.clone(),
- marker: PhantomData,
+ value: self.ptr.as_ref(),
}
}
}
@@ -415,8 +414,7 @@ where
/// traits must be implemented on this.
#[unrooted_must_root_lint::allow_unrooted_interior]
pub struct LayoutDom<'dom, T> {
- ptr: ptr::NonNull<T>,
- marker: PhantomData<&'dom T>,
+ value: &'dom T,
}
impl<'dom, T> LayoutDom<'dom, T>
@@ -430,10 +428,8 @@ where
T: DerivedFrom<U>,
{
debug_assert!(thread_state::get().is_layout());
- let ptr: *mut T = self.ptr.as_ptr();
LayoutDom {
- ptr: unsafe { ptr::NonNull::new_unchecked(ptr as *mut U) },
- marker: PhantomData,
+ value: self.value.upcast::<U>(),
}
}
@@ -443,17 +439,7 @@ where
U: DerivedFrom<T>,
{
debug_assert!(thread_state::get().is_layout());
- unsafe {
- if (*self.unsafe_get()).is::<U>() {
- let ptr: *mut T = self.ptr.as_ptr();
- Some(LayoutDom {
- ptr: ptr::NonNull::new_unchecked(ptr as *mut U),
- marker: PhantomData,
- })
- } else {
- None
- }
- }
+ self.value.downcast::<U>().map(|value| LayoutDom { value })
}
}
@@ -464,7 +450,7 @@ where
/// Get the reflector.
pub unsafe fn get_jsobject(&self) -> *mut JSObject {
debug_assert!(thread_state::get().is_layout());
- (*self.ptr.as_ptr()).reflector().get_jsobject().get()
+ self.value.reflector().get_jsobject().get()
}
}
@@ -486,7 +472,7 @@ impl<T> Eq for Dom<T> {}
impl<T> PartialEq for LayoutDom<'_, T> {
fn eq(&self, other: &Self) -> bool {
- self.ptr.as_ptr() == other.ptr.as_ptr()
+ self.value as *const T == other.value as *const T
}
}
@@ -500,7 +486,7 @@ impl<T> Hash for Dom<T> {
impl<T> Hash for LayoutDom<'_, T> {
fn hash<H: Hasher>(&self, state: &mut H) {
- self.ptr.as_ptr().hash(state)
+ (self.value as *const T).hash(state)
}
}
@@ -519,10 +505,7 @@ impl<T> Clone for LayoutDom<'_, T> {
#[inline]
fn clone(&self) -> Self {
debug_assert!(thread_state::get().is_layout());
- LayoutDom {
- ptr: self.ptr.clone(),
- marker: PhantomData,
- }
+ LayoutDom { value: self.value }
}
}
@@ -533,8 +516,7 @@ impl LayoutDom<'_, Node> {
debug_assert!(thread_state::get().is_layout());
let TrustedNodeAddress(addr) = inner;
LayoutDom {
- ptr: ptr::NonNull::new_unchecked(addr as *const Node as *mut Node),
- marker: PhantomData,
+ value: &*(addr as *const Node),
}
}
}
@@ -752,7 +734,7 @@ where
/// that this is unsafe is what necessitates the layout wrappers.
pub unsafe fn unsafe_get(self) -> &'dom T {
debug_assert!(thread_state::get().is_layout());
- &*self.ptr.as_ptr()
+ self.value
}
}