aboutsummaryrefslogtreecommitdiff
path: root/base/runtime
diff options
context:
space:
mode:
authorHarold Brenes <harold@hbrenes.com>2025-04-19 08:04:23 -0400
committerHarold Brenes <harold@hbrenes.com>2025-04-20 21:53:46 -0400
commita3de9c8de4e539905a85f3cc060f95529b402f18 (patch)
treecd441f8970e81170fda231587b801040088123fb /base/runtime
parent2dedb199b896e97ddd75040fdb935af6d57c5b49 (diff)
Add initial support for Objective-C class implementation
Diffstat (limited to 'base/runtime')
-rw-r--r--base/runtime/procs_darwin.odin25
1 files changed, 19 insertions, 6 deletions
diff --git a/base/runtime/procs_darwin.odin b/base/runtime/procs_darwin.odin
index c3fc46af1..0aec57e80 100644
--- a/base/runtime/procs_darwin.odin
+++ b/base/runtime/procs_darwin.odin
@@ -2,21 +2,34 @@
package runtime
@(priority_index=-1e6)
-foreign import "system:Foundation.framework"
+foreign import ObjC "system:objc"
import "base:intrinsics"
-objc_id :: ^intrinsics.objc_object
+objc_id :: ^intrinsics.objc_object
objc_Class :: ^intrinsics.objc_class
-objc_SEL :: ^intrinsics.objc_selector
+objc_SEL :: ^intrinsics.objc_selector
+objc_Ivar :: ^intrinsics.objc_ivar
+objc_BOOL :: bool
-foreign Foundation {
- objc_lookUpClass :: proc "c" (name: cstring) -> objc_Class ---
+
+objc_IMP :: proc "c" (object: objc_id, sel: objc_SEL, #c_vararg args: ..any) -> objc_id
+
+foreign ObjC {
sel_registerName :: proc "c" (name: cstring) -> objc_SEL ---
- objc_allocateClassPair :: proc "c" (superclass: objc_Class, name: cstring, extraBytes: uint) -> objc_Class ---
objc_msgSend :: proc "c" (self: objc_id, op: objc_SEL, #c_vararg args: ..any) ---
objc_msgSend_fpret :: proc "c" (self: objc_id, op: objc_SEL, #c_vararg args: ..any) -> f64 ---
objc_msgSend_fp2ret :: proc "c" (self: objc_id, op: objc_SEL, #c_vararg args: ..any) -> complex128 ---
objc_msgSend_stret :: proc "c" (self: objc_id, op: objc_SEL, #c_vararg args: ..any) ---
+
+ objc_lookUpClass :: proc "c" (name: cstring) -> objc_Class ---
+ objc_allocateClassPair :: proc "c" (superclass: objc_Class, name: cstring, extraBytes: uint) -> objc_Class ---
+ objc_registerClassPair :: proc "c" (cls : objc_Class) ---
+ class_addMethod :: proc "c" (cls: objc_Class, name: objc_SEL, imp: objc_IMP, types: cstring) -> objc_BOOL ---
+ class_addIvar :: proc "c" (cls: objc_Class, name: cstring, size: uint, alignment: u8, types: cstring) -> objc_BOOL ---
+ class_getInstanceVariable :: proc "c" (cls : objc_Class, name: cstring) -> objc_Ivar ---
+ class_getInstanceSize :: proc "c" (cls : objc_Class) -> uint ---
+ ivar_getOffset :: proc "c" (v: objc_Ivar) -> uintptr ---
}
+