aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbors-servo <metajack+bors@gmail.com>2015-01-10 09:51:44 -0700
committerbors-servo <metajack+bors@gmail.com>2015-01-10 09:51:44 -0700
commite17d390714c576f4a0667c2c431ab6da84c6eb4d (patch)
treee93ba4673a78973199adaf030b1a348921c02de9
parenta07c3eadb33eca1fbb2209d168c63c5ec3db23df (diff)
parentbc14c2c23b8c4480dae1c3765fdfb8ce3c7076fa (diff)
downloadservo-e17d390714c576f4a0667c2c431ab6da84c6eb4d.tar.gz
servo-e17d390714c576f4a0667c2c431ab6da84c6eb4d.zip
auto merge of #4608 : Ms2ger/servo/ReverseChildrenIterator, r=jdm
-rw-r--r--components/script/dom/node.rs22
1 files changed, 12 insertions, 10 deletions
diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs
index f92e29626b1..bc44aeda8ba 100644
--- a/components/script/dom/node.rs
+++ b/components/script/dom/node.rs
@@ -398,7 +398,7 @@ impl<'a> Iterator<JSRef<'a, Node>> for QuerySelectorIterator<'a> {
pub trait NodeHelpers<'a> {
fn ancestors(self) -> AncestorIterator<'a>;
fn children(self) -> NodeChildrenIterator<'a>;
- fn rev_children(self) -> ReverseChildrenIterator<'a>;
+ fn rev_children(self) -> ReverseChildrenIterator;
fn child_elements(self) -> ChildElementIterator<'a>;
fn following_siblings(self) -> NodeChildrenIterator<'a>;
fn is_in_doc(self) -> bool;
@@ -816,9 +816,9 @@ impl<'a> NodeHelpers<'a> for JSRef<'a, Node> {
}
}
- fn rev_children(self) -> ReverseChildrenIterator<'a> {
+ fn rev_children(self) -> ReverseChildrenIterator {
ReverseChildrenIterator {
- current: self.last_child.get().map(|node| *node.root().deref()),
+ current: self.last_child.get().root(),
}
}
@@ -1022,14 +1022,14 @@ impl<'a> Iterator<JSRef<'a, Node>> for NodeChildrenIterator<'a> {
}
}
-pub struct ReverseChildrenIterator<'a> {
- current: Option<JSRef<'a, Node>>,
+pub struct ReverseChildrenIterator {
+ current: Option<Root<Node>>,
}
-impl<'a> Iterator<JSRef<'a, Node>> for ReverseChildrenIterator<'a> {
- fn next(&mut self) -> Option<JSRef<'a, Node>> {
- let node = self.current;
- self.current = node.and_then(|node| node.prev_sibling().map(|node| *node.root().deref()));
+impl Iterator<Temporary<Node>> for ReverseChildrenIterator {
+ fn next(&mut self) -> Option<Temporary<Node>> {
+ let node = self.current.r().map(Temporary::from_rooted);
+ self.current = self.current.take().and_then(|node| node.r().prev_sibling()).root();
node
}
}
@@ -1064,7 +1064,9 @@ impl<'a> TreeIterator<'a> {
impl<'a> Iterator<JSRef<'a, Node>> for TreeIterator<'a> {
fn next(&mut self) -> Option<JSRef<'a, Node>> {
let ret = self.stack.pop();
- ret.map(|node| self.stack.extend(node.rev_children()));
+ ret.map(|node| {
+ self.stack.extend(node.rev_children().map(|c| *c.root()))
+ });
ret
}
}