diff options
author | Ms2ger <ms2ger@gmail.com> | 2015-06-21 13:06:20 +0200 |
---|---|---|
committer | Ms2ger <ms2ger@gmail.com> | 2015-06-22 10:47:21 +0200 |
commit | eb2c508df0ca8a286db9d30d5fb2ba8e47b41fa2 (patch) | |
tree | 0dd27854dd7c3e761a75b0d22c2914153f891f7f | |
parent | a217ffb00a844c4396f5abb1d3ead2f2bb520a6c (diff) | |
download | servo-eb2c508df0ca8a286db9d30d5fb2ba8e47b41fa2.tar.gz servo-eb2c508df0ca8a286db9d30d5fb2ba8e47b41fa2.zip |
Implement the LayoutData getters on LayoutJS<Node> rather than Node itself.
-rw-r--r-- | components/layout/data.rs | 8 | ||||
-rw-r--r-- | components/layout/wrapper.rs | 12 | ||||
-rw-r--r-- | 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<LayoutDataWrapper> { - 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<LayoutDataWrapper>> { 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<LayoutDataWrapper>> { 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<LayoutDataWrapper> { 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<LayoutDataWrapper>> { - 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<LayoutDataWrapper>> { - 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<Option<LayoutData>>; + #[allow(unsafe_code)] + unsafe fn layout_data_mut(&self) -> RefMut<Option<LayoutData>>; + #[allow(unsafe_code)] + unsafe fn layout_data_unchecked(&self) -> *const Option<LayoutData>; } impl LayoutNodeHelpers for LayoutJS<Node> { @@ -1162,6 +1169,24 @@ impl LayoutNodeHelpers for LayoutJS<Node> { (*this).flags.set(flags); } + + #[inline] + #[allow(unsafe_code)] + unsafe fn layout_data(&self) -> Ref<Option<LayoutData>> { + (*self.unsafe_get()).layout_data.borrow() + } + + #[inline] + #[allow(unsafe_code)] + unsafe fn layout_data_mut(&self) -> RefMut<Option<LayoutData>> { + (*self.unsafe_get()).layout_data.borrow_mut() + } + + #[inline] + #[allow(unsafe_code)] + unsafe fn layout_data_unchecked(&self) -> *const Option<LayoutData> { + (*self.unsafe_get()).layout_data.borrow_unchecked() + } } pub trait RawLayoutNodeHelpers { @@ -1461,22 +1486,6 @@ impl Node { } } - #[inline] - pub fn layout_data(&self) -> Ref<Option<LayoutData>> { - self.layout_data.borrow() - } - - #[inline] - pub fn layout_data_mut(&self) -> RefMut<Option<LayoutData>> { - self.layout_data.borrow_mut() - } - - #[inline] - #[allow(unsafe_code)] - pub unsafe fn layout_data_unchecked(&self) -> *const Option<LayoutData> { - self.layout_data.borrow_unchecked() - } - // https://dom.spec.whatwg.org/#concept-node-adopt pub fn adopt(node: &Node, document: &Document) { // Step 1. |