diff options
author | Josh Matthews <josh@joshmatthews.net> | 2014-04-24 13:01:31 -0400 |
---|---|---|
committer | Josh Matthews <josh@joshmatthews.net> | 2014-05-03 14:18:31 -0400 |
commit | 46a33b4b38666252245af5dd3a38bb6f57ff8a8e (patch) | |
tree | 71e5b5a0f2e9b942a8526847ceb2a3791912e63e /src/components/script/dom/virtualmethods.rs | |
parent | 895e9ee37fb572f7750c02de4fc51060990c51be (diff) | |
download | servo-46a33b4b38666252245af5dd3a38bb6f57ff8a8e.tar.gz servo-46a33b4b38666252245af5dd3a38bb6f57ff8a8e.zip |
Fix up the virtual method unsoundness.
Diffstat (limited to 'src/components/script/dom/virtualmethods.rs')
-rw-r--r-- | src/components/script/dom/virtualmethods.rs | 28 |
1 files changed, 14 insertions, 14 deletions
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<Node>) -> ~VirtualMethods: { +pub fn vtable_for<'a>(node: &'a mut JSRef<Node>) -> &'a mut VirtualMethods: { match node.get().type_id { ElementNodeTypeId(HTMLImageElementTypeId) => { - let element: &JSRef<HTMLImageElement> = HTMLImageElementCast::to_ref(node).unwrap(); - ~element.clone() as ~VirtualMethods: + let element: &mut JSRef<HTMLImageElement> = HTMLImageElementCast::to_mut_ref(node).unwrap(); + element as &mut VirtualMethods: } ElementNodeTypeId(HTMLIFrameElementTypeId) => { - let element: &JSRef<HTMLIFrameElement> = HTMLIFrameElementCast::to_ref(node).unwrap(); - ~element.clone() as ~VirtualMethods: + let element: &mut JSRef<HTMLIFrameElement> = HTMLIFrameElementCast::to_mut_ref(node).unwrap(); + element as &mut VirtualMethods: } ElementNodeTypeId(HTMLObjectElementTypeId) => { - let element: &JSRef<HTMLObjectElement> = HTMLObjectElementCast::to_ref(node).unwrap(); - ~element.clone() as ~VirtualMethods: + let element: &mut JSRef<HTMLObjectElement> = HTMLObjectElementCast::to_mut_ref(node).unwrap(); + element as &mut VirtualMethods: } ElementNodeTypeId(HTMLStyleElementTypeId) => { - let element: &JSRef<HTMLStyleElement> = HTMLStyleElementCast::to_ref(node).unwrap(); - ~element.clone() as ~VirtualMethods: + let element: &mut JSRef<HTMLStyleElement> = HTMLStyleElementCast::to_mut_ref(node).unwrap(); + element as &mut VirtualMethods: } ElementNodeTypeId(ElementTypeId) => { - let element: &JSRef<Element> = ElementCast::to_ref(node).unwrap(); - ~element.clone() as ~VirtualMethods: + let element: &mut JSRef<Element> = ElementCast::to_mut_ref(node).unwrap(); + element as &mut VirtualMethods: } ElementNodeTypeId(_) => { - let element: &JSRef<HTMLElement> = HTMLElementCast::to_ref(node).unwrap(); - ~element.clone() as ~VirtualMethods: + let element: &mut JSRef<HTMLElement> = HTMLElementCast::to_mut_ref(node).unwrap(); + element as &mut VirtualMethods: } _ => { - ~node.clone() as ~VirtualMethods: + node as &mut VirtualMethods: } } } |