diff --git a/associate.m b/associate.m index 32c4150..553b04a 100644 --- a/associate.m +++ b/associate.m @@ -2,6 +2,7 @@ #include #include #include "objc/runtime.h" +#include "objc/objc-arc.h" #include "nsobject.h" #include "spinlock.h" #include "class.h" @@ -101,7 +102,7 @@ static void cleanupReferenceList(struct reference_list *list) // Full barrier - ensure that we've zero'd the key before doing // this! __sync_synchronize(); - [(id)r->object release]; + objc_release(r->object); } r->object = 0; r->policy = 0; @@ -131,7 +132,7 @@ static void setReference(struct reference_list *list, break; case OBJC_ASSOCIATION_RETAIN_NONATOMIC: case OBJC_ASSOCIATION_RETAIN: - obj = [(id)obj retain]; + obj = objc_retain(obj); case OBJC_ASSOCIATION_ASSIGN: break; } @@ -169,7 +170,7 @@ static void setReference(struct reference_list *list, r->object = obj; if (OBJC_ASSOCIATION_ASSIGN != r->policy) { - [old release]; + objc_release(old); } if (needLock) { diff --git a/blocks_runtime.m b/blocks_runtime.m index 1a45cd7..128ae06 100644 --- a/blocks_runtime.m +++ b/blocks_runtime.m @@ -25,6 +25,7 @@ */ #import "objc/blocks_runtime.h" #import "objc/runtime.h" +#import "objc/objc-arc.h" #include "gc_ops.h" #include #include @@ -34,12 +35,6 @@ #define fprintf(...) -/* Makes the compiler happy even without Foundation */ -@interface Dummy -- (id)retain; -- (void)release; -@end - static void *_HeapBlockByRef = (void*)1; /** @@ -370,7 +365,7 @@ void _Block_object_assign(void *destAddr, const void *object, const int flags) *dst = src; if (!isGCEnabled) { - *dst = [src retain]; + *dst = objc_retain(src); } } } @@ -449,7 +444,7 @@ void _Block_object_dispose(const void *object, const int flags) if (!isGCEnabled) { fprintf(stderr, "Sending release message to %p\n", src); - [src release]; + objc_release(src); } } } diff --git a/properties.m b/properties.m index e205877..370f053 100644 --- a/properties.m +++ b/properties.m @@ -1,4 +1,5 @@ #include "objc/runtime.h" +#include "objc/objc-arc.h" #include #include #include @@ -30,15 +31,16 @@ id objc_getProperty(id obj, SEL _cmd, ptrdiff_t offset, BOOL isAtomic) volatile int *lock = lock_for_pointer(addr); lock_spinlock(lock); ret = *(id*)addr; - ret = [ret retain]; + ret = objc_retain(ret); unlock_spinlock(lock); + ret = objc_autoreleaseReturnValue(ret); } else { ret = *(id*)addr; - ret = [ret retain]; + ret = objc_retainAutoreleaseReturnValue(ret); } - return [ret autorelease]; + return ret; } void objc_setProperty(id obj, SEL _cmd, ptrdiff_t offset, id arg, BOOL isAtomic, BOOL isCopy) @@ -62,7 +64,7 @@ void objc_setProperty(id obj, SEL _cmd, ptrdiff_t offset, id arg, BOOL isAtomic, } else { - arg = [arg retain]; + arg = objc_retain(arg); } id old; if (isAtomic) @@ -78,7 +80,7 @@ void objc_setProperty(id obj, SEL _cmd, ptrdiff_t offset, id arg, BOOL isAtomic, old = *(id*)addr; *(id*)addr = arg; } - [old release]; + objc_release(old); } /**