Small cleanup. Use the ARC functions for retain / release / autorelease messages everywhere. This will make properties faster if we're using an ARC-compatible NSObject.

main
theraven 15 years ago
parent 61bc10ad4c
commit 663995f08c

@ -2,6 +2,7 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include "objc/runtime.h" #include "objc/runtime.h"
#include "objc/objc-arc.h"
#include "nsobject.h" #include "nsobject.h"
#include "spinlock.h" #include "spinlock.h"
#include "class.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 // Full barrier - ensure that we've zero'd the key before doing
// this! // this!
__sync_synchronize(); __sync_synchronize();
[(id)r->object release]; objc_release(r->object);
} }
r->object = 0; r->object = 0;
r->policy = 0; r->policy = 0;
@ -131,7 +132,7 @@ static void setReference(struct reference_list *list,
break; break;
case OBJC_ASSOCIATION_RETAIN_NONATOMIC: case OBJC_ASSOCIATION_RETAIN_NONATOMIC:
case OBJC_ASSOCIATION_RETAIN: case OBJC_ASSOCIATION_RETAIN:
obj = [(id)obj retain]; obj = objc_retain(obj);
case OBJC_ASSOCIATION_ASSIGN: case OBJC_ASSOCIATION_ASSIGN:
break; break;
} }
@ -169,7 +170,7 @@ static void setReference(struct reference_list *list,
r->object = obj; r->object = obj;
if (OBJC_ASSOCIATION_ASSIGN != r->policy) if (OBJC_ASSOCIATION_ASSIGN != r->policy)
{ {
[old release]; objc_release(old);
} }
if (needLock) if (needLock)
{ {

@ -25,6 +25,7 @@
*/ */
#import "objc/blocks_runtime.h" #import "objc/blocks_runtime.h"
#import "objc/runtime.h" #import "objc/runtime.h"
#import "objc/objc-arc.h"
#include "gc_ops.h" #include "gc_ops.h"
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
@ -34,12 +35,6 @@
#define fprintf(...) #define fprintf(...)
/* Makes the compiler happy even without Foundation */
@interface Dummy
- (id)retain;
- (void)release;
@end
static void *_HeapBlockByRef = (void*)1; static void *_HeapBlockByRef = (void*)1;
/** /**
@ -370,7 +365,7 @@ void _Block_object_assign(void *destAddr, const void *object, const int flags)
*dst = src; *dst = src;
if (!isGCEnabled) 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) if (!isGCEnabled)
{ {
fprintf(stderr, "Sending release message to %p\n", src); fprintf(stderr, "Sending release message to %p\n", src);
[src release]; objc_release(src);
} }
} }
} }

@ -1,4 +1,5 @@
#include "objc/runtime.h" #include "objc/runtime.h"
#include "objc/objc-arc.h"
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
@ -30,15 +31,16 @@ id objc_getProperty(id obj, SEL _cmd, ptrdiff_t offset, BOOL isAtomic)
volatile int *lock = lock_for_pointer(addr); volatile int *lock = lock_for_pointer(addr);
lock_spinlock(lock); lock_spinlock(lock);
ret = *(id*)addr; ret = *(id*)addr;
ret = [ret retain]; ret = objc_retain(ret);
unlock_spinlock(lock); unlock_spinlock(lock);
ret = objc_autoreleaseReturnValue(ret);
} }
else else
{ {
ret = *(id*)addr; 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) 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 else
{ {
arg = [arg retain]; arg = objc_retain(arg);
} }
id old; id old;
if (isAtomic) if (isAtomic)
@ -78,7 +80,7 @@ void objc_setProperty(id obj, SEL _cmd, ptrdiff_t offset, id arg, BOOL isAtomic,
old = *(id*)addr; old = *(id*)addr;
*(id*)addr = arg; *(id*)addr = arg;
} }
[old release]; objc_release(old);
} }
/** /**

Loading…
Cancel
Save