| // Call `[NSObject class]` using `objc::class!` and `objc::selector!`. |
| |
| //@ edition: 2024 |
| //@ only-apple |
| //@ run-pass |
| |
| #![feature(darwin_objc)] |
| |
| use std::mem::transmute; |
| use std::os::darwin::objc; |
| |
| #[link(name = "Foundation", kind = "framework")] |
| unsafe extern "C" {} |
| |
| #[link(name = "objc", kind = "dylib")] |
| unsafe extern "C" { |
| unsafe fn objc_msgSend(); |
| } |
| |
| fn main() { |
| let msg_send_fn = unsafe { |
| transmute::< |
| unsafe extern "C" fn(), |
| unsafe extern "C" fn(objc::Class, objc::SEL) -> objc::Class, |
| >(objc_msgSend) |
| }; |
| let static_sel = objc::selector!("class"); |
| let static_class = objc::class!("NSObject"); |
| let runtime_class = unsafe { msg_send_fn(static_class, static_sel) }; |
| assert_eq!(static_class, runtime_class); |
| } |