зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
1eb9c7fff1
Коммит
cd7cafe51e
|
@ -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 {
|
||||||
|
|
Загрузка…
Ссылка в новой задаче