#[doc(hidden)]
#[macro_export]
macro_rules! __method_msg_send {
(
($receiver:expr)
($sel:ident)
()
()
()
($($method_family:tt)*)
) => {
$crate::__msg_send_helper! {
($receiver)
($($method_family)*)
(MsgSend::send_message)
($sel)
()
}
};
(
($receiver:expr)
($($sel_rest:tt)*)
($arg:ident: MainThreadMarker $(, $($params_rest:tt)*)?)
($($sel_parsed:tt)*)
($($arg_parsed:tt)*)
($($method_family:tt)*)
) => ({
let _ = $arg;
$crate::__method_msg_send! {
($receiver)
($($sel_rest)*)
($($($params_rest)*)?)
($($sel_parsed)*)
($($arg_parsed)*)
($($method_family)*)
}
});
(
($receiver:expr)
($($sel:ident)? : $($sel_rest:tt)*)
($arg:ident : $_arg_ty:ty $(, $($params_rest:tt)*)?)
($($sel_parsed:tt)*)
($($arg_parsed:tt)*)
($($method_family:tt)*)
) => {
$crate::__method_msg_send! {
($receiver)
($($sel_rest)*)
($($($params_rest)*)?)
($($sel_parsed)* $($sel)? :)
($($arg_parsed)* $arg,)
($($method_family)*)
}
};
(
($receiver:expr)
($($sel:ident)? :: $($sel_rest:tt)*)
($arg1:ident : $_arg_ty1:ty, $arg2:ident : $_arg_ty2:ty $(, $($params_rest:tt)*)?)
($($sel_parsed:tt)*)
($($arg_parsed:tt)*)
($($method_family:tt)*)
) => {
$crate::__method_msg_send! {
($receiver)
($($sel_rest)*)
($($($params_rest)*)?)
($($sel_parsed)* $($sel)? : :)
($($arg_parsed)* $arg1, $arg2,)
($($method_family)*)
}
};
(
($receiver:expr)
()
()
($($sel_parsed:tt)+)
($($arg_parsed:tt)*)
($($method_family:tt)*)
) => {
$crate::__msg_send_helper! {
($receiver)
($($method_family)*)
(MsgSend::send_message)
($($sel_parsed)*)
($($arg_parsed)*)
}
};
(
($receiver:expr)
($sel:ident : _)
()
($($sel_parsed:tt)*)
($($arg_parsed:tt)*)
($($method_family:tt)*)
) => {
$crate::__msg_send_helper! {
($receiver)
($($method_family)*)
(MsgSendError::send_message_error)
($($sel_parsed)* $sel :)
($($arg_parsed)*)
}
};
(
($receiver:expr)
($($sel:ident : _)?)
($($arg:ident :)? ...)
($($sel_parsed:tt)*)
($($arg_parsed:tt)*)
($($method_family:tt)*)
) => ({
$crate::__macro_helpers::compile_error!(
"variadic methods are not yet supported"
)
});
(
($receiver:expr)
($($sel_rest:tt)*)
($($params_rest:tt)*)
($($sel_parsed:tt)*)
($($arg_parsed:tt)*)
($($method_family:tt)*)
) => ({
$crate::__macro_helpers::compile_error!(
"number of arguments in function and selector did not match"
)
});
}