#[macro_export]
macro_rules! sel {
($name:ident) => ({
#[inline(always)]
fn register_sel(name_with_nul: &str) -> $crate::runtime::Sel {
let ptr = name_with_nul.as_ptr() as *const _;
unsafe { $crate::runtime::sel_registerName(ptr) }
}
register_sel(concat!(stringify!($name), '\0'))
});
($($name:ident :)+) => ({
#[inline(always)]
fn register_sel(name_with_nul: &str) -> $crate::runtime::Sel {
let ptr = name_with_nul.as_ptr() as *const _;
unsafe { $crate::runtime::sel_registerName(ptr) }
}
register_sel(concat!($(stringify!($name), ':'),+, '\0'))
});
}
#[macro_export]
macro_rules! msg_send {
(super($obj:expr, $superclass:expr), $name:ident) => ({
let sel = sel!($name);
match $crate::__send_super_message(&*$obj, $superclass, sel, ()) {
Err(s) => panic!("{}", s),
Ok(r) => r,
}
});
(super($obj:expr, $superclass:expr), $($name:ident : $arg:expr)+) => ({
let sel = sel!($($name:)+);
match $crate::__send_super_message(&*$obj, $superclass, sel, ($($arg,)*)) {
Err(s) => panic!("{}", s),
Ok(r) => r,
}
});
($obj:expr, $name:ident) => ({
let sel = sel!($name);
match $crate::__send_message(&*$obj, sel, ()) {
Err(s) => panic!("{}", s),
Ok(r) => r,
}
});
($obj:expr, $($name:ident : $arg:expr)+) => ({
let sel = sel!($($name:)+);
match $crate::__send_message(&*$obj, sel, ($($arg,)*)) {
Err(s) => panic!("{}", s),
Ok(r) => r,
}
});
}