aboutsummaryrefslogtreecommitdiffstats
path: root/components
diff options
context:
space:
mode:
authorChris Paris <cap@chrisparis.org>2015-04-01 16:10:43 -1000
committerChris Paris <cap@chrisparis.org>2015-04-06 12:59:54 -1000
commitf76a137344dfcc78d4d7c01dced36dad3591e35e (patch)
tree5f4452a7ec3480aa89e29db4fc4c758bdb2ed733 /components
parent6422f3857430a50a320bf004023988a1d0c22273 (diff)
downloadservo-f76a137344dfcc78d4d7c01dced36dad3591e35e.tar.gz
servo-f76a137344dfcc78d4d7c01dced36dad3591e35e.zip
Produce output of fragment parsing in &mut RootedVec<JS<Node>> argument
Diffstat (limited to 'components')
-rw-r--r--components/script/dom/node.rs16
-rw-r--r--components/script/parse/html.rs11
2 files changed, 15 insertions, 12 deletions
diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs
index 3b49ba01ba9..7cd01875b15 100644
--- a/components/script/dom/node.rs
+++ b/components/script/dom/node.rs
@@ -936,16 +936,16 @@ impl<'a> NodeHelpers<'a> for JSRef<'a, Node> {
fn parse_fragment(self, markup: DOMString) -> Fallible<Temporary<DocumentFragment>> {
let context_node: JSRef<Node> = NodeCast::from_ref(self);
let context_document = document_from_node(self).root();
- let new_children =
- if context_document.r().is_html_document() {
- parse_html_fragment(context_node, markup)
- } else {
- // FIXME: XML case
- unimplemented!()
- };
+ let mut new_children: RootedVec<JS<Node>> = RootedVec::new();
+ if context_document.r().is_html_document() {
+ parse_html_fragment(context_node, markup, &mut new_children);
+ } else {
+ // FIXME: XML case
+ unimplemented!();
+ }
let fragment = DocumentFragment::new(context_document.r()).root();
let fragment_node: JSRef<Node> = NodeCast::from_ref(fragment.r());
- for node in new_children {
+ for node in new_children.iter() {
fragment_node.AppendChild(node.root().r()).unwrap();
}
Ok(Temporary::from_rooted(fragment.r()))
diff --git a/components/script/parse/html.rs b/components/script/parse/html.rs
index f6cf86bf122..2aecd9264e9 100644
--- a/components/script/parse/html.rs
+++ b/components/script/parse/html.rs
@@ -12,6 +12,7 @@ use dom::bindings::codegen::InheritTypes::{DocumentTypeCast, TextCast, CommentCa
use dom::bindings::codegen::InheritTypes::ProcessingInstructionCast;
use dom::bindings::codegen::InheritTypes::HTMLFormElementDerived;
use dom::bindings::js::{JS, JSRef, Temporary, OptionalRootable, Root};
+use dom::bindings::trace::RootedVec;
use dom::comment::Comment;
use dom::document::{Document, DocumentHelpers};
use dom::document::{DocumentSource, IsHTMLDocument};
@@ -331,7 +332,9 @@ pub fn parse_html(document: JSRef<Document>,
}
// https://html.spec.whatwg.org/multipage/syntax.html#parsing-html-fragments
-pub fn parse_html_fragment(context_node: JSRef<Node>, input: DOMString) -> Vec<Temporary<Node>> {
+pub fn parse_html_fragment(context_node: JSRef<Node>,
+ input: DOMString,
+ output: &mut RootedVec<JS<Node>>) {
let window = window_from_node(context_node).root();
let context_document = document_from_node(context_node).root();
let url = context_document.r().url();
@@ -357,7 +360,7 @@ pub fn parse_html_fragment(context_node: JSRef<Node>, input: DOMString) -> Vec<T
// Step 14.
let root_element = document.r().GetDocumentElement().expect("no document element").root();
let root_node: JSRef<Node> = NodeCast::from_ref(root_element.r());
- root_node.children()
- .map(|node| Temporary::from_rooted(node))
- .collect()
+ for child in root_node.children() {
+ output.push(JS::from_rooted(child));
+ }
}