aboutsummaryrefslogtreecommitdiff
path: root/base/runtime/procs_darwin.odin
blob: d176f0f630db28b5a6d21151ce919898a84e016f (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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#+private
package runtime

@(priority_index=-1e5)
foreign import ObjC "system:objc"

@(priority_index=-1e6)
foreign import libSystem "system:System"

import "base:intrinsics"

objc_id    :: ^intrinsics.objc_object
objc_Class :: ^intrinsics.objc_class
objc_SEL   :: ^intrinsics.objc_selector
objc_Ivar  :: ^intrinsics.objc_ivar
objc_BOOL  :: bool


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_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 ---
	object_getClass           :: proc "c" (obj: objc_id) -> objc_Class ---
}

foreign libSystem {
	_NSConcreteGlobalBlock: intrinsics.objc_class
	_NSConcreteStackBlock:  intrinsics.objc_class

	_Block_object_assign  :: proc "c" (rawptr, rawptr, i32) ---
	_Block_object_dispose :: proc "c" (rawptr, i32) ---
}