From eb2c508df0ca8a286db9d30d5fb2ba8e47b41fa2 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Sun, 21 Jun 2015 13:06:20 +0200 Subject: [PATCH] Implement the LayoutData getters on LayoutJS rather than Node itself. --- components/layout/data.rs | 8 +++---- components/layout/wrapper.rs | 12 ++++------ components/script/dom/node.rs | 41 +++++++++++++++++++++-------------- 3 files changed, 33 insertions(+), 28 deletions(-) diff --git a/components/layout/data.rs b/components/layout/data.rs index 9146e0110c4..f679435a91f 100644 --- a/components/layout/data.rs +++ b/components/layout/data.rs @@ -8,7 +8,7 @@ use construct::{ConstructionItem, ConstructionResult}; use incremental::RestyleDamage; use msg::constellation_msg::ConstellationChan; use parallel::DomParallelInfo; -use script::dom::node::SharedLayoutData; +use script::dom::node::{LayoutNodeHelpers, SharedLayoutData}; use script::layout_interface::LayoutChan; use std::cell::{Ref, RefMut}; use std::mem; @@ -116,20 +116,20 @@ pub trait LayoutDataAccess { impl<'ln> LayoutDataAccess for LayoutNode<'ln> { #[inline(always)] unsafe fn borrow_layout_data_unchecked(&self) -> *const Option { - mem::transmute(self.get().layout_data_unchecked()) + mem::transmute(self.get_jsmanaged().layout_data_unchecked()) } #[inline(always)] fn borrow_layout_data<'a>(&'a self) -> Ref<'a,Option> { unsafe { - mem::transmute(self.get().layout_data()) + mem::transmute(self.get_jsmanaged().layout_data()) } } #[inline(always)] fn mutate_layout_data<'a>(&'a self) -> RefMut<'a,Option> { unsafe { - mem::transmute(self.get().layout_data_mut()) + mem::transmute(self.get_jsmanaged().layout_data_mut()) } } } diff --git a/components/layout/wrapper.rs b/components/layout/wrapper.rs index b45162772d3..6db0552d2df 100644 --- a/components/layout/wrapper.rs +++ b/components/layout/wrapper.rs @@ -889,11 +889,11 @@ impl<'ln> ThreadSafeLayoutNode<'ln> { layout_data_wrapper_ref.data.after_style.is_some() } - /// Borrows the layout data without checking. Fails on a conflicting borrow. + /// Borrows the layout data without checking. #[inline(always)] fn borrow_layout_data_unchecked<'a>(&'a self) -> *const Option { unsafe { - mem::transmute(self.get().layout_data_unchecked()) + self.node.borrow_layout_data_unchecked() } } @@ -902,9 +902,7 @@ impl<'ln> ThreadSafeLayoutNode<'ln> { /// TODO(pcwalton): Make this private. It will let us avoid borrow flag checks in some cases. #[inline(always)] pub fn borrow_layout_data<'a>(&'a self) -> Ref<'a,Option> { - unsafe { - mem::transmute(self.get().layout_data()) - } + self.node.borrow_layout_data() } /// Borrows the layout data mutably. Fails on a conflicting borrow. @@ -912,9 +910,7 @@ impl<'ln> ThreadSafeLayoutNode<'ln> { /// TODO(pcwalton): Make this private. It will let us avoid borrow flag checks in some cases. #[inline(always)] pub fn mutate_layout_data<'a>(&'a self) -> RefMut<'a,Option> { - unsafe { - mem::transmute(self.get().layout_data_mut()) - } + self.node.mutate_layout_data() } /// Traverses the tree in postorder. diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs index af957f2beca..919136a4afd 100644 --- a/components/script/dom/node.rs +++ b/components/script/dom/node.rs @@ -1091,6 +1091,13 @@ pub trait LayoutNodeHelpers { unsafe fn get_flag(&self, flag: NodeFlags) -> bool; #[allow(unsafe_code)] unsafe fn set_flag(&self, flag: NodeFlags, value: bool); + + #[allow(unsafe_code)] + unsafe fn layout_data(&self) -> Ref>; + #[allow(unsafe_code)] + unsafe fn layout_data_mut(&self) -> RefMut>; + #[allow(unsafe_code)] + unsafe fn layout_data_unchecked(&self) -> *const Option; } impl LayoutNodeHelpers for LayoutJS { @@ -1162,6 +1169,24 @@ impl LayoutNodeHelpers for LayoutJS { (*this).flags.set(flags); } + + #[inline] + #[allow(unsafe_code)] + unsafe fn layout_data(&self) -> Ref> { + (*self.unsafe_get()).layout_data.borrow() + } + + #[inline] + #[allow(unsafe_code)] + unsafe fn layout_data_mut(&self) -> RefMut> { + (*self.unsafe_get()).layout_data.borrow_mut() + } + + #[inline] + #[allow(unsafe_code)] + unsafe fn layout_data_unchecked(&self) -> *const Option { + (*self.unsafe_get()).layout_data.borrow_unchecked() + } } pub trait RawLayoutNodeHelpers { @@ -1461,22 +1486,6 @@ impl Node { } } - #[inline] - pub fn layout_data(&self) -> Ref> { - self.layout_data.borrow() - } - - #[inline] - pub fn layout_data_mut(&self) -> RefMut> { - self.layout_data.borrow_mut() - } - - #[inline] - #[allow(unsafe_code)] - pub unsafe fn layout_data_unchecked(&self) -> *const Option { - self.layout_data.borrow_unchecked() - } - // https://dom.spec.whatwg.org/#concept-node-adopt pub fn adopt(node: &Node, document: &Document) { // Step 1.