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