auto merge of #2654 : Ms2ger/servo/reflector-cell, r=jdm

This commit is contained in:
bors-servo 2014-06-13 13:29:39 -04:00
commit 65e5896894
37 changed files with 16 additions and 160 deletions

View file

@ -71,10 +71,6 @@ impl Reflectable for Attr {
fn reflector<'a>(&'a self) -> &'a Reflector { fn reflector<'a>(&'a self) -> &'a Reflector {
&self.reflector_ &self.reflector_
} }
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
&mut self.reflector_
}
} }
impl Attr { impl Attr {

View file

@ -57,8 +57,4 @@ impl Reflectable for AttrList {
fn reflector<'a>(&'a self) -> &'a Reflector { fn reflector<'a>(&'a self) -> &'a Reflector {
&self.reflector_ &self.reflector_
} }
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
&mut self.reflector_
}
} }

View file

@ -1838,7 +1838,7 @@ class CGWrapMethod(CGAbstractMethod):
%s %s
raw.mut_reflector().set_jsobject(obj); raw.reflector().set_jsobject(obj);
return raw;""" % CreateBindingJSObject(self.descriptor, "scope") return raw;""" % CreateBindingJSObject(self.descriptor, "scope")
else: else:
@ -1848,7 +1848,7 @@ class CGWrapMethod(CGAbstractMethod):
let proto = GetProtoObject(aCx, obj, obj); let proto = GetProtoObject(aCx, obj, obj);
JS_SetPrototype(aCx, obj, proto); JS_SetPrototype(aCx, obj, proto);
}); });
raw.mut_reflector().set_jsobject(obj); raw.reflector().set_jsobject(obj);
return raw;""" % CreateBindingJSObject(self.descriptor) return raw;""" % CreateBindingJSObject(self.descriptor)

View file

@ -48,10 +48,6 @@ macro_rules! generate_cacheable_wrapper_base(
fn reflector<'a>(&'a self) -> &'a Reflector { fn reflector<'a>(&'a self) -> &'a Reflector {
self.$parent.reflector() self.$parent.reflector()
} }
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
self.$parent.mut_reflector()
}
} }
) )
) )

View file

@ -171,12 +171,6 @@ impl<T: Reflectable> Reflectable for JS<T> {
(*self.unsafe_get()).reflector() (*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> { 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 { fn reflector<'a>(&'a self) -> &'a Reflector {
self.deref().reflector() self.deref().reflector()
} }
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
self.deref_mut().mut_reflector()
}
} }

View file

@ -14,8 +14,9 @@ use servo_util::str::DOMString;
use collections::hashmap::HashMap; use collections::hashmap::HashMap;
use libc; use libc;
use libc::c_uint; use libc::c_uint;
use std::mem; use std::cell::Cell;
use std::cmp::Eq; use std::cmp::Eq;
use std::mem;
use std::ptr; use std::ptr;
use std::ptr::null; use std::ptr::null;
use std::slice; use std::slice;
@ -401,7 +402,6 @@ pub fn initialize_global(global: *mut JSObject) {
pub trait Reflectable { pub trait Reflectable {
fn reflector<'a>(&'a self) -> &'a Reflector; fn reflector<'a>(&'a self) -> &'a Reflector;
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector;
} }
pub fn reflect_dom_object<T: Reflectable> pub fn reflect_dom_object<T: Reflectable>
@ -415,31 +415,33 @@ pub fn reflect_dom_object<T: Reflectable>
#[allow(raw_pointer_deriving)] #[allow(raw_pointer_deriving)]
#[deriving(Eq)] #[deriving(Eq)]
pub struct Reflector { pub struct Reflector {
object: *mut JSObject, object: Cell<*mut JSObject>,
} }
impl Reflector { impl Reflector {
#[inline] #[inline]
pub fn get_jsobject(&self) -> *mut JSObject { pub fn get_jsobject(&self) -> *mut JSObject {
self.object self.object.get()
} }
pub fn set_jsobject(&mut self, object: *mut JSObject) { pub fn set_jsobject(&self, object: *mut JSObject) {
assert!(self.object.is_null()); assert!(self.object.get().is_null());
assert!(object.is_not_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. /// 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 /// Used by Temporary values to root the reflector, as required by the JSAPI rooting
/// APIs. /// APIs.
pub fn rootable<'a>(&'a mut self) -> &'a mut *mut JSObject { pub fn rootable(&self) -> *mut *mut JSObject {
&mut self.object &self.object as *Cell<*mut JSObject>
as *mut Cell<*mut JSObject>
as *mut *mut JSObject
} }
pub fn new() -> Reflector { pub fn new() -> Reflector {
Reflector { Reflector {
object: ptr::mut_null(), object: Cell::new(ptr::mut_null()),
} }
} }
} }

View file

@ -40,8 +40,4 @@ impl Reflectable for Blob {
fn reflector<'a>(&'a self) -> &'a Reflector { fn reflector<'a>(&'a self) -> &'a Reflector {
&self.reflector_ &self.reflector_
} }
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
&mut self.reflector_
}
} }

View file

@ -114,8 +114,4 @@ impl Reflectable for CharacterData {
fn reflector<'a>(&'a self) -> &'a Reflector { fn reflector<'a>(&'a self) -> &'a Reflector {
self.node.reflector() self.node.reflector()
} }
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
self.node.mut_reflector()
}
} }

View file

@ -79,8 +79,4 @@ impl Reflectable for ClientRect {
fn reflector<'a>(&'a self) -> &'a Reflector { fn reflector<'a>(&'a self) -> &'a Reflector {
&self.reflector_ &self.reflector_
} }
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
&mut self.reflector_
}
} }

View file

@ -63,8 +63,4 @@ impl Reflectable for ClientRectList {
fn reflector<'a>(&'a self) -> &'a Reflector { fn reflector<'a>(&'a self) -> &'a Reflector {
&self.reflector_ &self.reflector_
} }
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
&mut self.reflector_
}
} }

View file

@ -70,8 +70,4 @@ impl Reflectable for Console {
fn reflector<'a>(&'a self) -> &'a Reflector { fn reflector<'a>(&'a self) -> &'a Reflector {
&self.reflector_ &self.reflector_
} }
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
&mut self.reflector_
}
} }

View file

@ -81,8 +81,4 @@ impl Reflectable for CustomEvent {
fn reflector<'a>(&'a self) -> &'a Reflector { fn reflector<'a>(&'a self) -> &'a Reflector {
self.event.reflector() self.event.reflector()
} }
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
self.event.mut_reflector()
}
} }

View file

@ -251,10 +251,6 @@ impl Reflectable for Document {
fn reflector<'a>(&'a self) -> &'a Reflector { fn reflector<'a>(&'a self) -> &'a Reflector {
self.node.reflector() self.node.reflector()
} }
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
self.node.mut_reflector()
}
} }
trait PrivateDocumentHelpers { trait PrivateDocumentHelpers {

View file

@ -83,10 +83,6 @@ impl Reflectable for DOMException {
fn reflector<'a>(&'a self) -> &'a Reflector { fn reflector<'a>(&'a self) -> &'a Reflector {
&self.reflector_ &self.reflector_
} }
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
&mut self.reflector_
}
} }
pub trait DOMExceptionMethods { pub trait DOMExceptionMethods {

View file

@ -43,10 +43,6 @@ impl Reflectable for DOMImplementation {
fn reflector<'a>(&'a self) -> &'a Reflector { fn reflector<'a>(&'a self) -> &'a Reflector {
&self.reflector_ &self.reflector_
} }
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
&mut self.reflector_
}
} }
pub trait DOMImplementationMethods { pub trait DOMImplementationMethods {

View file

@ -64,8 +64,4 @@ impl Reflectable for DOMParser {
fn reflector<'a>(&'a self) -> &'a Reflector { fn reflector<'a>(&'a self) -> &'a Reflector {
&self.reflector_ &self.reflector_
} }
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
&mut self.reflector_
}
} }

View file

