| // 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); | |
| } |