diff --git a/src/components/script/dom/attr.rs b/src/components/script/dom/attr.rs index c8e5ad88527d..278481484ec3 100644 --- a/src/components/script/dom/attr.rs +++ b/src/components/script/dom/attr.rs @@ -71,10 +71,6 @@ impl Reflectable for Attr { fn reflector<'a>(&'a self) -> &'a Reflector { &self.reflector_ } - - fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector { - &mut self.reflector_ - } } impl Attr { diff --git a/src/components/script/dom/attrlist.rs b/src/components/script/dom/attrlist.rs index ab4fa979a989..8f4c6ca07c45 100644 --- a/src/components/script/dom/attrlist.rs +++ b/src/components/script/dom/attrlist.rs @@ -57,8 +57,4 @@ impl Reflectable for AttrList { fn reflector<'a>(&'a self) -> &'a Reflector { &self.reflector_ } - - fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector { - &mut self.reflector_ - } } diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index 3a0f5cddb004..f546f4cdd335 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -1838,7 +1838,7 @@ def definition_body(self): %s - raw.mut_reflector().set_jsobject(obj); + raw.reflector().set_jsobject(obj); return raw;""" % CreateBindingJSObject(self.descriptor, "scope") else: @@ -1848,7 +1848,7 @@ def definition_body(self): let proto = GetProtoObject(aCx, obj, obj); JS_SetPrototype(aCx, obj, proto); }); - raw.mut_reflector().set_jsobject(obj); + raw.reflector().set_jsobject(obj); return raw;""" % CreateBindingJSObject(self.descriptor) diff --git a/src/components/script/dom/bindings/element.rs b/src/components/script/dom/bindings/element.rs index 545ae499a668..53069b94062c 100644 --- a/src/components/script/dom/bindings/element.rs +++ b/src/components/script/dom/bindings/element.rs @@ -48,10 +48,6 @@ macro_rules! generate_cacheable_wrapper_base( fn reflector<'a>(&'a self) -> &'a Reflector { self.$parent.reflector() } - - fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector { - self.$parent.mut_reflector() - } } ) ) diff --git a/src/components/script/dom/bindings/js.rs b/src/components/script/dom/bindings/js.rs index e2b2665c4157..b72e8c9e42dc 100644 --- a/src/components/script/dom/bindings/js.rs +++ b/src/components/script/dom/bindings/js.rs @@ -171,12 +171,6 @@ impl Reflectable for JS { (*self.unsafe_get()).reflector() } } - - fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector { - unsafe { - (*self.unsafe_get()).mut_reflector() - } - } } impl JS { @@ -500,8 +494,4 @@ impl<'a, T: Reflectable> Reflectable for JSRef<'a, T> { fn reflector<'a>(&'a self) -> &'a Reflector { self.deref().reflector() } - - fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector { - self.deref_mut().mut_reflector() - } } diff --git a/src/components/script/dom/bindings/utils.rs b/src/components/script/dom/bindings/utils.rs index 5eb3486c20c8..ab81ed2c8fc3 100644 --- a/src/components/script/dom/bindings/utils.rs +++ b/src/components/script/dom/bindings/utils.rs @@ -14,8 +14,9 @@ use servo_util::str::DOMString; use collections::hashmap::HashMap; use libc; use libc::c_uint; -use std::mem; +use std::cell::Cell; use std::cmp::Eq; +use std::mem; use std::ptr; use std::ptr::null; use std::slice; @@ -401,7 +402,6 @@ pub fn initialize_global(global: *mut JSObject) { pub trait Reflectable { fn reflector<'a>(&'a self) -> &'a Reflector; - fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector; } pub fn reflect_dom_object @@ -415,31 +415,33 @@ pub fn reflect_dom_object #[allow(raw_pointer_deriving)] #[deriving(Eq)] pub struct Reflector { - object: *mut JSObject, + object: Cell<*mut JSObject>, } impl Reflector { #[inline] pub fn get_jsobject(&self) -> *mut JSObject { - self.object + self.object.get() } - pub fn set_jsobject(&mut self, object: *mut JSObject) { - assert!(self.object.is_null()); + pub fn set_jsobject(&self, object: *mut JSObject) { + assert!(self.object.get().is_null()); assert!(object.is_not_null()); - self.object = object; + self.object.set(object); } /// Return a pointer to the memory location at which the JS reflector object is stored. /// Used by Temporary values to root the reflector, as required by the JSAPI rooting /// APIs. - pub fn rootable<'a>(&'a mut self) -> &'a mut *mut JSObject { - &mut self.object + pub fn rootable(&self) -> *mut *mut JSObject { + &self.object as *Cell<*mut JSObject> + as *mut Cell<*mut JSObject> + as *mut *mut JSObject } pub fn new() -> Reflector { Reflector { - object: ptr::mut_null(), + object: Cell::new(ptr::mut_null()), } } } diff --git a/src/components/script/dom/blob.rs b/src/components/script/dom/blob.rs index 8f30bdcf2b06..a6c9b0a70652 100644 --- a/src/components/script/dom/blob.rs +++ b/src/components/script/dom/blob.rs @@ -40,8 +40,4 @@ impl Reflectable for Blob { fn reflector<'a>(&'a self) -> &'a Reflector { &self.reflector_ } - - fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector { - &mut self.reflector_ - } } diff --git a/src/components/script/dom/characterdata.rs b/src/components/script/dom/characterdata.rs index 309c4de1cd5c..dc83f3b90c90 100644 --- a/src/components/script/dom/characterdata.rs +++ b/src/components/script/dom/characterdata.rs @@ -114,8 +114,4 @@ impl Reflectable for CharacterData { fn reflector<'a>(&'a self) -> &'a Reflector { self.node.reflector() } - - fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector { - self.node.mut_reflector() - } } diff --git a/src/components/script/dom/clientrect.rs b/src/components/script/dom/clientrect.rs index 744682511e1c..11731b54daaa 100644 --- a/src/components/script/dom/clientrect.rs +++ b/src/components/script/dom/clientrect.rs @@ -79,8 +79,4 @@ impl Reflectable for ClientRect { fn reflector<'a>(&'a self) -> &'a Reflector { &self.reflector_ } - - fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector { - &mut self.reflector_ - } } diff --git a/src/components/script/dom/clientrectlist.rs b/src/components/script/dom/clientrectlist.rs index 169fce8ef0a7..9a722108d01c 100644 --- a/src/components/script/dom/clientrectlist.rs +++ b/src/components/script/dom/clientrectlist.rs @@ -63,8 +63,4 @@ impl Reflectable for ClientRectList { fn reflector<'a>(&'a self) -> &'a Reflector { &self.reflector_ } - - fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector { - &mut self.reflector_ - } } diff --git a/src/components/script/dom/console.rs b/src/components/script/dom/console.rs index bb1531d27f36..bd270cc924e5 100644 --- a/src/components/script/dom/console.rs +++ b/src/components/script/dom/console.rs @@ -70,8 +70,4 @@ impl Reflectable for Console { fn reflector<'a>(&'a self) -> &'a Reflector { &self.reflector_ } - - fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector { - &mut self.reflector_ - } } diff --git a/src/components/script/dom/customevent.rs b/src/components/script/dom/customevent.rs index 9abd64b215e7..d3ec1ae3f1c3 100644 --- a/src/components/script/dom/customevent.rs +++ b/src/components/script/dom/customevent.rs @@ -81,8 +81,4 @@ impl Reflectable for CustomEvent { fn reflector<'a>(&'a self) -> &'a Reflector { self.event.reflector() } - - fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector { - self.event.mut_reflector() - } } diff --git a/src/components/script/dom/document.rs b/src/components/script/dom/document.rs index 173fa84b5f5e..2ff798d06157 100644 --- a/src/components/script/dom/document.rs +++ b/src/components/script/dom/document.rs @@ -251,10 +251,6 @@ impl Reflectable for Document { fn reflector<'a>(&'a self) -> &'a Reflector { self.node.reflector() } - - fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector { - self.node.mut_reflector() - } } trait PrivateDocumentHelpers { diff --git a/src/components/script/dom/domexception.rs b/src/components/script/dom/domexception.rs index 262ae5c3fa8f..84cfd96ec36c 100644 --- a/src/components/script/dom/domexception.rs +++ b/src/components/script/dom/domexception.rs @@ -83,10 +83,6 @@ impl Reflectable for DOMException { fn reflector<'a>(&'a self) -> &'a Reflector { &self.reflector_ } - - fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector { - &mut self.reflector_ - } } pub trait DOMExceptionMethods { diff --git a/src/components/script/dom/domimplementation.rs b/src/components/script/dom/domimplementation.rs index 370a233f67d3..eb3d22494b84 100644 --- a/src/components/script/dom/domimplementation.rs +++ b/src/components/script/dom/domimplementation.rs @@ -43,10 +43,6 @@ impl Reflectable for DOMImplementation { fn reflector<'a>(&'a self) -> &'a Reflector { &self.reflector_ } - - fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector { - &mut self.reflector_ - } } pub trait DOMImplementationMethods { diff --git a/src/components/script/dom/domparser.rs b/src/components/script/dom/domparser.rs index 540de38727a2..a5b8ab22fc58 100644 --- a/src/components/script/dom/domparser.rs +++ b/src/components/script/dom/domparser.rs @@ -64,8 +64,4 @@ impl Reflectable for DOMParser { fn reflector<'a>(&'a self) -> &'a Reflector { &self.reflector_ } - - fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector { - &mut self.reflector_ - } } diff --git a/src/components/script/dom/domtokenlist.rs b/src/components/script/dom/domtokenlist.rs index b0a6f2c73c28..23ff4a7c788f 100644 --- a/src/components/script/dom/domtokenlist.rs +++ b/src/components/script/dom/domtokenlist.rs @@ -41,10 +41,6 @@ impl Reflectable for DOMTokenList { fn reflector<'a>(&'a self) -> &'a Reflector { &self.reflector_ } - - fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector { - &mut self.reflector_ - } } trait PrivateDOMTokenListHelpers { diff --git a/src/components/script/dom/element.rs b/src/components/script/dom/element.rs index d9d498d72eb1..2be875e6d40a 100644 --- a/src/components/script/dom/element.rs +++ b/src/components/script/dom/element.rs @@ -62,10 +62,6 @@ impl Reflectable for Element { fn reflector<'a>(&'a self) -> &'a Reflector { self.node.reflector() } - - fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector { - self.node.mut_reflector() - } } #[deriving(Eq,Encodable)] diff --git a/src/components/script/dom/event.rs b/src/components/script/dom/event.rs index a151aed50263..8d7dadc86b38 100644 --- a/src/components/script/dom/event.rs +++ b/src/components/script/dom/event.rs @@ -199,8 +199,4 @@ impl Reflectable for Event { fn reflector<'a>(&'a self) -> &'a Reflector { &self.reflector_ } - - fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector { - &mut self.reflector_ - } } diff --git a/src/components/script/dom/eventtarget.rs b/src/components/script/dom/eventtarget.rs index 7a192d58ab62..e4a62684e156 100644 --- a/src/components/script/dom/eventtarget.rs +++ b/src/components/script/dom/eventtarget.rs @@ -278,10 +278,6 @@ impl Reflectable for EventTarget { fn reflector<'a>(&'a self) -> &'a Reflector { &self.reflector_ } - - fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector { - &mut self.reflector_ - } } impl<'a> VirtualMethods for JSRef<'a, EventTarget> { diff --git a/src/components/script/dom/formdata.rs b/src/components/script/dom/formdata.rs index 40dc6935fe68..eeea9cc32f05 100644 --- a/src/components/script/dom/formdata.rs +++ b/src/components/script/dom/formdata.rs @@ -70,8 +70,4 @@ impl Reflectable for FormData { fn reflector<'a>(&'a self) -> &'a Reflector { &self.reflector_ } - - fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector { - &mut self.reflector_ - } } diff --git a/src/components/script/dom/htmlcollection.rs b/src/components/script/dom/htmlcollection.rs index aeb506938f8d..e49926e33b07 100644 --- a/src/components/script/dom/htmlcollection.rs +++ b/src/components/script/dom/htmlcollection.rs @@ -221,8 +221,4 @@ impl Reflectable for HTMLCollection { fn reflector<'a>(&'a self) -> &'a Reflector { &self.reflector_ } - - fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector { - &mut self.reflector_ - } } diff --git a/src/components/script/dom/location.rs b/src/components/script/dom/location.rs index 64bbeddede7d..05e86f5b07d5 100644 --- a/src/components/script/dom/location.rs +++ b/src/components/script/dom/location.rs @@ -49,8 +49,4 @@ impl Reflectable for Location { fn reflector<'a>(&'a self) -> &'a Reflector { &self.reflector_ } - - fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector { - &mut self.reflector_ - } } diff --git a/src/components/script/dom/mouseevent.rs b/src/components/script/dom/mouseevent.rs index b942909639f8..a066cb81c088 100644 --- a/src/components/script/dom/mouseevent.rs +++ b/src/components/script/dom/mouseevent.rs @@ -204,8 +204,4 @@ impl Reflectable for MouseEvent { fn reflector<'a>(&'a self) -> &'a Reflector { self.mouseevent.reflector() } - - fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector { - self.mouseevent.mut_reflector() - } } diff --git a/src/components/script/dom/navigator.rs b/src/components/script/dom/navigator.rs index 3603709971f1..dd85a33be0dc 100644 --- a/src/components/script/dom/navigator.rs +++ b/src/components/script/dom/navigator.rs @@ -61,8 +61,4 @@ impl Reflectable for Navigator { fn reflector<'a>(&'a self) -> &'a Reflector { &self.reflector_ } - - fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector { - &mut self.reflector_ - } } diff --git a/src/components/script/dom/node.rs b/src/components/script/dom/node.rs index 5be262a90039..5d8376dbcd2a 100644 --- a/src/components/script/dom/node.rs +++ b/src/components/script/dom/node.rs @@ -1941,10 +1941,6 @@ impl Reflectable for Node { fn reflector<'a>(&'a self) -> &'a Reflector { self.eventtarget.reflector() } - - fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector { - self.eventtarget.mut_reflector() - } } pub fn document_from_node(derived: &JSRef) -> Temporary { diff --git a/src/components/script/dom/nodelist.rs b/src/components/script/dom/nodelist.rs index eba16d3902a3..305c52774d50 100644 --- a/src/components/script/dom/nodelist.rs +++ b/src/components/script/dom/nodelist.rs @@ -86,8 +86,4 @@ impl Reflectable for NodeList { fn reflector<'a>(&'a self) -> &'a Reflector { &self.reflector_ } - - fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector { - &mut self.reflector_ - } } diff --git a/src/components/script/dom/performance.rs b/src/components/script/dom/performance.rs index c933494697a1..096cabc2de32 100644 --- a/src/components/script/dom/performance.rs +++ b/src/components/script/dom/performance.rs @@ -52,8 +52,4 @@ impl Reflectable for Performance { fn reflector<'a>(&'a self) -> &'a Reflector { &self.reflector_ } - - fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector { - &mut self.reflector_ - } } diff --git a/src/components/script/dom/performancetiming.rs b/src/components/script/dom/performancetiming.rs index 5935f55b9f20..a63fe54e68b5 100644 --- a/src/components/script/dom/performancetiming.rs +++ b/src/components/script/dom/performancetiming.rs @@ -50,8 +50,4 @@ impl Reflectable for PerformanceTiming { fn reflector<'a>(&'a self) -> &'a Reflector { &self.reflector_ } - - fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector { - &mut self.reflector_ - } } diff --git a/src/components/script/dom/progressevent.rs b/src/components/script/dom/progressevent.rs index 7cc06d0a1155..08ce3f640606 100644 --- a/src/components/script/dom/progressevent.rs +++ b/src/components/script/dom/progressevent.rs @@ -76,8 +76,4 @@ impl Reflectable for ProgressEvent { fn reflector<'a>(&'a self) -> &'a Reflector { self.event.reflector() } - - fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector { - self.event.mut_reflector() - } } diff --git a/src/components/script/dom/testbinding.rs b/src/components/script/dom/testbinding.rs index 4f0a2081bf79..d4826d881b9e 100644 --- a/src/components/script/dom/testbinding.rs +++ b/src/components/script/dom/testbinding.rs @@ -300,8 +300,4 @@ impl Reflectable for TestBinding { fn reflector<'a>(&'a self) -> &'a Reflector { &self.reflector } - - fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector { - &mut self.reflector - } } diff --git a/src/components/script/dom/uievent.rs b/src/components/script/dom/uievent.rs index 91a4cbd24e36..745b05260bc6 100644 --- a/src/components/script/dom/uievent.rs +++ b/src/components/script/dom/uievent.rs @@ -101,8 +101,4 @@ impl Reflectable for UIEvent { fn reflector<'a>(&'a self) -> &'a Reflector { self.event.reflector() } - - fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector { - self.event.mut_reflector() - } } diff --git a/src/components/script/dom/validitystate.rs b/src/components/script/dom/validitystate.rs index 5a86c18a27a3..72beced0eec4 100644 --- a/src/components/script/dom/validitystate.rs +++ b/src/components/script/dom/validitystate.rs @@ -38,8 +38,4 @@ impl Reflectable for ValidityState { fn reflector<'a>(&'a self) -> &'a Reflector { &self.reflector_ } - - fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector { - &mut self.reflector_ - } } diff --git a/src/components/script/dom/window.rs b/src/components/script/dom/window.rs index 40c553e2f4fd..782fcd712d7b 100644 --- a/src/components/script/dom/window.rs +++ b/src/components/script/dom/window.rs @@ -275,10 +275,6 @@ impl Reflectable for Window { fn reflector<'a>(&'a self) -> &'a Reflector { self.eventtarget.reflector() } - - fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector { - self.eventtarget.mut_reflector() - } } pub trait WindowHelpers { diff --git a/src/components/script/dom/xmlhttprequest.rs b/src/components/script/dom/xmlhttprequest.rs index f3d76acca397..87b4572ff80f 100644 --- a/src/components/script/dom/xmlhttprequest.rs +++ b/src/components/script/dom/xmlhttprequest.rs @@ -579,10 +579,6 @@ impl Reflectable for XMLHttpRequest { fn reflector<'a>(&'a self) -> &'a Reflector { self.eventtarget.reflector() } - - fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector { - self.eventtarget.mut_reflector() - } } impl XMLHttpRequestDerived for EventTarget { @@ -622,14 +618,14 @@ impl<'a> PrivateXMLHttpRequestHelpers for JSRef<'a, XMLHttpRequest> { unsafe fn to_trusted(&mut self) -> TrustedXHRAddress { assert!(self.pinned == false); self.pinned = true; - JS_AddObjectRoot(self.global.root().get_cx(), self.mut_reflector().rootable()); + JS_AddObjectRoot(self.global.root().get_cx(), self.reflector().rootable()); TrustedXHRAddress(self.deref() as *XMLHttpRequest as *libc::c_void) } fn release(&mut self) { assert!(self.pinned); unsafe { - JS_RemoveObjectRoot(self.global.root().get_cx(), self.mut_reflector().rootable()); + JS_RemoveObjectRoot(self.global.root().get_cx(), self.reflector().rootable()); } self.pinned = false; } diff --git a/src/components/script/dom/xmlhttprequesteventtarget.rs b/src/components/script/dom/xmlhttprequesteventtarget.rs index 29f77c62149f..1881a597d76b 100644 --- a/src/components/script/dom/xmlhttprequesteventtarget.rs +++ b/src/components/script/dom/xmlhttprequesteventtarget.rs @@ -36,10 +36,6 @@ impl Reflectable for XMLHttpRequestEventTarget { fn reflector<'a>(&'a self) -> &'a Reflector { self.eventtarget.reflector() } - - fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector { - self.eventtarget.mut_reflector() - } } pub trait XMLHttpRequestEventTargetMethods { diff --git a/src/components/script/dom/xmlhttprequestupload.rs b/src/components/script/dom/xmlhttprequestupload.rs index 9d46dd1c98f6..9c5b3854eabd 100644 --- a/src/components/script/dom/xmlhttprequestupload.rs +++ b/src/components/script/dom/xmlhttprequestupload.rs @@ -32,10 +32,6 @@ impl Reflectable for XMLHttpRequestUpload { fn reflector<'a>(&'a self) -> &'a Reflector { self.eventtarget.reflector() } - - fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector { - self.eventtarget.mut_reflector() - } } impl XMLHttpRequestUploadDerived for EventTarget {