diff options
Diffstat (limited to 'src/components/script/dom/bindings')
-rw-r--r-- | src/components/script/dom/bindings/codegen/CodegenRust.py | 4 | ||||
-rw-r--r-- | src/components/script/dom/bindings/element.rs | 4 | ||||
-rw-r--r-- | src/components/script/dom/bindings/js.rs | 10 | ||||
-rw-r--r-- | src/components/script/dom/bindings/utils.rs | 22 |
4 files changed, 14 insertions, 26 deletions
diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index 3a0f5cddb00..f546f4cdd33 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -1838,7 +1838,7 @@ class CGWrapMethod(CGAbstractMethod): %s - raw.mut_reflector().set_jsobject(obj); + raw.reflector().set_jsobject(obj); return raw;""" % CreateBindingJSObject(self.descriptor, "scope") else: @@ -1848,7 +1848,7 @@ class CGWrapMethod(CGAbstractMethod): 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 545ae499a66..53069b94062 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 e2b2665c415..b72e8c9e42d 100644 --- a/src/components/script/dom/bindings/js.rs +++ b/src/components/script/dom/bindings/js.rs @@ -171,12 +171,6 @@ impl<T: Reflectable> Reflectable for JS<T> { (*self.unsafe_get()).reflector() } } - - fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector { - unsafe { - (*self.unsafe_get()).mut_reflector() - } - } } impl<T: Reflectable> JS<T> { @@ -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 5eb3486c20c..ab81ed2c8fc 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<T: Reflectable> @@ -415,31 +415,33 @@ pub fn reflect_dom_object<T: Reflectable> #[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()), } } } |