Skip to content

Commit b7dfa8f

Browse files
alexboolSSheldon
authored andcommitted
Make objc macros compatible with use macro! (#76)
1 parent fa7ca43 commit b7dfa8f

File tree

2 files changed

+29
-6
lines changed

2 files changed

+29
-6
lines changed

src/macros.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,8 @@ let sel = sel!(setObject:forKey:);
7979
*/
8080
#[macro_export]
8181
macro_rules! sel {
82-
($name:ident) => ({sel_impl!(concat!(stringify!($name), '\0'))});
83-
($($name:ident :)+) => ({sel_impl!(concat!($(stringify!($name), ':'),+, '\0'))});
82+
($name:ident) => ({$crate::sel_impl!(concat!(stringify!($name), '\0'))});
83+
($($name:ident :)+) => ({$crate::sel_impl!(concat!($(stringify!($name), ':'),+, '\0'))});
8484
}
8585

8686
/**
@@ -108,28 +108,28 @@ let _: () = msg_send![obj, setArg1:1 arg2:2];
108108
#[macro_export]
109109
macro_rules! msg_send {
110110
(super($obj:expr, $superclass:expr), $name:ident) => ({
111-
let sel = sel!($name);
111+
let sel = $crate::sel!($name);
112112
match $crate::__send_super_message(&*$obj, $superclass, sel, ()) {
113113
Err(s) => panic!("{}", s),
114114
Ok(r) => r,
115115
}
116116
});
117117
(super($obj:expr, $superclass:expr), $($name:ident : $arg:expr)+) => ({
118-
let sel = sel!($($name:)+);
118+
let sel = $crate::sel!($($name:)+);
119119
match $crate::__send_super_message(&*$obj, $superclass, sel, ($($arg,)*)) {
120120
Err(s) => panic!("{}", s),
121121
Ok(r) => r,
122122
}
123123
});
124124
($obj:expr, $name:ident) => ({
125-
let sel = sel!($name);
125+
let sel = $crate::sel!($name);
126126
match $crate::__send_message(&*$obj, sel, ()) {
127127
Err(s) => panic!("{}", s),
128128
Ok(r) => r,
129129
}
130130
});
131131
($obj:expr, $($name:ident : $arg:expr)+) => ({
132-
let sel = sel!($($name:)+);
132+
let sel = $crate::sel!($($name:)+);
133133
match $crate::__send_message(&*$obj, sel, ($($arg,)*)) {
134134
Err(s) => panic!("{}", s),
135135
Ok(r) => r,

tests/use_macros.rs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#![cfg(any(target_os = "macos", target_os = "ios"))]
2+
3+
extern crate objc;
4+
5+
use objc::{class, msg_send, sel};
6+
use objc::runtime::Object;
7+
8+
#[test]
9+
fn use_class_and_msg_send() {
10+
unsafe {
11+
let cls = class!(NSObject);
12+
let obj: *mut Object = msg_send![cls, new];
13+
let _hash: usize = msg_send![obj, hash];
14+
let _: () = msg_send![obj, release];
15+
}
16+
}
17+
18+
#[test]
19+
fn use_sel() {
20+
let _sel = sel!(description);
21+
let _sel = sel!(setObject:forKey:);
22+
}
23+

0 commit comments

Comments
 (0)