Auto merge of #5674 - nox:get_unsound_ref_forever-misc, r=Ms2ger

This commit is contained in:
bors-servo 2015-04-14 04:56:08 -05:00
commit 2dfa28f186

View file

@ -826,19 +826,16 @@ impl<'a> NodeHelpers for JSRef<'a, Node> {
unsafe fn query_selector_iter(self, selectors: DOMString) unsafe fn query_selector_iter(self, selectors: DOMString)
-> Fallible<QuerySelectorIterator> { -> Fallible<QuerySelectorIterator> {
// Step 1. // Step 1.
let nodes;
let root = self.ancestors().last().root()
.map(|node| node.get_unsound_ref_forever())
.unwrap_or(self.clone());
match parse_author_origin_selector_list_from_str(selectors.as_slice()) { match parse_author_origin_selector_list_from_str(selectors.as_slice()) {
// Step 2. // Step 2.
Err(()) => return Err(Syntax), Err(()) => Err(Syntax),
// Step 3. // Step 3.
Ok(selectors) => { Ok(selectors) => {
nodes = QuerySelectorIterator::new(root.traverse_preorder(), selectors); let root = self.ancestors().last().root();
let root = root.r().unwrap_or(self);
Ok(QuerySelectorIterator::new(root.traverse_preorder(), selectors))
}
} }
};
Ok(nodes)
} }
// https://dom.spec.whatwg.org/#dom-parentnode-queryselectorall // https://dom.spec.whatwg.org/#dom-parentnode-queryselectorall
@ -1437,9 +1434,10 @@ impl Node {
// Step 7-8. // Step 7-8.
let reference_child = match child { let reference_child = match child {
Some(child) if child == node => node.next_sibling().map(|node| node.root().get_unsound_ref_forever()), Some(child) if child == node => node.next_sibling(),
_ => child _ => None
}; }.root();
let reference_child = reference_child.r().or(child);
// Step 9. // Step 9.
let document = document_from_node(parent).root(); let document = document_from_node(parent).root();
@ -2040,10 +2038,12 @@ impl<'a> NodeMethods for JSRef<'a, Node> {
} }
// Step 7-8. // Step 7-8.
let next_sibling = child.next_sibling().map(|node| node.root().get_unsound_ref_forever()); let child_next_sibling = child.next_sibling().root();
let reference_child = match next_sibling { let node_next_sibling = node.next_sibling().root();
Some(sibling) if sibling == node => node.next_sibling().map(|node| node.root().get_unsound_ref_forever()), let reference_child = if child_next_sibling.r() == Some(node) {
_ => next_sibling node_next_sibling.r()
} else {
child_next_sibling.r()
}; };
// Step 9. // Step 9.