servo: Merge #6783 - Clean up Node::ReplaceChild (from dzbarsky:replacechild); r=Ms2ger

Source-Repo: https://github.com/servo/servo
Source-Revision: 9e8d231196693a660a1e70d535d1c3ab290ddf39
This commit is contained in:
David Zbarsky 2015-07-30 02:11:57 -06:00
Родитель 1eb9c7fff1
Коммит cd7cafe51e
1 изменённых файлов: 61 добавлений и 67 удалений

Просмотреть файл

@ -2153,74 +2153,68 @@ 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.is_text())
.any(|c| c.r().is_text()) {
{ return Err(HierarchyRequest);
return Err(HierarchyRequest); }
} match node.child_elements().count() {
match node.child_elements().count() { 0 => (),
0 => (), // Step 6.1.2
// Step 6.1.2 1 => {
1 => { if self.child_elements()
if self.child_elements() .any(|c| NodeCast::from_ref(c.r()) != child) {
.any(|c| NodeCast::from_ref(c.r()) != child) { return Err(HierarchyRequest);
return Err(HierarchyRequest); }
} if child.following_siblings()
if child.following_siblings() .any(|child| child.is_doctype()) {
.any(|child| child.r().is_doctype()) { return Err(HierarchyRequest);
return Err(HierarchyRequest); }
} },
}, // Step 6.1.1(a)
// Step 6.1.1(a) _ => return Err(HierarchyRequest)
_ => return Err(HierarchyRequest) }
} },
}, // Step 6.2
// Step 6.2 NodeTypeId::Element(..) => {
NodeTypeId::Element(..) => { if self.child_elements()
if self.child_elements() .any(|c| NodeCast::from_ref(c.r()) != child) {
.any(|c| NodeCast::from_ref(c.r()) != child) { return Err(HierarchyRequest);
return Err(HierarchyRequest); }
} if child.following_siblings()
if child.following_siblings() .any(|child| child.is_doctype())
.any(|child| child.r().is_doctype()) {
{ return Err(HierarchyRequest);
return Err(HierarchyRequest); }
} },
}, // Step 6.3
// Step 6.3 NodeTypeId::DocumentType => {
NodeTypeId::DocumentType => { if self.children()
if self.children() .any(|c| c.is_doctype() &&
.any(|c| c.r().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.is_element())
.any(|c| c.r().is_element()) {
{ return Err(HierarchyRequest);
return Err(HierarchyRequest); }
} },
}, 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.
@ -2229,8 +2223,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 {