mirror of
https://github.com/servo/servo.git
synced 2025-06-22 16:18:59 +01:00
Cleaned up recursive code in Node.clone
This commit is contained in:
parent
990545c310
commit
b05e3666e4
1 changed files with 6 additions and 13 deletions
|
@ -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.
|
/// Specifies whether children must be recursively cloned or not.
|
||||||
|
#[deriving(Eq)]
|
||||||
pub enum CloneChildrenFlag {
|
pub enum CloneChildrenFlag {
|
||||||
CloneChildren,
|
CloneChildren,
|
||||||
DoNotCloneChildren
|
DoNotCloneChildren
|
||||||
|
@ -1289,16 +1290,6 @@ impl Node {
|
||||||
// http://dom.spec.whatwg.org/#concept-node-clone
|
// http://dom.spec.whatwg.org/#concept-node-clone
|
||||||
pub fn clone(node: &JS<Node>, maybe_doc: Option<&JS<Document>>,
|
pub fn clone(node: &JS<Node>, maybe_doc: Option<&JS<Document>>,
|
||||||
clone_children: CloneChildrenFlag) -> JS<Node> {
|
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.
|
// Step 1.
|
||||||
let mut document = match maybe_doc {
|
let mut document = match maybe_doc {
|
||||||
Some(doc) => doc.clone(),
|
Some(doc) => doc.clone(),
|
||||||
|
@ -1395,9 +1386,11 @@ impl Node {
|
||||||
// Step 5: cloning steps.
|
// Step 5: cloning steps.
|
||||||
|
|
||||||
// Step 6.
|
// Step 6.
|
||||||
match clone_children {
|
if clone_children == CloneChildren {
|
||||||
CloneChildren => clone_recursively(node, &mut copy, &document),
|
for ref child in node.get().children() {
|
||||||
DoNotCloneChildren => ()
|
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.
|
// Step 7.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue