aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/nodelist.rs
diff options
context:
space:
mode:
authorEli Friedman <eli.friedman@gmail.com>2015-10-14 17:48:28 -0700
committerEli Friedman <eli.friedman@gmail.com>2015-10-15 14:03:56 -0700
commit57584e74c6fc192335ed3300ac75751bada0ff93 (patch)
treea75b0f9045238a8720e31d848433635222a06b58 /components/script/dom/nodelist.rs
parent7a08b29201d7a6ec8fd2097fc60ca47e556898d5 (diff)
downloadservo-57584e74c6fc192335ed3300ac75751bada0ff93.tar.gz
servo-57584e74c6fc192335ed3300ac75751bada0ff93.zip
Make get() and set() on MutNullableHeap use the correct types.
get() must always return a rooted value, because we have no way of ensuring the value won't be invalidated. set() takes an &T because it's convenient; there isn't any need to expose JS<T>.
Diffstat (limited to 'components/script/dom/nodelist.rs')
-rw-r--r--components/script/dom/nodelist.rs27
1 files changed, 13 insertions, 14 deletions
diff --git a/components/script/dom/nodelist.rs b/components/script/dom/nodelist.rs
index dfea6e98eb4..f86c1204a1c 100644
--- a/components/script/dom/nodelist.rs
+++ b/components/script/dom/nodelist.rs
@@ -127,14 +127,14 @@ impl ChildrenList {
let last_index = self.last_index.get();
if index == last_index {
// Item is last visited child, no need to update last visited.
- return Some(self.last_visited.get().unwrap().root());
+ return Some(self.last_visited.get().unwrap());
}
let last_visited = if index - 1u32 == last_index {
// Item is last visited's next sibling.
- self.last_visited.get().unwrap().root().GetNextSibling().unwrap()
+ self.last_visited.get().unwrap().GetNextSibling().unwrap()
} else if last_index > 0 && index == last_index - 1u32 {
// Item is last visited's previous sibling.
- self.last_visited.get().unwrap().root().GetPreviousSibling().unwrap()
+ self.last_visited.get().unwrap().GetPreviousSibling().unwrap()
} else if index > last_index {
if index == len - 1u32 {
// Item is parent's last child, not worth updating last visited.
@@ -142,7 +142,7 @@ impl ChildrenList {
}
if index <= last_index + (len - last_index) / 2u32 {
// Item is closer to the last visited child and follows it.
- self.last_visited.get().unwrap().root()
+ self.last_visited.get().unwrap()
.inclusively_following_siblings()
.nth((index - last_index) as usize).unwrap()
} else {
@@ -154,7 +154,7 @@ impl ChildrenList {
}
} else if index >= last_index / 2u32 {
// Item is closer to the last visited child and precedes it.
- self.last_visited.get().unwrap().root()
+ self.last_visited.get().unwrap()
.inclusively_preceding_siblings()
.nth((last_index - index) as usize).unwrap()
} else {
@@ -165,7 +165,7 @@ impl ChildrenList {
.nth(index as usize)
.unwrap()
};
- self.last_visited.set(Some(JS::from_rooted(&last_visited)));
+ self.last_visited.set(Some(last_visited.r()));
self.last_index.set(index);
Some(last_visited)
}
@@ -178,7 +178,7 @@ impl ChildrenList {
}
let index = list.last_index.get();
if index < len {
- list.last_visited.set(Some(JS::from_ref(added[index as usize])));
+ list.last_visited.set(Some(added[index as usize]));
} else if index / 2u32 >= len {
// If last index is twice as large as the number of added nodes,
// updating only it means that less nodes will be traversed if
@@ -187,7 +187,7 @@ impl ChildrenList {
} else {
// If last index is not twice as large but still larger,
// it's better to update it to the number of added nodes.
- list.last_visited.set(Some(JS::from_ref(next)));
+ list.last_visited.set(Some(next));
list.last_index.set(len);
}
}
@@ -198,7 +198,7 @@ impl ChildrenList {
added: &[&Node],
next: Option<&Node>) {
let index = list.last_index.get();
- if removed == &*list.last_visited.get().unwrap().root() {
+ if removed == &*list.last_visited.get().unwrap() {
let visited = match (prev, added, next) {
(None, _, None) => {
// Such cases where parent had only one child should
@@ -213,7 +213,7 @@ impl ChildrenList {
prev
},
};
- list.last_visited.set(Some(JS::from_ref(visited)));
+ list.last_visited.set(Some(visited));
} else if added.len() != 1 {
// The replaced child isn't the last visited one, and there are
// 0 or more than 1 nodes to replace it. Special care must be
@@ -250,13 +250,13 @@ impl ChildrenList {
self.last_visited.set(None);
self.last_index.set(0u32);
} else if index < len as u32 {
- self.last_visited.set(Some(JS::from_ref(added[index as usize])));
+ self.last_visited.set(Some(added[index as usize]));
} else {
// Setting last visited to parent's last child serves no purpose,
// so the middle is arbitrarily chosen here in case the caller
// wants random access.
let middle = len / 2;
- self.last_visited.set(Some(JS::from_ref(added[middle])));
+ self.last_visited.set(Some(added[middle]));
self.last_index.set(middle as u32);
}
},
@@ -264,8 +264,7 @@ impl ChildrenList {
}
fn reset(&self) {
- self.last_visited.set(
- self.node.root().GetFirstChild().map(|node| JS::from_rooted(&node)));
+ self.last_visited.set(self.node.root().GetFirstChild().as_ref().map(Root::r));
self.last_index.set(0u32);
}
}