#[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 i8;
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 i8;
unsafe { $crate::runtime::sel_registerName(ptr) }
}
register_sel(concat!($(stringify!($name), ':'),+, '\0'))
});
}
#[macro_export]
macro_rules! msg_send {
($obj:expr, $name:ident) => ({
let obj = &$obj;
let sel = sel!($name);
let args = ();
$crate::send_message(obj, sel, args)
});
($obj:expr, $($name:ident : $arg:expr)+) => ({
let obj = &$obj;
let sel = sel!($($name:)+);
let args = ($($arg,)*);
$crate::send_message(obj, sel, args)
});
}