Browse Source

Add missing calls for `Object`; Add `scoped_autoreleasepool`

gingerBill 3 years ago
parent
commit
b6abaf739c

+ 5 - 0
core/sys/darwin/Foundation/NSAutoreleasePool.odin

@@ -13,3 +13,8 @@ AutoreleasePool_showPools :: proc(self: ^AutoreleasePool, obj: ^Object) {
 	msgSend(nil, self, "showPools")
 }
 
+
+@(deferred_out=AutoreleasePool_drain)
+scoped_autoreleasepool :: proc() -> ^AutoreleasePool {
+	return init(alloc(AutoreleasePool))
+}

+ 9 - 0
core/sys/darwin/Foundation/NSObject.odin

@@ -33,14 +33,19 @@ retain :: proc(self: ^$T) -> ^T where intrinsics.type_is_subtype_of(T, Object) {
 release :: proc(self: ^$T) where intrinsics.type_is_subtype_of(T, Object) {
 	msgSend(nil, self, "release")
 }
+autorelease :: proc(self: ^$T) where intrinsics.type_is_subtype_of(T, Object) {
+	msgSend(nil, self, "autorelease")
+}
 retainCount :: proc(self: ^$T) -> UInteger where intrinsics.type_is_subtype_of(T, Object) {
 	return msgSend(UInteger, self, "retainCount")
 }
 
+
 copy :: proc(self: ^Copying($T)) -> ^T where intrinsics.type_is_subtype_of(T, Object) {
 	return msgSend(^T, self, "copy")
 }
 
+
 hash :: proc(self: ^Object) -> UInteger {
 	return msgSend(UInteger, self, "hash")
 }
@@ -60,6 +65,10 @@ debugDescription :: proc(self: ^Object) -> ^String {
 	return nil
 }
 
+bridgingCast :: proc($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}