#[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 = ();
if cfg!(not(ndebug)) {
match $crate::send_message_verified(obj, sel, args) {
Err(s) => panic!("Verify message failed: {}", s),
Ok(r) => r,
}
} else {
$crate::send_message(obj, sel, args)
}
});
($obj:expr, $($name:ident : $arg:expr)+) => ({
let obj = &$obj;
let sel = sel!($($name:)+);
let args = ($($arg,)*);
if cfg!(not(ndebug)) {
match $crate::send_message_verified(obj, sel, args) {
Err(s) => panic!("Verify message failed: {}", s),
Ok(r) => r,
}
} else {
$crate::send_message(obj, sel, args)
}
});
}