diff --git a/src/components/script/dom/attr.rs b/src/components/script/dom/attr.rs index 76bf3ff1ede..4822de7eb07 100644 --- a/src/components/script/dom/attr.rs +++ b/src/components/script/dom/attr.rs @@ -65,8 +65,8 @@ impl Attr { } pub fn set_value(&mut self, set_type: AttrSettingType, value: DOMString) { - let owner = self.owner.root(); - let node: &JSRef = NodeCast::from_ref(&*owner); + let mut owner = self.owner.root(); + let node: &mut JSRef = NodeCast::from_mut_ref(&mut *owner); let namespace_is_null = self.namespace == namespace::Null; match set_type { diff --git a/src/components/script/dom/element.rs b/src/components/script/dom/element.rs index 0e5795a69a0..2ee655f6156 100644 --- a/src/components/script/dom/element.rs +++ b/src/components/script/dom/element.rs @@ -301,13 +301,14 @@ impl<'a> AttributeHandlers for JSRef<'a, Element> { None => (), Some(idx) => { { - let node: &JSRef = NodeCast::from_ref(self); + let node: &mut JSRef = NodeCast::from_mut_ref(self); node.wait_until_safe_to_modify_dom(); } if namespace == namespace::Null { let removed_raw_value = self.get().attrs.get(idx).root().Value(); - vtable_for(NodeCast::from_ref(self)).before_remove_attr(local_name.clone(), removed_raw_value); + vtable_for(NodeCast::from_mut_ref(self)) + .before_remove_attr(local_name.clone(), removed_raw_value); } self.get_mut().attrs.remove(idx); diff --git a/src/components/script/dom/node.rs b/src/components/script/dom/node.rs index a102f916505..6a3d0aa14f5 100644 --- a/src/components/script/dom/node.rs +++ b/src/components/script/dom/node.rs @@ -244,24 +244,25 @@ impl<'a> PrivateNodeHelpers for JSRef<'a, Node> { let document = document_from_node(self).root(); if self.is_in_doc() { - for node in self.traverse_preorder() { - vtable_for(&node).bind_to_tree(); + for mut node in self.traverse_preorder() { + vtable_for(&mut node).bind_to_tree(); } } - self.parent_node().root().map(|parent| vtable_for(&*parent).child_inserted(self)); + let mut parent = self.parent_node().root(); + parent.as_mut().map(|parent| vtable_for(&mut **parent).child_inserted(self)); document.deref().content_changed(); } - // http://dom.spec.whatwg.org/#node-is-removed + // http://spec.whatwg.org/#node-is-removed fn node_removed(&self) { assert!(self.parent_node().is_none()); let document = document_from_node(self).root(); - for node in self.traverse_preorder() { + for mut node in self.traverse_preorder() { // XXX how about if the node wasn't in the tree in the first place? - vtable_for(&node).unbind_from_tree(); + vtable_for(&mut node).unbind_from_tree(); } document.deref().content_changed(); diff --git a/src/components/script/dom/virtualmethods.rs b/src/components/script/dom/virtualmethods.rs index bf4681fab3b..f67d97985e1 100644 --- a/src/components/script/dom/virtualmethods.rs +++ b/src/components/script/dom/virtualmethods.rs @@ -74,34 +74,34 @@ pub trait VirtualMethods { /// method call on the trait object will invoke the corresponding method on the /// concrete type, propagating up the parent hierarchy unless otherwise /// interrupted. -pub fn vtable_for<'a>(node: &JSRef) -> ~VirtualMethods: { +pub fn vtable_for<'a>(node: &'a mut JSRef) -> &'a mut VirtualMethods: { match node.get().type_id { ElementNodeTypeId(HTMLImageElementTypeId) => { - let element: &JSRef = HTMLImageElementCast::to_ref(node).unwrap(); - ~element.clone() as ~VirtualMethods: + let element: &mut JSRef = HTMLImageElementCast::to_mut_ref(node).unwrap(); + element as &mut VirtualMethods: } ElementNodeTypeId(HTMLIFrameElementTypeId) => { - let element: &JSRef = HTMLIFrameElementCast::to_ref(node).unwrap(); - ~element.clone() as ~VirtualMethods: + let element: &mut JSRef = HTMLIFrameElementCast::to_mut_ref(node).unwrap(); + element as &mut VirtualMethods: } ElementNodeTypeId(HTMLObjectElementTypeId) => { - let element: &JSRef = HTMLObjectElementCast::to_ref(node).unwrap(); - ~element.clone() as ~VirtualMethods: + let element: &mut JSRef = HTMLObjectElementCast::to_mut_ref(node).unwrap(); + element as &mut VirtualMethods: } ElementNodeTypeId(HTMLStyleElementTypeId) => { - let element: &JSRef = HTMLStyleElementCast::to_ref(node).unwrap(); - ~element.clone() as ~VirtualMethods: + let element: &mut JSRef = HTMLStyleElementCast::to_mut_ref(node).unwrap(); + element as &mut VirtualMethods: } ElementNodeTypeId(ElementTypeId) => { - let element: &JSRef = ElementCast::to_ref(node).unwrap(); - ~element.clone() as ~VirtualMethods: + let element: &mut JSRef = ElementCast::to_mut_ref(node).unwrap(); + element as &mut VirtualMethods: } ElementNodeTypeId(_) => { - let element: &JSRef = HTMLElementCast::to_ref(node).unwrap(); - ~element.clone() as ~VirtualMethods: + let element: &mut JSRef = HTMLElementCast::to_mut_ref(node).unwrap(); + element as &mut VirtualMethods: } _ => { - ~node.clone() as ~VirtualMethods: + node as &mut VirtualMethods: } } }