Initial project import
This commit is contained in:
commit
23f2d29e32
11957 files changed
+1754577
No files matched your search
@@ -0,0 +1,293 @@
|
||||
module macos
|
||||
|
||||
#flag darwin -framework Foundation
|
||||
#flag darwin -lobjc
|
||||
#insert "@VEXEROOT/vlib/macos/objc_bridge.h"
|
||||
|
||||
pub type Id = voidptr
|
||||
pub type Sel = voidptr
|
||||
pub type Class = voidptr
|
||||
pub type Protocol = voidptr
|
||||
pub type Rect = C.macos_rect
|
||||
|
||||
pub struct C.macos_rect {
|
||||
pub mut:
|
||||
x f64
|
||||
y f64
|
||||
width f64
|
||||
height f64
|
||||
}
|
||||
|
||||
pub const assoc_assign = usize(0)
|
||||
pub const assoc_retain_nonatomic = usize(1)
|
||||
pub const assoc_copy_nonatomic = usize(3)
|
||||
pub const assoc_retain = usize(0o1401)
|
||||
pub const assoc_copy = usize(0o1403)
|
||||
pub const run_loop_default_mode = 'kCFRunLoopDefaultMode'
|
||||
|
||||
fn C.macos_objc_msg_id0(obj Id, selector Sel) Id
|
||||
fn C.macos_objc_msg_id1(obj Id, selector Sel, a0 voidptr) Id
|
||||
fn C.macos_objc_msg_id2(obj Id, selector Sel, a0 voidptr, a1 voidptr) Id
|
||||
fn C.macos_objc_msg_id3(obj Id, selector Sel, a0 voidptr, a1 voidptr, a2 voidptr) Id
|
||||
fn C.macos_objc_msg_id4(obj Id, selector Sel, a0 voidptr, a1 voidptr, a2 voidptr, a3 voidptr) Id
|
||||
fn C.macos_objc_msg_id_rect(obj Id, selector Sel, rect Rect) Id
|
||||
fn C.macos_objc_msg_id_rect_bool(obj Id, selector Sel, rect Rect, a1 bool) Id
|
||||
fn C.macos_objc_msg_id_rect_obj(obj Id, selector Sel, rect Rect, a1 voidptr) Id
|
||||
fn C.macos_objc_msg_id_rect_u64_u64_bool(obj Id, selector Sel, rect Rect, a1 u64, a2 u64, a3 bool) Id
|
||||
fn C.macos_objc_msg_id_obj_u64_bool(obj Id, selector Sel, a0 voidptr, a1 u64, a2 bool) Id
|
||||
fn C.macos_objc_msg_id_obj_sel_obj(obj Id, selector Sel, a0 voidptr, a1 voidptr, a2 voidptr) Id
|
||||
fn C.macos_objc_msg_id_f64(obj Id, selector Sel, a0 f64) Id
|
||||
fn C.macos_objc_msg_id_u64(obj Id, selector Sel, a0 u64) Id
|
||||
fn C.macos_objc_msg_void0(obj Id, selector Sel)
|
||||
fn C.macos_objc_msg_void1(obj Id, selector Sel, a0 voidptr)
|
||||
fn C.macos_objc_msg_void2(obj Id, selector Sel, a0 voidptr, a1 voidptr)
|
||||
fn C.macos_objc_msg_void3(obj Id, selector Sel, a0 voidptr, a1 voidptr, a2 voidptr)
|
||||
fn C.macos_objc_msg_void_bool(obj Id, selector Sel, a0 bool)
|
||||
fn C.macos_objc_msg_void_i64(obj Id, selector Sel, a0 i64)
|
||||
fn C.macos_objc_msg_void_u64(obj Id, selector Sel, a0 u64)
|
||||
fn C.macos_objc_msg_void_f64(obj Id, selector Sel, a0 f64)
|
||||
fn C.macos_objc_msg_void_rect(obj Id, selector Sel, rect Rect)
|
||||
fn C.macos_objc_msg_void_rect_bool_bool(obj Id, selector Sel, rect Rect, a1 bool, a2 bool)
|
||||
fn C.macos_objc_msg_bool0(obj Id, selector Sel) bool
|
||||
fn C.macos_objc_msg_bool1(obj Id, selector Sel, a0 voidptr) bool
|
||||
fn C.macos_objc_msg_i64(obj Id, selector Sel) i64
|
||||
fn C.macos_objc_msg_u64(obj Id, selector Sel) u64
|
||||
fn C.macos_objc_msg_f64(obj Id, selector Sel) f64
|
||||
fn C.macos_objc_msg_rect(obj Id, selector Sel) Rect
|
||||
fn C.macos_objc_get_class(name &char) Class
|
||||
fn C.macos_sel_register_name(name &char) Sel
|
||||
fn C.macos_objc_allocate_class_pair(superclass Class, name &char, extra_bytes usize) Class
|
||||
fn C.macos_objc_register_class_pair(cls Class)
|
||||
fn C.macos_class_add_method(cls Class, name Sel, imp voidptr, types &char) bool
|
||||
fn C.macos_class_add_ivar(cls Class, name &char, size usize, alignment u8, types &char) bool
|
||||
fn C.macos_objc_get_protocol(name &char) Protocol
|
||||
fn C.macos_class_add_protocol(cls Class, protocol Protocol) bool
|
||||
fn C.macos_objc_set_ptr_ivar(obj Id, name &char, value voidptr)
|
||||
fn C.macos_objc_get_ptr_ivar(obj Id, name &char) voidptr
|
||||
fn C.macos_set_associated_object(obj Id, key voidptr, value Id, policy usize)
|
||||
fn C.macos_get_associated_object(obj Id, key voidptr) Id
|
||||
|
||||
@[inline]
|
||||
pub fn get_class(name string) Id {
|
||||
return Id(C.macos_objc_get_class(&char(name.str)))
|
||||
}
|
||||
|
||||
@[inline]
|
||||
pub fn get_protocol(name string) Protocol {
|
||||
return C.macos_objc_get_protocol(&char(name.str))
|
||||
}
|
||||
|
||||
@[inline]
|
||||
pub fn sel(name string) Sel {
|
||||
return C.macos_sel_register_name(&char(name.str))
|
||||
}
|
||||
|
||||
@[inline]
|
||||
pub fn rect(x f64, y f64, width f64, height f64) Rect {
|
||||
return C.macos_rect{
|
||||
x: x
|
||||
y: y
|
||||
width: width
|
||||
height: height
|
||||
}
|
||||
}
|
||||
|
||||
@[inline]
|
||||
pub fn msg_id(obj Id, selector string) Id {
|
||||
return C.macos_objc_msg_id0(obj, sel(selector))
|
||||
}
|
||||
|
||||
@[inline]
|
||||
pub fn msg_void(obj Id, selector string) {
|
||||
C.macos_objc_msg_void0(obj, sel(selector))
|
||||
}
|
||||
|
||||
@[inline]
|
||||
pub fn msg_bool(obj Id, selector string) bool {
|
||||
return C.macos_objc_msg_bool0(obj, sel(selector))
|
||||
}
|
||||
|
||||
@[inline]
|
||||
pub fn msg_i64(obj Id, selector string) i64 {
|
||||
return C.macos_objc_msg_i64(obj, sel(selector))
|
||||
}
|
||||
|
||||
@[inline]
|
||||
pub fn msg_u64(obj Id, selector string) u64 {
|
||||
return C.macos_objc_msg_u64(obj, sel(selector))
|
||||
}
|
||||
|
||||
@[inline]
|
||||
pub fn msg_f64(obj Id, selector string) f64 {
|
||||
return C.macos_objc_msg_f64(obj, sel(selector))
|
||||
}
|
||||
|
||||
@[inline]
|
||||
pub fn msg_rect(obj Id, selector string) Rect {
|
||||
return C.macos_objc_msg_rect(obj, sel(selector))
|
||||
}
|
||||
|
||||
// ── Multi-argument message sending ─────────────────────────────────
|
||||
|
||||
@[inline]
|
||||
pub fn msg_id1(obj Id, selector string, a0 Id) Id {
|
||||
return C.macos_objc_msg_id1(obj, sel(selector), a0)
|
||||
}
|
||||
|
||||
@[inline]
|
||||
pub fn msg_id2(obj Id, selector string, a0 Id, a1 Id) Id {
|
||||
return C.macos_objc_msg_id2(obj, sel(selector), a0, a1)
|
||||
}
|
||||
|
||||
@[inline]
|
||||
pub fn msg_id3(obj Id, selector string, a0 Id, a1 Id, a2 Id) Id {
|
||||
return C.macos_objc_msg_id3(obj, sel(selector), a0, a1, a2)
|
||||
}
|
||||
|
||||
@[inline]
|
||||
pub fn msg_id4(obj Id, selector string, a0 Id, a1 Id, a2 Id, a3 Id) Id {
|
||||
return C.macos_objc_msg_id4(obj, sel(selector), a0, a1, a2, a3)
|
||||
}
|
||||
|
||||
@[inline]
|
||||
pub fn msg_id_rect(obj Id, selector string, r Rect) Id {
|
||||
return C.macos_objc_msg_id_rect(obj, sel(selector), r)
|
||||
}
|
||||
|
||||
@[inline]
|
||||
pub fn msg_id_f64(obj Id, selector string, a0 f64) Id {
|
||||
return C.macos_objc_msg_id_f64(obj, sel(selector), a0)
|
||||
}
|
||||
|
||||
@[inline]
|
||||
pub fn msg_id_u64(obj Id, selector string, a0 u64) Id {
|
||||
return C.macos_objc_msg_id_u64(obj, sel(selector), a0)
|
||||
}
|
||||
|
||||
@[inline]
|
||||
pub fn msg_void1(obj Id, selector string, a0 Id) {
|
||||
C.macos_objc_msg_void1(obj, sel(selector), a0)
|
||||
}
|
||||
|
||||
@[inline]
|
||||
pub fn msg_void2(obj Id, selector string, a0 Id, a1 Id) {
|
||||
C.macos_objc_msg_void2(obj, sel(selector), a0, a1)
|
||||
}
|
||||
|
||||
@[inline]
|
||||
pub fn msg_void3(obj Id, selector string, a0 Id, a1 Id, a2 Id) {
|
||||
C.macos_objc_msg_void3(obj, sel(selector), a0, a1, a2)
|
||||
}
|
||||
|
||||
@[inline]
|
||||
pub fn msg_void_bool(obj Id, selector string, a0 bool) {
|
||||
C.macos_objc_msg_void_bool(obj, sel(selector), a0)
|
||||
}
|
||||
|
||||
@[inline]
|
||||
pub fn msg_void_i64(obj Id, selector string, a0 i64) {
|
||||
C.macos_objc_msg_void_i64(obj, sel(selector), a0)
|
||||
}
|
||||
|
||||
@[inline]
|
||||
pub fn msg_void_u64(obj Id, selector string, a0 u64) {
|
||||
C.macos_objc_msg_void_u64(obj, sel(selector), a0)
|
||||
}
|
||||
|
||||
@[inline]
|
||||
pub fn msg_void_f64(obj Id, selector string, a0 f64) {
|
||||
C.macos_objc_msg_void_f64(obj, sel(selector), a0)
|
||||
}
|
||||
|
||||
@[inline]
|
||||
pub fn msg_void_rect(obj Id, selector string, r Rect) {
|
||||
C.macos_objc_msg_void_rect(obj, sel(selector), r)
|
||||
}
|
||||
|
||||
// ── Runtime class helpers ──────────────────────────────────────────
|
||||
|
||||
@[inline]
|
||||
pub fn allocate_class_pair(superclass Id, name string) Id {
|
||||
return C.macos_objc_allocate_class_pair(superclass, &char(name.str), 0)
|
||||
}
|
||||
|
||||
@[inline]
|
||||
pub fn register_class_pair(cls Id) {
|
||||
C.macos_objc_register_class_pair(cls)
|
||||
}
|
||||
|
||||
@[inline]
|
||||
pub fn add_method(cls Id, sel_name string, imp voidptr, types string) bool {
|
||||
return C.macos_class_add_method(cls, sel(sel_name), imp, &char(types.str))
|
||||
}
|
||||
|
||||
@[inline]
|
||||
pub fn add_protocol(cls Id, proto Protocol) bool {
|
||||
return C.macos_class_add_protocol(cls, proto)
|
||||
}
|
||||
|
||||
// ── Allocation ─────────────────────────────────────────────────────
|
||||
|
||||
@[inline]
|
||||
pub fn alloc(class_name string) Id {
|
||||
return msg_id(get_class(class_name), 'alloc')
|
||||
}
|
||||
|
||||
@[inline]
|
||||
pub fn new(class_name string) Id {
|
||||
return msg_id(get_class(class_name), 'new')
|
||||
}
|
||||
|
||||
@[inline]
|
||||
pub fn nsstring(s string) Id {
|
||||
return C.macos_objc_msg_id1(get_class('NSString'), sel('stringWithUTF8String:'), &char(s.str))
|
||||
}
|
||||
|
||||
pub fn utf8_string(obj Id) string {
|
||||
if obj == unsafe { nil } {
|
||||
return ''
|
||||
}
|
||||
cstr := &char(C.macos_objc_msg_id0(obj, sel('UTF8String')))
|
||||
if cstr == unsafe { nil } {
|
||||
return ''
|
||||
}
|
||||
return unsafe { cstr.vstring().clone() }
|
||||
}
|
||||
|
||||
pub fn description_string(obj Id) string {
|
||||
if obj == unsafe { nil } {
|
||||
return ''
|
||||
}
|
||||
return utf8_string(C.macos_objc_msg_id0(obj, sel('description')))
|
||||
}
|
||||
|
||||
@[inline]
|
||||
pub fn retain(obj Id) Id {
|
||||
if obj == unsafe { nil } {
|
||||
return unsafe { nil }
|
||||
}
|
||||
return C.macos_objc_msg_id0(obj, sel('retain'))
|
||||
}
|
||||
|
||||
@[inline]
|
||||
pub fn release(obj Id) {
|
||||
if obj == unsafe { nil } {
|
||||
return
|
||||
}
|
||||
C.macos_objc_msg_void0(obj, sel('release'))
|
||||
}
|
||||
|
||||
@[inline]
|
||||
pub fn autorelease_pool_new() Id {
|
||||
return new('NSAutoreleasePool')
|
||||
}
|
||||
|
||||
@[inline]
|
||||
pub fn set_associated_object(obj Id, key voidptr, value Id, policy usize) {
|
||||
C.macos_set_associated_object(obj, key, value, policy)
|
||||
}
|
||||
|
||||
@[inline]
|
||||
pub fn get_associated_object(obj Id, key voidptr) Id {
|
||||
return C.macos_get_associated_object(obj, key)
|
||||
}
|
||||
@@ -0,0 +1,190 @@
|
||||
#include <stdbool.h>
|
||||
#include <objc/message.h>
|
||||
#include <objc/runtime.h>
|
||||
|
||||
typedef struct macos_rect {
|
||||
double x;
|
||||
double y;
|
||||
double width;
|
||||
double height;
|
||||
} macos_rect;
|
||||
|
||||
static inline void* macos_objc_get_class(const char* name) {
|
||||
return (__bridge void*)objc_getClass(name);
|
||||
}
|
||||
|
||||
static inline void* macos_objc_get_protocol(const char* name) {
|
||||
return (__bridge void*)objc_getProtocol(name);
|
||||
}
|
||||
|
||||
static inline void* macos_sel_register_name(const char* name) {
|
||||
return (void*)sel_registerName(name);
|
||||
}
|
||||
|
||||
static inline void* macos_objc_allocate_class_pair(void* superclass, const char* name, size_t extra_bytes) {
|
||||
return (__bridge void*)objc_allocateClassPair((__bridge Class)superclass, name, extra_bytes);
|
||||
}
|
||||
|
||||
static inline void macos_objc_register_class_pair(void* cls) {
|
||||
objc_registerClassPair((__bridge Class)cls);
|
||||
}
|
||||
|
||||
static inline bool macos_class_add_method(void* cls, void* name, void* imp, const char* types) {
|
||||
return class_addMethod((__bridge Class)cls, (SEL)name, (IMP)imp, types);
|
||||
}
|
||||
|
||||
static inline bool macos_class_add_ivar(void* cls, const char* name, size_t size, uint8_t alignment, const char* types) {
|
||||
return class_addIvar((__bridge Class)cls, name, size, alignment, types);
|
||||
}
|
||||
|
||||
static inline bool macos_class_add_protocol(void* cls, void* protocol) {
|
||||
return class_addProtocol((__bridge Class)cls, (__bridge Protocol*)protocol);
|
||||
}
|
||||
|
||||
static inline void macos_set_associated_object(void* obj, const void* key, void* value, uintptr_t policy) {
|
||||
objc_setAssociatedObject((__bridge id)obj, key, (__bridge id)value, (objc_AssociationPolicy)policy);
|
||||
}
|
||||
|
||||
static inline void* macos_get_associated_object(void* obj, const void* key) {
|
||||
return (__bridge void*)objc_getAssociatedObject((__bridge id)obj, key);
|
||||
}
|
||||
|
||||
static inline void macos_objc_set_ptr_ivar(void* obj, const char* name, void* value) {
|
||||
if (obj == NULL) {
|
||||
return;
|
||||
}
|
||||
Ivar ivar = class_getInstanceVariable(object_getClass((__bridge id)obj), name);
|
||||
if (ivar == NULL) {
|
||||
return;
|
||||
}
|
||||
ptrdiff_t offset = ivar_getOffset(ivar);
|
||||
*(void**)(((char*)obj) + offset) = value;
|
||||
}
|
||||
|
||||
static inline void* macos_objc_get_ptr_ivar(void* obj, const char* name) {
|
||||
if (obj == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
Ivar ivar = class_getInstanceVariable(object_getClass((__bridge id)obj), name);
|
||||
if (ivar == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
ptrdiff_t offset = ivar_getOffset(ivar);
|
||||
return *(void**)(((char*)obj) + offset);
|
||||
}
|
||||
|
||||
static inline void* macos_objc_msg_id0(void* obj, void* sel) {
|
||||
return ((void* (*)(void*, void*))objc_msgSend)(obj, sel);
|
||||
}
|
||||
|
||||
static inline void* macos_objc_msg_id1(void* obj, void* sel, void* a0) {
|
||||
return ((void* (*)(void*, void*, void*))objc_msgSend)(obj, sel, a0);
|
||||
}
|
||||
|
||||
static inline void* macos_objc_msg_id2(void* obj, void* sel, void* a0, void* a1) {
|
||||
return ((void* (*)(void*, void*, void*, void*))objc_msgSend)(obj, sel, a0, a1);
|
||||
}
|
||||
|
||||
static inline void* macos_objc_msg_id3(void* obj, void* sel, void* a0, void* a1, void* a2) {
|
||||
return ((void* (*)(void*, void*, void*, void*, void*))objc_msgSend)(obj, sel, a0, a1, a2);
|
||||
}
|
||||
|
||||
static inline void* macos_objc_msg_id4(void* obj, void* sel, void* a0, void* a1, void* a2, void* a3) {
|
||||
return ((void* (*)(void*, void*, void*, void*, void*, void*))objc_msgSend)(obj, sel, a0, a1, a2, a3);
|
||||
}
|
||||
|
||||
static inline void* macos_objc_msg_id_rect(void* obj, void* sel, macos_rect rect) {
|
||||
return ((void* (*)(void*, void*, macos_rect))objc_msgSend)(obj, sel, rect);
|
||||
}
|
||||
|
||||
static inline void* macos_objc_msg_id_rect_bool(void* obj, void* sel, macos_rect rect, bool a1) {
|
||||
return ((void* (*)(void*, void*, macos_rect, bool))objc_msgSend)(obj, sel, rect, a1);
|
||||
}
|
||||
|
||||
static inline void* macos_objc_msg_id_rect_obj(void* obj, void* sel, macos_rect rect, void* a1) {
|
||||
return ((void* (*)(void*, void*, macos_rect, void*))objc_msgSend)(obj, sel, rect, a1);
|
||||
}
|
||||
|
||||
static inline void* macos_objc_msg_id_rect_u64_u64_bool(void* obj, void* sel, macos_rect rect, unsigned long long a1, unsigned long long a2, bool a3) {
|
||||
return ((void* (*)(void*, void*, macos_rect, unsigned long long, unsigned long long, bool))objc_msgSend)(obj, sel, rect, a1, a2, a3);
|
||||
}
|
||||
|
||||
static inline void* macos_objc_msg_id_obj_u64_bool(void* obj, void* sel, void* a0, unsigned long long a1, bool a2) {
|
||||
return ((void* (*)(void*, void*, void*, unsigned long long, bool))objc_msgSend)(obj, sel, a0, a1, a2);
|
||||
}
|
||||
|
||||
static inline void* macos_objc_msg_id_obj_sel_obj(void* obj, void* sel, void* a0, void* a1, void* a2) {
|
||||
return ((void* (*)(void*, void*, void*, void*, void*))objc_msgSend)(obj, sel, a0, a1, a2);
|
||||
}
|
||||
|
||||
static inline void* macos_objc_msg_id_f64(void* obj, void* sel, double a0) {
|
||||
return ((void* (*)(void*, void*, double))objc_msgSend)(obj, sel, a0);
|
||||
}
|
||||
|
||||
static inline void* macos_objc_msg_id_u64(void* obj, void* sel, unsigned long long a0) {
|
||||
return ((void* (*)(void*, void*, unsigned long long))objc_msgSend)(obj, sel, a0);
|
||||
}
|
||||
|
||||
static inline void macos_objc_msg_void0(void* obj, void* sel) {
|
||||
((void (*)(void*, void*))objc_msgSend)(obj, sel);
|
||||
}
|
||||
|
||||
static inline void macos_objc_msg_void1(void* obj, void* sel, void* a0) {
|
||||
((void (*)(void*, void*, void*))objc_msgSend)(obj, sel, a0);
|
||||
}
|
||||
|
||||
static inline void macos_objc_msg_void2(void* obj, void* sel, void* a0, void* a1) {
|
||||
((void (*)(void*, void*, void*, void*))objc_msgSend)(obj, sel, a0, a1);
|
||||
}
|
||||
|
||||
static inline void macos_objc_msg_void3(void* obj, void* sel, void* a0, void* a1, void* a2) {
|
||||
((void (*)(void*, void*, void*, void*, void*))objc_msgSend)(obj, sel, a0, a1, a2);
|
||||
}
|
||||
|
||||
static inline void macos_objc_msg_void_bool(void* obj, void* sel, bool a0) {
|
||||
((void (*)(void*, void*, bool))objc_msgSend)(obj, sel, a0);
|
||||
}
|
||||
|
||||
static inline void macos_objc_msg_void_i64(void* obj, void* sel, long long a0) {
|
||||
((void (*)(void*, void*, long long))objc_msgSend)(obj, sel, a0);
|
||||
}
|
||||
|
||||
static inline void macos_objc_msg_void_u64(void* obj, void* sel, unsigned long long a0) {
|
||||
((void (*)(void*, void*, unsigned long long))objc_msgSend)(obj, sel, a0);
|
||||
}
|
||||
|
||||
static inline void macos_objc_msg_void_f64(void* obj, void* sel, double a0) {
|
||||
((void (*)(void*, void*, double))objc_msgSend)(obj, sel, a0);
|
||||
}
|
||||
|
||||
static inline void macos_objc_msg_void_rect(void* obj, void* sel, macos_rect rect) {
|
||||
((void (*)(void*, void*, macos_rect))objc_msgSend)(obj, sel, rect);
|
||||
}
|
||||
|
||||
static inline void macos_objc_msg_void_rect_bool_bool(void* obj, void* sel, macos_rect rect, bool a1, bool a2) {
|
||||
((void (*)(void*, void*, macos_rect, bool, bool))objc_msgSend)(obj, sel, rect, a1, a2);
|
||||
}
|
||||
|
||||
static inline bool macos_objc_msg_bool0(void* obj, void* sel) {
|
||||
return ((bool (*)(void*, void*))objc_msgSend)(obj, sel);
|
||||
}
|
||||
|
||||
static inline bool macos_objc_msg_bool1(void* obj, void* sel, void* a0) {
|
||||
return ((bool (*)(void*, void*, void*))objc_msgSend)(obj, sel, a0);
|
||||
}
|
||||
|
||||
static inline long long macos_objc_msg_i64(void* obj, void* sel) {
|
||||
return ((long long (*)(void*, void*))objc_msgSend)(obj, sel);
|
||||
}
|
||||
|
||||
static inline unsigned long long macos_objc_msg_u64(void* obj, void* sel) {
|
||||
return ((unsigned long long (*)(void*, void*))objc_msgSend)(obj, sel);
|
||||
}
|
||||
|
||||
static inline double macos_objc_msg_f64(void* obj, void* sel) {
|
||||
return ((double (*)(void*, void*))objc_msgSend)(obj, sel);
|
||||
}
|
||||
|
||||
static inline macos_rect macos_objc_msg_rect(void* obj, void* sel) {
|
||||
return ((macos_rect (*)(void*, void*))objc_msgSend)(obj, sel);
|
||||
}
|
||||
Reference in new issue
Block a user