Unify macros which generate binding codes.

This commit is contained in:
Tetsuharu OHZEKI 2013-10-16 02:13:15 +09:00
parent 02ef301770
commit f08f44f8c6

View file

@ -11,89 +11,43 @@ use js::jsapi::{JSContext, JSObject, JSTracer};
// generate_cacheable_wrapper // generate_cacheable_wrapper
macro_rules! generate_cacheable_wrapper( macro_rules! generate_cacheable_wrapper(
($name: path, $wrap: path) => ( ($name: path, $wrap: path) => (
impl Reflectable for $name { generate_cacheable_wrapper_base!($name, $wrap, element)
fn reflector<'a>(&'a self) -> &'a Reflector {
self.element.reflector()
}
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
self.element.mut_reflector()
}
fn wrap_object_shared(@mut self, cx: *JSContext, scope: *JSObject) -> *JSObject {
let mut unused = false;
$wrap(cx, scope, self, &mut unused)
}
}
) )
) )
macro_rules! generate_cacheable_wrapper_htmlelement( macro_rules! generate_cacheable_wrapper_htmlelement(
($name: path, $wrap: path) => ( ($name: path, $wrap: path) => (
impl Reflectable for $name { generate_cacheable_wrapper_base!($name, $wrap, htmlelement)
fn reflector<'a>(&'a self) -> &'a Reflector {
self.htmlelement.reflector()
}
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
self.htmlelement.mut_reflector()
}
fn wrap_object_shared(@mut self, cx: *JSContext, scope: *JSObject) -> *JSObject {
let mut unused = false;
$wrap(cx, scope, self, &mut unused)
}
}
) )
) )
macro_rules! generate_cacheable_wrapper_htmlmediaelement( macro_rules! generate_cacheable_wrapper_htmlmediaelement(
($name: path, $wrap: path) => ( ($name: path, $wrap: path) => (
impl Reflectable for $name { generate_cacheable_wrapper_base!($name, $wrap, htmlmediaelement)
fn reflector<'a>(&'a self) -> &'a Reflector {
self.htmlmediaelement.reflector()
}
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
self.htmlmediaelement.mut_reflector()
}
fn wrap_object_shared(@mut self, cx: *JSContext, scope: *JSObject) -> *JSObject {
let mut unused = false;
$wrap(cx, scope, self, &mut unused)
}
}
) )
) )
macro_rules! generate_cacheable_wrapper_htmltablecellelement( macro_rules! generate_cacheable_wrapper_htmltablecellelement(
($name: path, $wrap: path) => ( ($name: path, $wrap: path) => (
impl Reflectable for $name { generate_cacheable_wrapper_base!($name, $wrap, htmltablecellelement)
fn reflector<'a>(&'a self) -> &'a Reflector {
self.htmltablecellelement.reflector()
}
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
self.htmltablecellelement.mut_reflector()
}
fn wrap_object_shared(@mut self, cx: *JSContext, scope: *JSObject) -> *JSObject {
let mut unused = false;
$wrap(cx, scope, self, &mut unused)
}
}
) )
) )
macro_rules! generate_cacheable_wrapper_node( macro_rules! generate_cacheable_wrapper_node(
($name: path, $wrap: path) => ( ($name: path, $wrap: path) => (
generate_cacheable_wrapper_base!($name, $wrap, node)
)
)
macro_rules! generate_cacheable_wrapper_base(
($name: path, $wrap: path, $parent: ident) => (
impl Reflectable for $name { impl Reflectable for $name {
fn reflector<'a>(&'a self) -> &'a Reflector { fn reflector<'a>(&'a self) -> &'a Reflector {
self.node.reflector() self.$parent.reflector()
} }
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector { fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector {
self.node.mut_reflector() self.$parent.mut_reflector()
} }
fn wrap_object_shared(@mut self, cx: *JSContext, scope: *JSObject) -> *JSObject { fn wrap_object_shared(@mut self, cx: *JSContext, scope: *JSObject) -> *JSObject {
@ -108,49 +62,39 @@ macro_rules! generate_cacheable_wrapper_node(
// generate_binding_object // generate_binding_object
macro_rules! generate_binding_object( macro_rules! generate_binding_object(
($name: path) => ( ($name: path) => (
impl BindingObject for $name { generate_binding_base!($name, element)
fn GetParentObject(&self, cx: *JSContext) -> Option<@mut Reflectable> {
self.element.GetParentObject(cx)
}
}
) )
) )
macro_rules! generate_binding_object_htmlelement( macro_rules! generate_binding_object_htmlelement(
($name: path) => ( ($name: path) => (
impl BindingObject for $name { generate_binding_base!($name, htmlelement)
fn GetParentObject(&self, cx: *JSContext) -> Option<@mut Reflectable> {
self.htmlelement.GetParentObject(cx)
}
}
) )
) )
macro_rules! generate_binding_object_htmlmediaelement( macro_rules! generate_binding_object_htmlmediaelement(
($name: path) => ( ($name: path) => (
impl BindingObject for $name { generate_binding_base!($name, htmlmediaelement)
fn GetParentObject(&self, cx: *JSContext) -> Option<@mut Reflectable> {
self.htmlmediaelement.GetParentObject(cx)
}
}
) )
) )
macro_rules! generate_binding_object_htmltablecellelement( macro_rules! generate_binding_object_htmltablecellelement(
($name: path) => ( ($name: path) => (
impl BindingObject for $name { generate_binding_base!($name, htmltablecellelement)
fn GetParentObject(&self, cx: *JSContext) -> Option<@mut Reflectable> {
self.htmltablecellelement.GetParentObject(cx)
}
}
) )
) )
macro_rules! generate_binding_object_node( macro_rules! generate_binding_object_node(
($name: path) => ( ($name: path) => (
generate_binding_base!($name, node)
)
)
macro_rules! generate_binding_base(
($name: path, $parent: ident) => (
impl BindingObject for $name { impl BindingObject for $name {
fn GetParentObject(&self, cx: *JSContext) -> Option<@mut Reflectable> { fn GetParentObject(&self, cx: *JSContext) -> Option<@mut Reflectable> {
self.node.GetParentObject(cx) self.$parent.GetParentObject(cx)
} }
} }
) )
@ -160,54 +104,45 @@ macro_rules! generate_binding_object_node(
// generate_traceable // generate_traceable
macro_rules! generate_traceable( macro_rules! generate_traceable(
($name: path) => ( ($name: path) => (
impl Traceable for $name { generate_traceable_base!($name, element)
fn trace(&self, trc: *mut JSTracer) {
self.element.trace(trc);
}
}
) )
) )
macro_rules! generate_traceable_htmlelement( macro_rules! generate_traceable_htmlelement(
($name: path) => ( ($name: path) => (
impl Traceable for $name { generate_traceable_base!($name, htmlelement)
fn trace(&self, trc: *mut JSTracer) {
self.htmlelement.trace(trc);
}
}
) )
) )
macro_rules! generate_traceable_htmlmediaelement( macro_rules! generate_traceable_htmlmediaelement(
($name: path) => ( ($name: path) => (
impl Traceable for $name { generate_traceable_base!($name, htmlmediaelement)
fn trace(&self, trc: *mut JSTracer) {
self.htmlmediaelement.trace(trc);
}
}
) )
) )
macro_rules! generate_traceable_htmltablecellelement( macro_rules! generate_traceable_htmltablecellelement(
($name: path) => ( ($name: path) => (
impl Traceable for $name { generate_traceable_base!($name, htmltablecellelement)
fn trace(&self, trc: *mut JSTracer) {
self.htmltablecellelement.trace(trc);
}
}
) )
) )
macro_rules! generate_traceable_node( macro_rules! generate_traceable_node(
($name: path) => ( ($name: path) => (
generate_traceable_base!($name, node)
)
)
macro_rules! generate_traceable_base(
($name: path, $parent: ident) => (
impl Traceable for $name { impl Traceable for $name {
fn trace(&self, trc: *mut JSTracer) { fn trace(&self, trc: *mut JSTracer) {
self.node.trace(trc); self.$parent.trace(trc);
} }
} }
) )
) )
generate_cacheable_wrapper!(Comment, CommentBinding::Wrap) generate_cacheable_wrapper!(Comment, CommentBinding::Wrap)
generate_binding_object!(Comment) generate_binding_object!(Comment)
generate_traceable!(Comment) generate_traceable!(Comment)