@ -41,10 +41,6 @@ impl Reflectable for DOMTokenList {
fn reflector<'a>(&'a self) -> &'a Reflector { fn reflector<'a>(&'a self) -> &'a Reflector {
&self.reflector_ &self.reflector_
} }
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
&mut self.reflector_
}
} }
trait PrivateDOMTokenListHelpers { trait PrivateDOMTokenListHelpers {

View file

@ -62,10 +62,6 @@ impl Reflectable for Element {
fn reflector<'a>(&'a self) -> &'a Reflector { fn reflector<'a>(&'a self) -> &'a Reflector {
self.node.reflector() self.node.reflector()
} }
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
self.node.mut_reflector()
}
} }
#[deriving(Eq,Encodable)] #[deriving(Eq,Encodable)]

View file

@ -199,8 +199,4 @@ impl Reflectable for Event {
fn reflector<'a>(&'a self) -> &'a Reflector { fn reflector<'a>(&'a self) -> &'a Reflector {
&self.reflector_ &self.reflector_
} }
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
&mut self.reflector_
}
} }

View file

@ -278,10 +278,6 @@ impl Reflectable for EventTarget {
fn reflector<'a>(&'a self) -> &'a Reflector { fn reflector<'a>(&'a self) -> &'a Reflector {
&self.reflector_ &self.reflector_
} }
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
&mut self.reflector_
}
} }
impl<'a> VirtualMethods for JSRef<'a, EventTarget> { impl<'a> VirtualMethods for JSRef<'a, EventTarget> {

View file

@ -70,8 +70,4 @@ impl Reflectable for FormData {
fn reflector<'a>(&'a self) -> &'a Reflector { fn reflector<'a>(&'a self) -> &'a Reflector {
&self.reflector_ &self.reflector_
} }
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
&mut self.reflector_
}
} }

View file

@ -221,8 +221,4 @@ impl Reflectable for HTMLCollection {
fn reflector<'a>(&'a self) -> &'a Reflector { fn reflector<'a>(&'a self) -> &'a Reflector {
&self.reflector_ &self.reflector_
} }
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
&mut self.reflector_
}
} }

View file

@ -49,8 +49,4 @@ impl Reflectable for Location {
fn reflector<'a>(&'a self) -> &'a Reflector { fn reflector<'a>(&'a self) -> &'a Reflector {
&self.reflector_ &self.reflector_
} }
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
&mut self.reflector_
}
} }

View file

@ -204,8 +204,4 @@ impl Reflectable for MouseEvent {
fn reflector<'a>(&'a self) -> &'a Reflector { fn reflector<'a>(&'a self) -> &'a Reflector {
self.mouseevent.reflector() self.mouseevent.reflector()
} }
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
self.mouseevent.mut_reflector()
}
} }

View file

@ -61,8 +61,4 @@ impl Reflectable for Navigator {
fn reflector<'a>(&'a self) -> &'a Reflector { fn reflector<'a>(&'a self) -> &'a Reflector {
&self.reflector_ &self.reflector_
} }
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
&mut self.reflector_
}
} }

View file

@ -1941,10 +1941,6 @@ impl Reflectable for Node {
fn reflector<'a>(&'a self) -> &'a Reflector { fn reflector<'a>(&'a self) -> &'a Reflector {
self.eventtarget.reflector() self.eventtarget.reflector()
} }
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
self.eventtarget.mut_reflector()
}
} }
pub fn document_from_node<T: NodeBase>(derived: &JSRef<T>) -> Temporary<Document> { pub fn document_from_node<T: NodeBase>(derived: &JSRef<T>) -> Temporary<Document> {

View file

@ -86,8 +86,4 @@ impl Reflectable for NodeList {
fn reflector<'a>(&'a self) -> &'a Reflector { fn reflector<'a>(&'a self) -> &'a Reflector {
&self.reflector_ &self.reflector_
} }
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
&mut self.reflector_
}
} }

View file

@ -52,8 +52,4 @@ impl Reflectable for Performance {
fn reflector<'a>(&'a self) -> &'a Reflector { fn reflector<'a>(&'a self) -> &'a Reflector {
&self.reflector_ &self.reflector_
} }
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
&mut self.reflector_
}
} }

