mirror of
https://github.com/servo/servo.git
synced 2025-08-05 21:50:18 +01:00
auto merge of #2654 : Ms2ger/servo/reflector-cell, r=jdm
This commit is contained in:
commit
65e5896894
37 changed files with 16 additions and 160 deletions
|
@ -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 {
|
||||
|
|
|
@ -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_
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
)
|
||||
)
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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()),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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_
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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_
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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_
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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_
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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_
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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)]
|
||||
|
|
|
@ -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_
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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> {
|
||||
|
|
|
@ -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_
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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_
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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_
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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_
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<T: NodeBase>(derived: &JSRef<T>) -> Temporary<Document> {
|
||||
|
|
|
@ -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_
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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_
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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_
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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_
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue