about summary refs log tree commit diff
path: root/tests/ui/darwin-objc/darwin-objc-class-selector.rs
blob: b9a2fc3634f46efb987126cd572c3939a9ba866b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// 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);
}