mirror of
https://github.com/Ed94/Odin.git
synced 2026-06-18 11:52:22 -07:00
5af13f5d53
- Add intrinsics.objc_super() - Emit objc_msgSendSuper2 calls when an objc method call is combined with objc_super(self) - Fix objc_block return value ABI for large struct returns - Fix objc_implement method wrappers bad ABI for large struct returns and indirect args - Simplify parameter forwarding for objc_imlpement methods - Add intrinsics.objc_instancetype to mimi Objective-C instancetype* returns This facilitates returning the correct type on subclasses when calling mehtods such as `alloc`, `init`, `retain`, etc. - Refactor Objective-C class implementations generation so that hierarchies are properly initialized - Better codegen for context passing with ivar-based autocontext - Allow @superclass on imported objc-c objects - Better codegen for block forwarding invoker, arguments are forwarded directly
55 lines
2.3 KiB
Odin
55 lines
2.3 KiB
Odin
#+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) ---
|
|
objc_msgSendSuper2 :: proc "c" (super: ^objc_super, op: objc_SEL, #c_vararg args: ..any) ---
|
|
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) ---
|
|
}
|