12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- package objc_Foundation
- import "base:intrinsics"
- methodSignatureForSelector :: proc "c" (obj: ^Object, selector: SEL) -> rawptr {
- return msgSend(rawptr, obj, "methodSignatureForSelector:", selector)
- }
- respondsToSelector :: proc "c" (obj: ^Object, selector: SEL) -> BOOL {
- return msgSend(BOOL, obj, "respondsToSelector:", selector)
- }
- msgSendSafeCheck :: proc "c" (obj: ^Object, selector: SEL) -> BOOL {
- return respondsToSelector(obj, selector) || methodSignatureForSelector(obj, selector) != nil
- }
- @(objc_class="NSObject")
- Object :: struct {using _: intrinsics.objc_object}
- @(objc_class="NSObject")
- Copying :: struct($T: typeid) {using _: Object}
- alloc :: proc "c" ($T: typeid) -> ^T where intrinsics.type_is_subtype_of(T, Object) {
- return msgSend(^T, T, "alloc")
- }
- @(objc_type=Object, objc_name="init")
- init :: proc "c" (self: ^$T) -> ^T where intrinsics.type_is_subtype_of(T, Object) {
- return msgSend(^T, self, "init")
- }
- @(objc_type=Object, objc_name="copy")
- copy :: proc "c" (self: ^Copying($T)) -> ^T where intrinsics.type_is_subtype_of(T, Object) {
- return msgSend(^T, self, "copy")
- }
- new :: proc "c" ($T: typeid) -> ^T where intrinsics.type_is_subtype_of(T, Object) {
- return init(alloc(T))
- }
- @(objc_type=Object, objc_name="retain")
- retain :: proc "c" (self: ^Object) {
- _ = msgSend(^Object, self, "retain")
- }
- @(objc_type=Object, objc_name="release")
- release :: proc "c" (self: ^Object) {
- msgSend(nil, self, "release")
- }
- @(objc_type=Object, objc_name="autorelease")
- autorelease :: proc "c" (self: ^Object) {
- msgSend(nil, self, "autorelease")
- }
- @(objc_type=Object, objc_name="retainCount")
- retainCount :: proc "c" (self: ^Object) -> UInteger {
- return msgSend(UInteger, self, "retainCount")
- }
- @(objc_type=Object, objc_name="class")
- class :: proc "c" (self: ^Object) -> Class {
- return msgSend(Class, self, "class")
- }
- @(objc_type=Object, objc_name="hash")
- hash :: proc "c" (self: ^Object) -> UInteger {
- return msgSend(UInteger, self, "hash")
- }
- @(objc_type=Object, objc_name="isEqual")
- isEqual :: proc "c" (self, pObject: ^Object) -> BOOL {
- return msgSend(BOOL, self, "isEqual:", pObject)
- }
- @(objc_type=Object, objc_name="description")
- description :: proc "c" (self: ^Object) -> ^String {
- return msgSend(^String, self, "description")
- }
- @(objc_type=Object, objc_name="debugDescription")
- debugDescription :: proc "c" (self: ^Object) -> ^String {
- if msgSendSafeCheck(self, intrinsics.objc_find_selector("debugDescription")) {
- return msgSend(^String, self, "debugDescription")
- }
- return nil
- }
- bridgingCast :: proc "c" ($T: typeid, obj: ^Object) where intrinsics.type_is_pointer(T), intrinsics.type_is_subtype_of(T, ^Object) {
- return (T)(obj)
- }
- @(objc_class="NSCoder")
- Coder :: struct {using _: Object}
- // TODO(bill): Implement all the methods for this massive type
|