Clean up Node::ReplaceChild

This commit is contained in:
David Zbarsky 2015-07-26 17:56:49 -04:00
parent 705c95dedb
commit cbd9695c73

View file

@ -2148,22 +2148,18 @@ impl<'a> NodeMethods for &'a Node {
NodeTypeId::CharacterData(CharacterDataTypeId::Text) if self.is_document() => NodeTypeId::CharacterData(CharacterDataTypeId::Text) if self.is_document() =>
return Err(HierarchyRequest), return Err(HierarchyRequest),
NodeTypeId::DocumentType if !self.is_document() => return Err(HierarchyRequest), NodeTypeId::DocumentType if !self.is_document() => return Err(HierarchyRequest),
NodeTypeId::DocumentFragment | NodeTypeId::Document => return Err(HierarchyRequest),
NodeTypeId::DocumentType | _ => ()
NodeTypeId::Element(..) |
NodeTypeId::CharacterData(..) => (),
NodeTypeId::Document => return Err(HierarchyRequest)
} }
// Step 6. // Step 6.
match self.type_id { if self.is_document() {
NodeTypeId::Document => {
match node.type_id() { match node.type_id() {
// Step 6.1 // Step 6.1
NodeTypeId::DocumentFragment => { NodeTypeId::DocumentFragment => {
// Step 6.1.1(b) // Step 6.1.1(b)
if node.children() if node.children()
.any(|c| c.r().is_text()) .any(|c| c.is_text())
{ {
return Err(HierarchyRequest); return Err(HierarchyRequest);
} }
@ -2176,7 +2172,7 @@ impl<'a> NodeMethods for &'a Node {
return Err(HierarchyRequest); return Err(HierarchyRequest);
} }
if child.following_siblings() if child.following_siblings()
.any(|child| child.r().is_doctype()) { .any(|child| child.is_doctype()) {
return Err(HierarchyRequest); return Err(HierarchyRequest);
} }
}, },
@ -2191,7 +2187,7 @@ impl<'a> NodeMethods for &'a Node {
return Err(HierarchyRequest); return Err(HierarchyRequest);
} }
if child.following_siblings() if child.following_siblings()
.any(|child| child.r().is_doctype()) .any(|child| child.is_doctype())
{ {
return Err(HierarchyRequest); return Err(HierarchyRequest);
} }
@ -2199,14 +2195,14 @@ impl<'a> NodeMethods for &'a Node {
// Step 6.3 // Step 6.3
NodeTypeId::DocumentType => { NodeTypeId::DocumentType => {
if self.children() if self.children()
.any(|c| c.r().is_doctype() && .any(|c| c.is_doctype() &&
c.r() != child) c.r() != child)
{ {
return Err(HierarchyRequest); return Err(HierarchyRequest);
} }
if self.children() if self.children()
.take_while(|c| c.r() != child) .take_while(|c| c.r() != child)
.any(|c| c.r().is_element()) .any(|c| c.is_element())
{ {
return Err(HierarchyRequest); return Err(HierarchyRequest);
} }
@ -2214,8 +2210,6 @@ impl<'a> NodeMethods for &'a Node {
NodeTypeId::CharacterData(..) => (), NodeTypeId::CharacterData(..) => (),
NodeTypeId::Document => unreachable!() NodeTypeId::Document => unreachable!()
} }
},
_ => ()
} }
// Ok if not caught by previous error checks. // Ok if not caught by previous error checks.
@ -2224,8 +2218,8 @@ impl<'a> NodeMethods for &'a Node {
} }
// Step 7-8. // Step 7-8.
let child_next_sibling = child.next_sibling.get().map(Root::from_rooted); let child_next_sibling = child.GetNextSibling();
let node_next_sibling = node.next_sibling.get().map(Root::from_rooted); let node_next_sibling = node.GetNextSibling();
let reference_child = if child_next_sibling.r() == Some(node) { let reference_child = if child_next_sibling.r() == Some(node) {
node_next_sibling.r() node_next_sibling.r()
} else { } else {