Remove use of RootedVec in NodeList

This commit is contained in:
Anthony Ramine 2015-05-19 03:00:34 +02:00
parent 913c5677ab
commit 81cacdf820
3 changed files with 11 additions and 19 deletions

View file

@ -1028,17 +1028,11 @@ trait PrivateDocumentHelpers {
impl<'a> PrivateDocumentHelpers for JSRef<'a, Document> { impl<'a> PrivateDocumentHelpers for JSRef<'a, Document> {
fn create_node_list<F: Fn(JSRef<Node>) -> bool>(self, callback: F) -> Temporary<NodeList> { fn create_node_list<F: Fn(JSRef<Node>) -> bool>(self, callback: F) -> Temporary<NodeList> {
let window = self.window.root(); let window = self.window.root();
let document_element = self.GetDocumentElement().root(); let doc = self.GetDocumentElement().root();
let mut nodes = RootedVec::new(); let maybe_node = doc.r().map(NodeCast::from_ref);
if let Some(ref root) = document_element { let iter = maybe_node.iter().flat_map(|node| node.traverse_preorder())
for node in NodeCast::from_ref(root.r()).traverse_preorder() { .filter(|node| callback(node.root().r()));
let node = node.root(); NodeList::new_simple_list(window.r(), iter)
if callback(node.r()) {
nodes.push(JS::from_rooted(node.r()));
}
}
};
NodeList::new_simple_list(window.r(), &nodes)
} }
fn get_html_element(self) -> Option<Temporary<HTMLHtmlElement>> { fn get_html_element(self) -> Option<Temporary<HTMLHtmlElement>> {

View file

@ -913,12 +913,9 @@ impl<'a> NodeHelpers for JSRef<'a, Node> {
// https://dom.spec.whatwg.org/#dom-parentnode-queryselectorall // https://dom.spec.whatwg.org/#dom-parentnode-queryselectorall
#[allow(unsafe_code)] #[allow(unsafe_code)]
fn query_selector_all(self, selectors: DOMString) -> Fallible<Temporary<NodeList>> { fn query_selector_all(self, selectors: DOMString) -> Fallible<Temporary<NodeList>> {
let mut nodes = RootedVec::new();
for node in try!(unsafe { self.query_selector_iter(selectors) }) {
nodes.push(JS::from_rooted(node));
}
let window = window_from_node(self).root(); let window = window_from_node(self).root();
Ok(NodeList::new_simple_list(window.r(), &nodes)) let iter = try!(unsafe { self.query_selector_iter(selectors) });
Ok(NodeList::new_simple_list(window.r(), iter))
} }

View file

@ -6,7 +6,6 @@ use dom::bindings::codegen::Bindings::NodeListBinding;
use dom::bindings::codegen::Bindings::NodeListBinding::NodeListMethods; use dom::bindings::codegen::Bindings::NodeListBinding::NodeListMethods;
use dom::bindings::global::GlobalRef; use dom::bindings::global::GlobalRef;
use dom::bindings::js::{JS, JSRef, Rootable, Temporary}; use dom::bindings::js::{JS, JSRef, Rootable, Temporary};
use dom::bindings::trace::RootedVec;
use dom::bindings::utils::{Reflector, reflect_dom_object}; use dom::bindings::utils::{Reflector, reflect_dom_object};
use dom::node::{Node, NodeHelpers}; use dom::node::{Node, NodeHelpers};
use dom::window::Window; use dom::window::Window;
@ -39,8 +38,10 @@ impl NodeList {
GlobalRef::Window(window), NodeListBinding::Wrap) GlobalRef::Window(window), NodeListBinding::Wrap)
} }
pub fn new_simple_list(window: JSRef<Window>, elements: &RootedVec<JS<Node>>) -> Temporary<NodeList> { pub fn new_simple_list<T>(window: JSRef<Window>, iter: T)
NodeList::new(window, NodeListType::Simple((**elements).clone())) -> Temporary<NodeList>
where T: Iterator<Item=Temporary<Node>> {
NodeList::new(window, NodeListType::Simple(iter.map(JS::from_rooted).collect()))
} }
pub fn new_child_list(window: JSRef<Window>, node: JSRef<Node>) -> Temporary<NodeList> { pub fn new_child_list(window: JSRef<Window>, node: JSRef<Node>) -> Temporary<NodeList> {