From dac8878467e36c78893542abba3d372f403b2166 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Wed, 15 Jun 2016 08:54:08 +0100 Subject: [PATCH] Introduce ThreadSafeLayoutNode::borrow_layout_data_unchecked. --- components/layout/wrapper.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/components/layout/wrapper.rs b/components/layout/wrapper.rs index ce360602525..72685fbc577 100644 --- a/components/layout/wrapper.rs +++ b/components/layout/wrapper.rs @@ -796,6 +796,9 @@ pub trait ThreadSafeLayoutNode: Clone + Copy + Sized + PartialEq { fn get_style_and_layout_data(&self) -> Option; + #[inline(always)] + unsafe fn borrow_layout_data_unchecked(&self) -> Option<*const PrivateLayoutData>; + /// Borrows the layout data immutably. Fails on a conflicting borrow. /// /// TODO(pcwalton): Make this private. It will let us avoid borrow flag checks in some cases. @@ -1122,6 +1125,13 @@ impl<'ln> ThreadSafeLayoutNode for ServoThreadSafeLayoutNode<'ln> { self.node.get_style_and_layout_data() } + unsafe fn borrow_layout_data_unchecked(&self) -> Option<*const PrivateLayoutData> { + self.get_style_and_layout_data().map(|opaque| { + let container = *opaque.ptr as NonOpaqueStyleAndLayoutData; + &(*(*container).as_unsafe_cell().get()) as *const PrivateLayoutData + }) + } + fn borrow_layout_data(&self) -> Option> { unsafe { self.get_style_and_layout_data().map(|opaque| { @@ -1171,7 +1181,7 @@ impl<'ln> ThreadSafeLayoutNode for ServoThreadSafeLayoutNode<'ln> { fn flags(self) -> LayoutDataFlags { unsafe { - (*self.node.borrow_layout_data_unchecked().unwrap()).flags + (*self.borrow_layout_data_unchecked().unwrap()).flags } }