aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/dom/node.rs
diff options
context:
space:
mode:
authorBruno de Oliveira Abinader <bruno.d@partner.samsung.com>2014-03-17 23:39:08 -0400
committerBruno de Oliveira Abinader <bruno.d@partner.samsung.com>2014-03-26 09:49:08 -0400
commitb05e3666e4b48f647306c580d87a09f88a552f41 (patch)
tree2b25e0f8be5c2650db8c6ff450935ce4ab9d20b6 /src/components/script/dom/node.rs
parent990545c310ab801b6ec74b3765e5308ca2926cae (diff)
downloadservo-b05e3666e4b48f647306c580d87a09f88a552f41.tar.gz
servo-b05e3666e4b48f647306c580d87a09f88a552f41.zip
Cleaned up recursive code in Node.clone
Diffstat (limited to 'src/components/script/dom/node.rs')
-rw-r--r--src/components/script/dom/node.rs19
1 files changed, 6 insertions, 13 deletions
diff --git a/src/components/script/dom/node.rs b/src/components/script/dom/node.rs
index 95c09d309f2..9211925edb8 100644
--- a/src/components/script/dom/node.rs
+++ b/src/components/script/dom/node.rs
@@ -728,6 +728,7 @@ fn gather_abstract_nodes(cur: &JS<Node>, refs: &mut ~[JS<Node>], postorder: bool
}
/// Specifies whether children must be recursively cloned or not.
+#[deriving(Eq)]
pub enum CloneChildrenFlag {
CloneChildren,
DoNotCloneChildren
@@ -1289,16 +1290,6 @@ impl Node {
// http://dom.spec.whatwg.org/#concept-node-clone
pub fn clone(node: &JS<Node>, maybe_doc: Option<&JS<Document>>,
clone_children: CloneChildrenFlag) -> JS<Node> {
- fn clone_recursively(node: &JS<Node>, copy: &mut JS<Node>, doc: &JS<Document>) {
- for ref child in node.get().children() {
- let mut cloned = Node::clone(child, Some(doc), DoNotCloneChildren);
- match Node::pre_insert(&mut cloned, copy, None) {
- Ok(ref mut appended) => clone_recursively(child, appended, doc),
- Err(..) => fail!("an error occurred while appending children")
- }
- }
- }
-
// Step 1.
let mut document = match maybe_doc {
Some(doc) => doc.clone(),
@@ -1395,9 +1386,11 @@ impl Node {
// Step 5: cloning steps.
// Step 6.
- match clone_children {
- CloneChildren => clone_recursively(node, &mut copy, &document),
- DoNotCloneChildren => ()
+ if clone_children == CloneChildren {
+ for ref child in node.get().children() {
+ let mut child_copy = Node::clone(child, Some(&document), clone_children);
+ let _inserted_node = Node::pre_insert(&mut child_copy, &mut copy, None);
+ }
}
// Step 7.