Macroize event handler getters and setters.

This commit is contained in:
Tetsuharu OHZEKI 2014-10-23 02:28:09 +09:00
parent 22d6aaf369
commit 0a84c5d479
8 changed files with 43 additions and 163 deletions

View file

@ -185,3 +185,29 @@ macro_rules! untraceable(
);
)
/// These are used to generate a event handler which has no special case.
macro_rules! define_event_handler(
($handler: ident, $event_type: ident, $getter: ident, $setter: ident) => (
fn $getter(self) -> Option<$handler> {
let eventtarget: JSRef<EventTarget> = EventTargetCast::from_ref(self);
eventtarget.get_event_handler_common(stringify!($event_type))
}
fn $setter(self, listener: Option<$handler>) {
let eventtarget: JSRef<EventTarget> = EventTargetCast::from_ref(self);
eventtarget.set_event_handler_common(stringify!($event_type), listener)
}
)
)
macro_rules! event_handler(
($event_type: ident, $getter: ident, $setter: ident) => (
define_event_handler!(EventHandlerNonNull, $event_type, $getter, $setter)
)
)
macro_rules! error_event_handler(
($event_type: ident, $getter: ident, $setter: ident) => (
define_event_handler!(OnErrorEventHandlerNonNull, $event_type, $getter, $setter)
)
)