mirror of
https://github.com/odin-lang/Odin.git
synced 2026-01-01 19:02:13 +00:00
167 lines
7.1 KiB
Odin
167 lines
7.1 KiB
Odin
package objc_Foundation
|
|
|
|
foreign import "system:Foundation.framework"
|
|
// NOTE: Most of our bindings are reliant on Cocoa (everything under appkit) so just unconditionally import it
|
|
@(require) foreign import "system:Cocoa.framework"
|
|
|
|
import "base:intrinsics"
|
|
import "core:c"
|
|
|
|
IMP :: proc "c" (object: id, sel: SEL, #c_vararg args: ..any) -> id
|
|
|
|
@(default_calling_convention="c")
|
|
foreign Foundation {
|
|
objc_getMetaClass :: proc(name: cstring) -> id ---
|
|
objc_lookUpClass :: proc(name: cstring) -> Class ---
|
|
objc_allocateClassPair :: proc(superclass: Class, name: cstring, extraBytes: c.size_t) -> Class ---
|
|
objc_registerClassPair :: proc(cls: Class) ---
|
|
objc_disposeClassPair :: proc(cls: Class) ---
|
|
objc_duplicateClass :: proc(original: Class, name: cstring, extraBytes: c.size_t) -> Class ---
|
|
objc_getProtocol :: proc(name: cstring) -> ^Protocol ---
|
|
objc_copyProtocolList :: proc(outCount: ^uint) -> [^]^Protocol ---
|
|
objc_constructInstance :: proc(cls: Class, bytes: rawptr) -> id ---
|
|
objc_destructInstance :: proc(obj: id) -> rawptr ---
|
|
objc_getClassList :: proc(buffer: [^]Class, bufferCount: int) -> int ---
|
|
objc_copyClassList :: proc(outCount: ^uint) -> [^]Class ---
|
|
objc_getRequiredClass :: proc(name: cstring) -> Class ---
|
|
objc_setAssociatedObject :: proc(object: id, key: rawptr, value: id, policy: objc_AssociationPolicy) ---
|
|
objc_getAssociatedObject :: proc(object: id, key: rawptr) -> id ---
|
|
objc_removeAssociatedObjects :: proc(object: id) ---
|
|
|
|
sel_registerName :: proc(name: cstring) -> SEL ---
|
|
sel_getName :: proc(sel: SEL) -> cstring ---
|
|
sel_isEqual :: proc(lhs, rhs: SEL) -> BOOL ---
|
|
|
|
class_addMethod :: proc(cls: Class, name: SEL, imp: IMP, types: cstring) -> BOOL ---
|
|
class_getInstanceMethod :: proc(cls: Class, name: SEL) -> Method ---
|
|
class_getClassMethod :: proc(cls: Class, name: SEL) -> Method ---
|
|
class_copyMethodList :: proc(cls: Class, outCount: ^uint) -> [^]Method ---
|
|
class_createInstance :: proc(cls: Class, extraBytes: c.size_t) -> id ---
|
|
class_replaceMethod :: proc(cls: Class, name: SEL, imp: IMP, types: cstring) -> IMP ---
|
|
class_getMethodImplementation :: proc(cls: Class, name: SEL) -> IMP ---
|
|
class_getSuperclass :: proc(cls: Class) -> Class ---
|
|
class_getName :: proc(cls: Class) -> cstring ---
|
|
class_isMetaClass :: proc(cls: Class) -> BOOL ---
|
|
class_addProtocol :: proc(cls: Class, protocol: ^Protocol) -> BOOL ---
|
|
class_getVersion :: proc(cls: Class) -> c.int ---
|
|
class_setVersion :: proc(cls: Class, version: c.int) ---
|
|
class_getProperty :: proc(cls: Class, name: cstring) -> objc_property_t ---
|
|
class_addProperty :: proc(cls: Class, name: cstring, attributes: [^]objc_property_attribute_t, attributeCount: uint) -> BOOL ---
|
|
class_replaceProperty :: proc(cls: Class, name: cstring, attributes: [^]objc_property_attribute_t, attributeCount: uint) ---
|
|
class_copyPropertyList :: proc(cls: Class, outCount: ^uint) -> [^]objc_property_t ---
|
|
class_conformsToProtocol :: proc(cls: Class, protocol: ^Protocol) -> BOOL ---
|
|
class_copyProtocolList :: proc(cls: Class, outCount: ^uint) -> [^]^Protocol ---
|
|
class_respondsToSelector :: proc(cls: Class, sel: SEL) -> BOOL ---
|
|
class_getClassVariable :: proc(cls: Class, name: cstring) -> Ivar ---
|
|
class_getInstanceVariable :: proc(cls: Class, name: cstring) -> Ivar ---
|
|
class_addIvar :: proc(cls: Class, name: cstring, size: c.size_t, alignment: u8, types: cstring) -> BOOL ---
|
|
class_copyIvarList :: proc(cls: Class, outCount: ^uint) -> [^]Ivar ---
|
|
class_getInstanceSize :: proc(cls: Class) -> c.size_t ---
|
|
|
|
property_getName :: proc(property: objc_property_t) -> cstring ---
|
|
property_getAttributes :: proc(property: objc_property_t) -> cstring ---
|
|
property_copyAttributeList :: proc(property: objc_property_t, outCount: ^uint) -> [^]objc_property_attribute_t ---
|
|
property_copyAttributeValue :: proc(property: objc_property_t, attributeName: cstring) -> cstring ---
|
|
|
|
protocol_conformsToProtocol :: proc(proto: ^Protocol, other: ^Protocol) -> BOOL ---
|
|
protocol_isEqual :: proc(proto: ^Protocol, other: ^Protocol) -> BOOL ---
|
|
protocol_getName :: proc(proto: ^Protocol) -> cstring ---
|
|
|
|
method_getImplementation :: proc(m: Method) -> IMP ---
|
|
method_setImplementation :: proc(m: Method, imp: IMP) ---
|
|
method_copyArgumentType :: proc(m: Method, index: uint) -> cstring ---
|
|
method_getReturnType :: proc(m: Method, dst: cstring, dst_len: c.size_t) ---
|
|
method_getNumberOfArguments :: proc(m: Method) -> uint ---
|
|
method_getArgumentType :: proc(m: Method, index: uint, dst: cstring, dst_len: c.size_t) ---
|
|
|
|
object_getClass :: proc(obj: id) -> Class ---
|
|
object_setClass :: proc(obj: id, cls: Class) -> Class ---
|
|
object_copy :: proc(obj: id, size: c.size_t) -> id ---
|
|
object_dispose :: proc(obj: id) -> id ---
|
|
object_getClassName :: proc(obj: id) -> cstring ---
|
|
object_getIndexedIvars :: proc(obj: id) -> rawptr ---
|
|
object_getInstanceVariable :: proc(obj: id, name: cstring, outValue: rawptr) -> Ivar ---
|
|
object_setInstanceVariable :: proc(obj: id, name: cstring, value: rawptr) -> Ivar ---
|
|
object_getIvar :: proc(obj: id, ivar: Ivar) -> id ---
|
|
object_setIvar :: proc(obj: id, ivar: Ivar, value: id) ---
|
|
|
|
ivar_getName :: proc(v: Ivar) -> cstring ---
|
|
ivar_getTypeEncoding :: proc(v: Ivar) -> cstring ---
|
|
ivar_getOffset :: proc(v: Ivar) -> c.ptrdiff_t ---
|
|
}
|
|
|
|
|
|
@(objc_class="NSZone")
|
|
Zone :: struct {using _: Object}
|
|
|
|
@(link_prefix="NS")
|
|
foreign Foundation {
|
|
AllocateObject :: proc "c" (aClass: Class, extraBytes: UInteger, zone: ^Zone) -> id ---
|
|
DeallocateObject :: proc "c" (object: id) ---
|
|
}
|
|
|
|
Method :: ^objc_method
|
|
objc_method :: struct {
|
|
method_name: SEL,
|
|
method_types: cstring,
|
|
method_imp: IMP,
|
|
}
|
|
objc_method_list :: struct {}
|
|
|
|
objc_property :: struct{}
|
|
objc_property_t :: ^objc_property
|
|
|
|
objc_property_attribute_t :: struct {
|
|
name: cstring,
|
|
value: cstring,
|
|
}
|
|
|
|
objc_ivar :: struct {}
|
|
Ivar :: ^objc_ivar
|
|
|
|
objc_ivar_list :: struct {}
|
|
|
|
objc_cache :: struct {
|
|
mask: u32,
|
|
occupied: u32,
|
|
buckets: [1]Method,
|
|
}
|
|
|
|
objc_protocol_list :: struct {
|
|
next: ^objc_protocol_list,
|
|
count: c.int,
|
|
list: [1]^Protocol,
|
|
}
|
|
|
|
@(objc_class="Protocol")
|
|
Protocol :: struct{using _: intrinsics.objc_object}
|
|
|
|
objc_object_internals :: struct {
|
|
isa: ^objc_class_internals,
|
|
}
|
|
|
|
|
|
objc_class_internals :: struct {
|
|
isa: Class,
|
|
super_class: Class,
|
|
name: cstring,
|
|
version: c.long,
|
|
info: c.long,
|
|
instance_size: c.long,
|
|
ivars: ^objc_ivar_list,
|
|
|
|
methodLists: ^^objc_method_list,
|
|
|
|
cache: rawptr,
|
|
protocols: rawptr,
|
|
|
|
}
|
|
|
|
objc_AssociationPolicy :: enum c.uintptr_t {
|
|
Assign = 0,
|
|
Retain_Nonatomic = 1,
|
|
Copy_Nonatomic = 3,
|
|
Retain = 01401,
|
|
Copy = 01403,
|
|
}
|