diff options
author | Bruno de Oliveira Abinader <bruno.d@partner.samsung.com> | 2014-03-17 23:39:08 -0400 |
---|---|---|
committer | Bruno de Oliveira Abinader <bruno.d@partner.samsung.com> | 2014-03-26 09:49:08 -0400 |
commit | b05e3666e4b48f647306c580d87a09f88a552f41 (patch) | |
tree | 2b25e0f8be5c2650db8c6ff450935ce4ab9d20b6 /src/components/script/dom/node.rs | |
parent | 990545c310ab801b6ec74b3765e5308ca2926cae (diff) | |
download | servo-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.rs | 19 |
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. |