objc.odin 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package objc_Foundation
  2. foreign import "system:Foundation.framework"
  3. import "core:intrinsics"
  4. import "core:c"
  5. IMP :: proc "c" (object: id, sel: SEL, #c_vararg args: ..any) -> id
  6. foreign Foundation {
  7. objc_lookUpClass :: proc "c" (name: cstring) -> Class ---
  8. sel_registerName :: proc "c" (name: cstring) -> SEL ---
  9. objc_allocateClassPair :: proc "c" (superclass : Class, name : cstring, extraBytes : c.size_t) -> Class ---
  10. objc_registerClassPair :: proc "c" (cls : Class) ---
  11. class_addMethod :: proc "c" (cls: Class, name: SEL, imp: IMP, types: cstring) -> BOOL ---
  12. class_getInstanceMethod :: proc "c" (cls: Class, name: SEL) -> Method ---
  13. class_createInstance :: proc "c" (cls: Class, extraBytes: c.size_t) -> id ---
  14. method_setImplementation :: proc "c" (method: Method, imp: IMP) ---
  15. object_getIndexedIvars :: proc(obj: id) -> rawptr ---
  16. }
  17. @(objc_class="NSZone")
  18. Zone :: struct {using _: Object}
  19. @(link_prefix="NS")
  20. foreign Foundation {
  21. AllocateObject :: proc "c" (aClass: Class, extraBytes: UInteger, zone: ^Zone) -> id ---
  22. DeallocateObject :: proc "c" (object: id) ---
  23. }
  24. Method :: ^objc_method
  25. objc_method :: struct {
  26. method_name: SEL,
  27. method_types: cstring,
  28. method_imp: IMP,
  29. }
  30. objc_method_list :: struct {}
  31. objc_ivar :: struct {}
  32. objc_ivar_list :: struct {}
  33. objc_cache :: struct {
  34. mask: u32,
  35. occupied: u32,
  36. buckets: [1]Method,
  37. }
  38. objc_protocol_list :: struct {
  39. next: ^objc_protocol_list,
  40. count: c.int,
  41. list: [1]^Protocol,
  42. }
  43. @(objc_class="Protocol")
  44. Protocol :: struct{using _: intrinsics.objc_object}
  45. objc_object_internals :: struct {
  46. isa: ^objc_class_internals,
  47. }
  48. objc_class_internals :: struct {
  49. isa: Class,
  50. super_class: Class,
  51. name: cstring,
  52. version: c.long,
  53. info: c.long,
  54. instance_size: c.long,
  55. ivars: ^objc_ivar_list,
  56. methodLists: ^^objc_method_list,
  57. cache: rawptr,
  58. protocols: rawptr,
  59. }