From 185a402d9cc41d3e680b99564f5fc8b519ecf129 Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Fri, 3 Apr 2020 18:54:11 +0200 Subject: Make DOM own the style and layout data, in an UnsafeCell The previous Cell was a lie. --- components/script_layout_interface/lib.rs | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) (limited to 'components/script_layout_interface/lib.rs') diff --git a/components/script_layout_interface/lib.rs b/components/script_layout_interface/lib.rs index 6bfe0af2b30..6fb859aa112 100644 --- a/components/script_layout_interface/lib.rs +++ b/components/script_layout_interface/lib.rs @@ -26,7 +26,6 @@ use net_traits::image_cache::PendingImageId; use script_traits::UntrustedNodeAddress; use servo_url::{ImmutableOrigin, ServoUrl}; use std::any::Any; -use std::ptr::NonNull; use std::sync::atomic::AtomicIsize; use style::data::ElementData; @@ -51,12 +50,11 @@ impl StyleData { } } -#[derive(Clone, Copy, MallocSizeOf)] +#[derive(MallocSizeOf)] pub struct OpaqueStyleAndLayoutData { // NB: We really store a `StyleAndLayoutData` here, so be careful! - #[ignore_malloc_size_of = "TODO(#6910) Box value that should be counted but \ - the type lives in layout"] - ptr: NonNull, + #[ignore_malloc_size_of = "Trait objects are hard"] + ptr: Box, } impl OpaqueStyleAndLayoutData { @@ -66,23 +64,17 @@ impl OpaqueStyleAndLayoutData { T: Any + Send + Sync, { Self { - ptr: Box::into_raw_non_null(Box::new(value) as Box), + ptr: Box::new(value) as Box, } } - #[inline] - pub fn as_ptr(&self) -> *mut (dyn Any + Send + Sync) { - self.ptr.as_ptr() - } - /// Extremely cursed. - #[allow(unsafe_code)] #[inline] - pub unsafe fn downcast_ref<'extended, T>(&self) -> Option<&'extended T> + pub fn downcast_ref(&self) -> Option<&T> where T: Any + Send + Sync, { - (*self.ptr.as_ptr()).downcast_ref() + self.ptr.downcast_ref() } } -- cgit v1.2.3