aboutsummaryrefslogtreecommitdiff
path: root/base/runtime/procs_darwin.odin
blob: 0ffe68e49949fc4fd89a139475c1e47cbee0f5a0 (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
47
48
49
50
51
52
53
54
55
56
#+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_super :: struct {
	receiver: 	 objc_id,
	super_class: 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_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) ---

	// See: https://github.com/opensource-apple/objc4/blob/cd5e62a5597ea7a31dccef089317abb3a661c154/runtime/objc-abi.h#L111
	objc_msgSendSuper2       :: proc "c" (super: rawptr, op: objc_SEL, #c_vararg args: ..any) -> objc_id ---
	objc_msgSendSuper2_stret :: proc "c" (super: ^objc_super, 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 ---
	class_getSuperclass       :: proc "c" (cls : objc_Class) -> objc_Class ---
	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) ---
}