View file

@ -50,8 +50,4 @@ impl Reflectable for PerformanceTiming {
fn reflector<'a>(&'a self) -> &'a Reflector { fn reflector<'a>(&'a self) -> &'a Reflector {
&self.reflector_ &self.reflector_
} }
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
&mut self.reflector_
}
} }

View file

@ -76,8 +76,4 @@ impl Reflectable for ProgressEvent {
fn reflector<'a>(&'a self) -> &'a Reflector { fn reflector<'a>(&'a self) -> &'a Reflector {
self.event.reflector() self.event.reflector()
} }
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
self.event.mut_reflector()
}
} }

View file

@ -300,8 +300,4 @@ impl Reflectable for TestBinding {
fn reflector<'a>(&'a self) -> &'a Reflector { fn reflector<'a>(&'a self) -> &'a Reflector {
&self.reflector &self.reflector
} }
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
&mut self.reflector
}
} }

View file

@ -101,8 +101,4 @@ impl Reflectable for UIEvent {
fn reflector<'a>(&'a self) -> &'a Reflector { fn reflector<'a>(&'a self) -> &'a Reflector {
self.event.reflector() self.event.reflector()
} }
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
self.event.mut_reflector()
}
} }

View file

@ -38,8 +38,4 @@ impl Reflectable for ValidityState {
fn reflector<'a>(&'a self) -> &'a Reflector { fn reflector<'a>(&'a self) -> &'a Reflector {
&self.reflector_ &self.reflector_
} }
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
&mut self.reflector_
}
} }

View file

@ -275,10 +275,6 @@ impl Reflectable for Window {
fn reflector<'a>(&'a self) -> &'a Reflector { fn reflector<'a>(&'a self) -> &'a Reflector {
self.eventtarget.reflector() self.eventtarget.reflector()
} }
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
self.eventtarget.mut_reflector()
}
} }
pub trait WindowHelpers { pub trait WindowHelpers {

View file

@ -579,10 +579,6 @@ impl Reflectable for XMLHttpRequest {
fn reflector<'a>(&'a self) -> &'a Reflector { fn reflector<'a>(&'a self) -> &'a Reflector {
self.eventtarget.reflector() self.eventtarget.reflector()
} }
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
self.eventtarget.mut_reflector()
}
} }
impl XMLHttpRequestDerived for EventTarget { impl XMLHttpRequestDerived for EventTarget {
@ -622,14 +618,14 @@ impl<'a> PrivateXMLHttpRequestHelpers for JSRef<'a, XMLHttpRequest> {
unsafe fn to_trusted(&mut self) -> TrustedXHRAddress { unsafe fn to_trusted(&mut self) -> TrustedXHRAddress {
assert!(self.pinned == false); assert!(self.pinned == false);
self.pinned = true; 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) TrustedXHRAddress(self.deref() as *XMLHttpRequest as *libc::c_void)
} }
fn release(&mut self) { fn release(&mut self) {
assert!(self.pinned); assert!(self.pinned);
unsafe { 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; self.pinned = false;
} }

View file

@ -36,10 +36,6 @@ impl Reflectable for XMLHttpRequestEventTarget {
fn reflector<'a>(&'a self) -> &'a Reflector { fn reflector<'a>(&'a self) -> &'a Reflector {
self.eventtarget.reflector() self.eventtarget.reflector()
} }
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
self.eventtarget.mut_reflector()
}
} }
pub trait XMLHttpRequestEventTargetMethods { pub trait XMLHttpRequestEventTargetMethods {

View file

@ -32,10 +32,6 @@ impl Reflectable for XMLHttpRequestUpload {
fn reflector<'a>(&'a self) -> &'a Reflector { fn reflector<'a>(&'a self) -> &'a Reflector {
self.eventtarget.reflector() self.eventtarget.reflector()
} }
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
self.eventtarget.mut_reflector()
}
} }
impl XMLHttpRequestUploadDerived for EventTarget { impl XMLHttpRequestUploadDerived for EventTarget {