mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
Extract mutability out of Reflectable trait.
This commit is contained in:
parent
bba3eefde8
commit
8653450b6e
5 changed files with 24 additions and 6 deletions
|
@ -24,12 +24,17 @@ pub fn expand_reflector(cx: &mut ExtCtxt, span: Span, _: &MetaItem, annotatable:
|
|||
fn reflector<'a>(&'a self) -> &'a ::dom::bindings::reflector::Reflector {
|
||||
&self.$field_name
|
||||
}
|
||||
}
|
||||
);
|
||||
let impl_item_mut = quote_item!(cx,
|
||||
impl ::dom::bindings::reflector::MutReflectable for $struct_name {
|
||||
fn init_reflector(&mut self, obj: *mut ::js::jsapi::JSObject) {
|
||||
self.$field_name.set_jsobject(obj);
|
||||
}
|
||||
}
|
||||
);
|
||||
impl_item.map(|it| push(Annotatable::Item(it)))
|
||||
impl_item.map(|it| push(Annotatable::Item(it)));
|
||||
impl_item_mut.map(|it| push(Annotatable::Item(it)))
|
||||
},
|
||||
// Or just call it on the first field (supertype).
|
||||
None => {
|
||||
|
@ -39,12 +44,17 @@ pub fn expand_reflector(cx: &mut ExtCtxt, span: Span, _: &MetaItem, annotatable:
|
|||
fn reflector<'a>(&'a self) -> &'a ::dom::bindings::reflector::Reflector {
|
||||
self.$field_name.reflector()
|
||||
}
|
||||
}
|
||||
);
|
||||
let impl_item_mut = quote_item!(cx,
|
||||
impl ::dom::bindings::reflector::MutReflectable for $struct_name {
|
||||
fn init_reflector(&mut self, obj: *mut ::js::jsapi::JSObject) {
|
||||
self.$field_name.init_reflector(obj);
|
||||
}
|
||||
}
|
||||
);
|
||||
impl_item.map(|it| push(Annotatable::Item(it)))
|
||||
impl_item.map(|it| push(Annotatable::Item(it)));
|
||||
impl_item_mut.map(|it| push(Annotatable::Item(it)))
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -5452,6 +5452,7 @@ def generate_imports(config, cgthings, descriptors, callbacks=None, dictionaries
|
|||
'dom::bindings::js::OptionalRootedReference',
|
||||
'dom::bindings::js::Root',
|
||||
'dom::bindings::js::RootedReference',
|
||||
'dom::bindings::reflector::MutReflectable',
|
||||
'dom::bindings::reflector::Reflectable',
|
||||
'dom::bindings::utils::DOMClass',
|
||||
'dom::bindings::utils::DOMJSClass',
|
||||
|
|
|
@ -12,7 +12,7 @@ use dom::bindings::codegen::Bindings::IterableIteratorBinding::IterableKeyOrValu
|
|||
use dom::bindings::error::Fallible;
|
||||
use dom::bindings::global::GlobalRef;
|
||||
use dom::bindings::js::{JS, Root};
|
||||
use dom::bindings::reflector::{Reflector, Reflectable, reflect_dom_object};
|
||||
use dom::bindings::reflector::{Reflector, Reflectable, MutReflectable, reflect_dom_object};
|
||||
use dom::bindings::trace::JSTraceable;
|
||||
use js::conversions::ToJSValConvertible;
|
||||
use js::jsapi::{JSContext, JSObject, MutableHandleValue, MutableHandleObject, HandleValue};
|
||||
|
@ -63,6 +63,9 @@ impl<T: Reflectable + JSTraceable + Iterable> Reflectable for IterableIterator<T
|
|||
fn reflector<'a>(&'a self) -> &'a Reflector {
|
||||
&self.reflector
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Reflectable + JSTraceable + Iterable> MutReflectable for IterableIterator<T> {
|
||||
fn init_reflector(&mut self, obj: *mut JSObject) {
|
||||
self.reflector.set_jsobject(obj);
|
||||
}
|
||||
|
|
|
@ -73,11 +73,15 @@ impl Reflector {
|
|||
pub trait Reflectable {
|
||||
/// Returns the receiver's reflector.
|
||||
fn reflector(&self) -> &Reflector;
|
||||
/// Initializes the Reflector
|
||||
fn init_reflector(&mut self, obj: *mut JSObject);
|
||||
|
||||
/// Returns the global object of the realm that the Reflectable was created in.
|
||||
fn global(&self) -> GlobalRoot where Self: Sized {
|
||||
global_root_from_reflector(self)
|
||||
}
|
||||
}
|
||||
|
||||
/// A trait to initialize the `Reflector` for a DOM object.
|
||||
pub trait MutReflectable: Reflectable {
|
||||
/// Initializes the Reflector
|
||||
fn init_reflector(&mut self, obj: *mut JSObject);
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@ use dom::bindings::codegen::Bindings::DocumentBinding::DocumentMethods;
|
|||
use dom::bindings::conversions::{ToJSValConvertible, root_from_handleobject};
|
||||
use dom::bindings::js::{JS, Root, RootedReference};
|
||||
use dom::bindings::proxyhandler::{fill_property_descriptor, get_property_descriptor};
|
||||
use dom::bindings::reflector::{Reflectable, Reflector};
|
||||
use dom::bindings::reflector::{Reflectable, MutReflectable, Reflector};
|
||||
use dom::bindings::str::DOMString;
|
||||
use dom::bindings::trace::JSTraceable;
|
||||
use dom::bindings::utils::WindowProxyHandler;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue