From 103a25cdd0ec546958a797c2e0edd8b2e3b22ae6 Mon Sep 17 00:00:00 2001 From: Ryan Leckey Date: Sat, 22 Sep 2018 19:17:02 -0700 Subject: [PATCH 1/2] Use local_inner_macros to remove the need to import 'sel_impl' when importing 'sel' --- src/macros.rs | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/macros.rs b/src/macros.rs index 2ac5240b5..80906f0d9 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -75,10 +75,22 @@ let sel = sel!(setObject:forKey:); # } ``` */ -#[macro_export] +#[macro_export(local_inner_macros)] macro_rules! sel { - ($name:ident) => ({sel_impl!(concat!(stringify!($name), '\0'))}); - ($($name:ident :)+) => ({sel_impl!(concat!($(stringify!($name), ':'),+, '\0'))}); + ($name:ident) => ({sel_impl!(__objc__concat!(__objc__stringify!($name), '\0'))}); + ($($name:ident :)+) => ({sel_impl!(__objc__concat!($(__objc__stringify!($name), ':'),+, '\0'))}); +} + +#[doc(hidden)] +#[macro_export] +macro_rules! __objc__concat { + ($($t:tt)*) => ( concat!($($t)*) ); +} + +#[doc(hidden)] +#[macro_export] +macro_rules! __objc__stringify { + ($($t:tt)*) => ( stringify!($($t)*) ); } /** From f28d55277f23d4717b841ea522951ab8a082cc33 Mon Sep 17 00:00:00 2001 From: Ryan Leckey Date: Mon, 24 Sep 2018 09:18:31 -0700 Subject: [PATCH 2/2] Use 'local_inner_macros' for msg_send! as well --- src/macros.rs | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/src/macros.rs b/src/macros.rs index 80906f0d9..203d75a05 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -81,18 +81,6 @@ macro_rules! sel { ($($name:ident :)+) => ({sel_impl!(__objc__concat!($(__objc__stringify!($name), ':'),+, '\0'))}); } -#[doc(hidden)] -#[macro_export] -macro_rules! __objc__concat { - ($($t:tt)*) => ( concat!($($t)*) ); -} - -#[doc(hidden)] -#[macro_export] -macro_rules! __objc__stringify { - ($($t:tt)*) => ( stringify!($($t)*) ); -} - /** Sends a message to an object. @@ -115,34 +103,52 @@ let _: () = msg_send![obj, setArg1:1 arg2:2]; # } ``` */ -#[macro_export] +#[macro_export(local_inner_macros)] 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), + Err(s) => __objc__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), + Err(s) => __objc__panic!("{}", s), Ok(r) => r, } }); ($obj:expr, $name:ident) => ({ let sel = sel!($name); match $crate::__send_message(&*$obj, sel, ()) { - Err(s) => panic!("{}", s), + Err(s) => __objc__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), + Err(s) => __objc__panic!("{}", s), Ok(r) => r, } }); } + +#[doc(hidden)] +#[macro_export] +macro_rules! __objc__concat { + ($($t:tt)*) => ( concat!($($t)*) ); +} + +#[doc(hidden)] +#[macro_export] +macro_rules! __objc__stringify { + ($($t:tt)*) => ( stringify!($($t)*) ); +} + +#[doc(hidden)] +#[macro_export] +macro_rules! __objc__panic { + ($($t:tt)*) => ( panic!($($t)*) ); +}