From 54c0601950ac862d8f4dbf30a31df9ca6a676c9a Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Fri, 5 Dec 2014 14:58:48 +0100 Subject: [PATCH 1/8] Cleanup Node::query_selector. --- components/script/dom/node.rs | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs index ef655cc1bc3..9f6605569da 100644 --- a/components/script/dom/node.rs +++ b/components/script/dom/node.rs @@ -738,15 +738,12 @@ impl<'a> NodeHelpers<'a> for JSRef<'a, Node> { // Step 3. Ok(ref selectors) => { let root = self.ancestors().last().unwrap_or(self.clone()); - for node in root.traverse_preorder() { - if node.is_element() && matches(selectors, &node, &mut None) { - let elem: JSRef = ElementCast::to_ref(node).unwrap(); - return Ok(Some(Temporary::from_rooted(elem))); - } - } + Ok(root.traverse_preorder() + .filter_map(ElementCast::to_ref) + .find(|element| matches(selectors, &NodeCast::from_ref(*element), &mut None)) + .map(Temporary::from_rooted)) } } - Ok(None) } /// Get an iterator over all nodes which match a set of selectors From 1611b8d0a808968d32d1f30556fecdbeb1d137b7 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Fri, 5 Dec 2014 15:00:54 +0100 Subject: [PATCH 2/8] Cleanup Node::summarize. --- components/script/dom/node.rs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs index 9f6605569da..ad8624718ab 100644 --- a/components/script/dom/node.rs +++ b/components/script/dom/node.rs @@ -848,11 +848,9 @@ impl<'a> NodeHelpers<'a> for JSRef<'a, Node> { publicId: "".to_string(), systemId: "".to_string(), - attrs: if self.is_element() { - let elem: JSRef = ElementCast::to_ref(self).unwrap(); - elem.summarize() - } else { - vec!() + attrs: match ElementCast::to_ref(self) { + Some(element) => element.summarize(), + None => vec!(), }, isDocumentElement: From 91c43ac18d6085998e6b35e241f0ccc35ffbc281 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Fri, 5 Dec 2014 15:03:32 +0100 Subject: [PATCH 3/8] Cleanup Node::clone. --- components/script/dom/node.rs | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs index ad8624718ab..55ca2050e44 100644 --- a/components/script/dom/node.rs +++ b/components/script/dom/node.rs @@ -1561,13 +1561,11 @@ impl Node { }.root(); // Step 3. - let document = if copy.is_document() { - let doc: JSRef = DocumentCast::to_ref(*copy).unwrap(); - JS::from_rooted(doc).root() - } else { - JS::from_rooted(*document).root() + let document = match DocumentCast::to_ref(*copy) { + Some(doc) => doc, + None => *document, }; - assert!(&*copy.owner_doc().root() == &*document); + assert!(*copy.owner_doc().root() == document); // Step 4 (some data already copied in step 2). match node.type_id() { @@ -1600,7 +1598,7 @@ impl Node { // Step 6. if clone_children == CloneChildren { for child in node.children() { - let child_copy = Node::clone(child, Some(*document), clone_children).root(); + let child_copy = Node::clone(child, Some(document), clone_children).root(); let _inserted_node = Node::pre_insert(*child_copy, *copy, None); } } From 19e44362e2defa6c1bd52e9a61e3d91238eef065 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Fri, 5 Dec 2014 15:06:10 +0100 Subject: [PATCH 4/8] Cleanup Node::ChildNodes. --- components/script/dom/node.rs | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs index 55ca2050e44..a29003272eb 100644 --- a/components/script/dom/node.rs +++ b/components/script/dom/node.rs @@ -1714,16 +1714,11 @@ impl<'a> NodeMethods for JSRef<'a, Node> { // http://dom.spec.whatwg.org/#dom-node-childnodes fn ChildNodes(self) -> Temporary { - match self.child_list.get() { - None => (), - Some(list) => return list, - } - - let doc = self.owner_doc().root(); - let window = doc.window().root(); - let child_list = NodeList::new_child_list(*window, self); - self.child_list.assign(Some(child_list)); - self.child_list.get().unwrap() + self.child_list.or_init(|| { + let doc = self.owner_doc().root(); + let window = doc.window().root(); + NodeList::new_child_list(*window, self) + }) } // http://dom.spec.whatwg.org/#dom-node-firstchild From 327b5d0ce54dd09fb143b8f1202cc50617293267 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Fri, 5 Dec 2014 15:09:13 +0100 Subject: [PATCH 5/8] Cleanup Node::Normalize. --- components/script/dom/node.rs | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs index a29003272eb..34a5cc26199 100644 --- a/components/script/dom/node.rs +++ b/components/script/dom/node.rs @@ -1972,25 +1972,27 @@ impl<'a> NodeMethods for JSRef<'a, Node> { fn Normalize(self) { let mut prev_text = None; for child in self.children() { - if child.is_text() { - let characterdata: JSRef = CharacterDataCast::to_ref(child).unwrap(); - if characterdata.Length() == 0 { - self.remove_child(child); - } else { - match prev_text { - Some(text_node) => { - let prev_characterdata: JSRef = CharacterDataCast::to_ref(text_node).unwrap(); - let _ = prev_characterdata.AppendData(characterdata.Data()); - self.remove_child(child); - }, - None => prev_text = Some(child) + match TextCast::to_ref(child) { + Some(text) => { + let characterdata: JSRef = CharacterDataCast::from_ref(text); + if characterdata.Length() == 0 { + self.remove_child(child); + } else { + match prev_text { + Some(text_node) => { + let prev_characterdata: JSRef = CharacterDataCast::from_ref(text_node); + let _ = prev_characterdata.AppendData(characterdata.Data()); + self.remove_child(child); + }, + None => prev_text = Some(text) + } } + }, + None => { + child.Normalize(); + prev_text = None; } - } else { - child.Normalize(); - prev_text = None; } - } } From ba5a08c106a2dfea838305723673f1c4de7a81ca Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Fri, 5 Dec 2014 15:10:22 +0100 Subject: [PATCH 6/8] Cleanup Node::CloneNode. --- components/script/dom/node.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs index 34a5cc26199..d0a77d82f07 100644 --- a/components/script/dom/node.rs +++ b/components/script/dom/node.rs @@ -1998,10 +1998,7 @@ impl<'a> NodeMethods for JSRef<'a, Node> { // http://dom.spec.whatwg.org/#dom-node-clonenode fn CloneNode(self, deep: bool) -> Temporary { - match deep { - true => Node::clone(self, None, CloneChildren), - false => Node::clone(self, None, DoNotCloneChildren) - } + Node::clone(self, None, if deep { CloneChildren } else { DoNotCloneChildren }) } // http://dom.spec.whatwg.org/#dom-node-isequalnode From c009bdec4ed2ef83b0274dccd1c91907aca3a7f2 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Fri, 5 Dec 2014 15:12:47 +0100 Subject: [PATCH 7/8] Cleanup Node::as_element. --- components/script/dom/node.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs index d0a77d82f07..17764636b0c 100644 --- a/components/script/dom/node.rs +++ b/components/script/dom/node.rs @@ -2261,9 +2261,7 @@ impl<'a> style::TNode<'a, JSRef<'a, Element>> for JSRef<'a, Node> { } fn as_element(self) -> JSRef<'a, Element> { - let elem: Option> = ElementCast::to_ref(self); - assert!(elem.is_some()); - elem.unwrap() + ElementCast::to_ref(self).unwrap() } fn match_attr(self, attr: &style::AttrSelector, test: |&str| -> bool) -> bool { From e63a92956d1c7c2c150a63cb48f83cde0344dece Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Fri, 5 Dec 2014 15:13:15 +0100 Subject: [PATCH 8/8] Cleanup Node::is_html_element_in_html_document. --- components/script/dom/node.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs index 17764636b0c..c406757d450 100644 --- a/components/script/dom/node.rs +++ b/components/script/dom/node.rs @@ -2286,9 +2286,7 @@ impl<'a> style::TNode<'a, JSRef<'a, Element>> for JSRef<'a, Node> { } fn is_html_element_in_html_document(self) -> bool { - let elem: Option> = ElementCast::to_ref(self); - assert!(elem.is_some()); - elem.unwrap().html_element_in_html_document() + self.as_element().html_element_in_html_document() } fn has_changed(self) -> bool { self.get_has_changed() }