mirror of
https://github.com/servo/servo.git
synced 2025-07-23 15:23:42 +01:00
Optimize Node.normalize()
.
Do not copy the discarded node's text data, borrow it. Closes #6658.
This commit is contained in:
parent
36d732a60a
commit
402a2a8717
2 changed files with 7 additions and 3 deletions
|
@ -79,7 +79,7 @@ impl<'a> CharacterDataMethods for &'a CharacterData {
|
||||||
|
|
||||||
// https://dom.spec.whatwg.org/#dom-characterdata-appenddatadata
|
// https://dom.spec.whatwg.org/#dom-characterdata-appenddatadata
|
||||||
fn AppendData(self, data: DOMString) {
|
fn AppendData(self, data: DOMString) {
|
||||||
self.data.borrow_mut().push_str(&data);
|
self.append_data(&*data);
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://dom.spec.whatwg.org/#dom-characterdata-insertdataoffset-data
|
// https://dom.spec.whatwg.org/#dom-characterdata-insertdataoffset-data
|
||||||
|
@ -159,6 +159,7 @@ pub enum CharacterDataTypeId {
|
||||||
|
|
||||||
pub trait CharacterDataHelpers<'a> {
|
pub trait CharacterDataHelpers<'a> {
|
||||||
fn data(self) -> Ref<'a, DOMString>;
|
fn data(self) -> Ref<'a, DOMString>;
|
||||||
|
fn append_data(self, data: &str);
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> CharacterDataHelpers<'a> for &'a CharacterData {
|
impl<'a> CharacterDataHelpers<'a> for &'a CharacterData {
|
||||||
|
@ -166,6 +167,10 @@ impl<'a> CharacterDataHelpers<'a> for &'a CharacterData {
|
||||||
fn data(self) -> Ref<'a, DOMString> {
|
fn data(self) -> Ref<'a, DOMString> {
|
||||||
self.data.borrow()
|
self.data.borrow()
|
||||||
}
|
}
|
||||||
|
#[inline]
|
||||||
|
fn append_data(self, data: &str) {
|
||||||
|
self.data.borrow_mut().push_str(data)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(unsafe_code)]
|
#[allow(unsafe_code)]
|
||||||
|
|
|
@ -2330,10 +2330,9 @@ impl<'a> NodeMethods for &'a Node {
|
||||||
} else {
|
} else {
|
||||||
match prev_text {
|
match prev_text {
|
||||||
Some(ref text_node) => {
|
Some(ref text_node) => {
|
||||||
let text_node = text_node.clone();
|
|
||||||
let prev_characterdata =
|
let prev_characterdata =
|
||||||
CharacterDataCast::from_ref(text_node.r());
|
CharacterDataCast::from_ref(text_node.r());
|
||||||
let _ = prev_characterdata.AppendData(characterdata.Data());
|
prev_characterdata.append_data(&**characterdata.data());
|
||||||
self.remove_child(child.r());
|
self.remove_child(child.r());
|
||||||
},
|
},
|
||||||
None => prev_text = Some(Root::from_ref(text))
|
None => prev_text = Some(Root::from_ref(text))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue