aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/dom/node.rs
diff options
context:
space:
mode:
authorMs2ger <ms2ger@gmail.com>2014-06-10 14:26:28 +0200
committerMs2ger <ms2ger@gmail.com>2014-06-11 19:51:07 +0200
commit6df6a7d51246307dddc314861a7e1e31963018b2 (patch)
treecd800fda32db8d0a683de4dc3974d9b9b45b66da /src/components/script/dom/node.rs
parentbb0cbb0a746aff66a6288df66caf55d995a017c2 (diff)
downloadservo-6df6a7d51246307dddc314861a7e1e31963018b2.tar.gz
servo-6df6a7d51246307dddc314861a7e1e31963018b2.zip
Use internal mutability for Node.flags.
Diffstat (limited to 'src/components/script/dom/node.rs')
-rw-r--r--src/components/script/dom/node.rs31
1 files changed, 15 insertions, 16 deletions
diff --git a/src/components/script/dom/node.rs b/src/components/script/dom/node.rs
index 775a330ab55..181c99fe686 100644
--- a/src/components/script/dom/node.rs
+++ b/src/components/script/dom/node.rs
@@ -11,12 +11,13 @@ use dom::bindings::codegen::InheritTypes::{ElementCast, TextCast, NodeCast, Elem
use dom::bindings::codegen::InheritTypes::{CharacterDataCast, NodeBase, NodeDerived};
use dom::bindings::codegen::InheritTypes::{ProcessingInstructionCast, EventTargetCast};
use dom::bindings::codegen::Bindings::NodeBinding::NodeConstants;
+use dom::bindings::error::{ErrorResult, Fallible, NotFound, HierarchyRequest, Syntax};
use dom::bindings::js::{JS, JSRef, RootedReference, Temporary, Root, OptionalUnrootable};
use dom::bindings::js::{OptionalSettable, TemporaryPushable, OptionalRootedRootable};
use dom::bindings::js::{ResultRootable, OptionalRootable};
-use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
-use dom::bindings::error::{ErrorResult, Fallible, NotFound, HierarchyRequest, Syntax};
+use dom::bindings::trace::Untraceable;
use dom::bindings::utils;
+use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
use dom::characterdata::{CharacterData, CharacterDataMethods};
use dom::comment::Comment;
use dom::document::{Document, DocumentMethods, DocumentHelpers, HTMLDocument, NonHTMLDocument};
@@ -86,7 +87,7 @@ pub struct Node {
pub child_list: Cell<Option<JS<NodeList>>>,
/// A bitfield of flags for node items.
- flags: NodeFlags,
+ flags: Untraceable<RefCell<NodeFlags>>,
/// Layout information. Only the layout task may touch this data.
///
@@ -382,7 +383,7 @@ pub trait NodeHelpers {
fn is_anchor_element(&self) -> bool;
fn get_hover_state(&self) -> bool;
- fn set_hover_state(&mut self, state: bool);
+ fn set_hover_state(&self, state: bool);
fn dump(&self);
fn dump_indent(&self, indent: uint);
@@ -430,7 +431,7 @@ impl<'a> NodeHelpers for JSRef<'a, Node> {
}
fn is_in_doc(&self) -> bool {
- self.deref().flags.contains(IsInDoc)
+ self.deref().flags.deref().borrow().contains(IsInDoc)
}
/// Returns the type ID of this node. Fails if this node is borrowed mutably.
@@ -489,14 +490,14 @@ impl<'a> NodeHelpers for JSRef<'a, Node> {
}
fn get_hover_state(&self) -> bool {
- self.flags.contains(InHoverState)
+ self.flags.deref().borrow().contains(InHoverState)
}
- fn set_hover_state(&mut self, state: bool) {
+ fn set_hover_state(&self, state: bool) {
if state {
- self.flags.insert(InHoverState);
+ self.flags.deref().borrow_mut().insert(InHoverState);
} else {
- self.flags.remove(InHoverState);
+ self.flags.deref().borrow_mut().remove(InHoverState);
}
}
@@ -706,7 +707,7 @@ pub trait RawLayoutNodeHelpers {
impl RawLayoutNodeHelpers for Node {
unsafe fn get_hover_state_for_layout(&self) -> bool {
- self.flags.contains(InHoverState)
+ self.flags.deref().borrow().contains(InHoverState)
}
}
@@ -916,7 +917,7 @@ impl Node {
owner_doc: Cell::new(doc.unrooted()),
child_list: Cell::new(None),
- flags: NodeFlags::new(type_id),
+ flags: Untraceable::new(RefCell::new(NodeFlags::new(type_id))),
layout_data: LayoutDataRef::new(),
}
@@ -1110,9 +1111,9 @@ impl Node {
for node in nodes.mut_iter() {
parent.add_child(node, child);
if parent.is_in_doc() {
- node.flags.insert(IsInDoc);
+ node.flags.deref().borrow_mut().insert(IsInDoc);
} else {
- node.flags.remove(IsInDoc);
+ node.flags.deref().borrow_mut().remove(IsInDoc);
}
}
@@ -1197,9 +1198,7 @@ impl Node {
// Step 8.
parent.remove_child(node);
- // FIXME(2513): remove this `node_alias` when in fix mozilla#2513
- let mut node_alias = node.clone();
- node_alias.deref_mut().flags.remove(IsInDoc);
+ node.deref().flags.deref().borrow_mut().remove(IsInDoc);
// Step 9.
match suppress_observers {