aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMs2ger <ms2ger@gmail.com>2014-02-25 16:18:13 +0100
committerMs2ger <ms2ger@gmail.com>2014-02-26 14:50:57 +0100
commit58b317837b315884014fc189e16a0a00aef99a60 (patch)
treea8d04e75b3a4e76fc3d1854b449a7bb7987431a0 /src
parent33792db657e0053c415c26b761cbdc2cf5ae2060 (diff)
downloadservo-58b317837b315884014fc189e16a0a00aef99a60.tar.gz
servo-58b317837b315884014fc189e16a0a00aef99a60.zip
Cleanup Element::set_attribute.
Diffstat (limited to 'src')
-rw-r--r--src/components/script/dom/attr.rs7
-rw-r--r--src/components/script/dom/element.rs31
2 files changed, 18 insertions, 20 deletions
diff --git a/src/components/script/dom/attr.rs b/src/components/script/dom/attr.rs
index 3cf978d69c4..906e1b7f02c 100644
--- a/src/components/script/dom/attr.rs
+++ b/src/components/script/dom/attr.rs
@@ -9,8 +9,6 @@ use dom::window::Window;
use servo_util::namespace::{Namespace, Null};
use servo_util::str::DOMString;
-use std::util;
-
#[deriving(Encodable)]
pub struct Attr {
reflector_: Reflector,
@@ -63,9 +61,8 @@ impl Attr {
reflect_dom_object(~attr, window, AttrBinding::Wrap)
}
- pub fn set_value(&mut self, mut value: DOMString) -> DOMString {
- util::swap(&mut self.value, &mut value);
- value
+ pub fn set_value(&mut self, value: DOMString) {
+ self.value = value;
}
pub fn value_ref<'a>(&'a self) -> &'a str {
diff --git a/src/components/script/dom/element.rs b/src/components/script/dom/element.rs
index eed0bc9b237..cda20ef84a5 100644
--- a/src/components/script/dom/element.rs
+++ b/src/components/script/dom/element.rs
@@ -204,22 +204,23 @@ impl Element {
self.node.wait_until_safe_to_modify_dom();
// FIXME: reduce the time of `value.clone()`.
- let mut old_raw_value: Option<DOMString> = None;
- for attr in self.attrs.mut_iter() {
- let attr = attr.get_mut();
- if attr.local_name == local_name {
- old_raw_value = Some(attr.set_value(value.clone()));
- break;
- }
- }
+ let idx = self.attrs.iter().position(|attr| {
+ attr.get().local_name == local_name
+ });
+ let old_raw_value = idx.map(|idx| self.attrs[idx].get().Value());
- if old_raw_value.is_none() {
- let doc = self.node.owner_doc();
- let doc = doc.get();
- let new_attr = Attr::new_ns(doc.window.get(), local_name.clone(), value.clone(),
- name.clone(), namespace.clone(),
- prefix);
- self.attrs.push(new_attr);
+ match idx {
+ Some(idx) => {
+ self.attrs[idx].get_mut().set_value(value.clone());
+ }
+ None => {
+ let doc = self.node.owner_doc();
+ let doc = doc.get();
+ let new_attr = Attr::new_ns(doc.window.get(), local_name.clone(), value.clone(),
+ name.clone(), namespace.clone(),
+ prefix);
+ self.attrs.push(new_attr);
+ }
}
if namespace == namespace::Null {