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 <stdlib.h>
#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)
{

@ -25,6 +25,7 @@
*/
#import "objc/blocks_runtime.h"
#import "objc/runtime.h"
#import "objc/objc-arc.h"
#include "gc_ops.h"
#include <stdio.h>
#include <stdlib.h>
@ -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);
}
}
}

@ -1,4 +1,5 @@
#include "objc/runtime.h"
#include "objc/objc-arc.h"
#include <stdio.h>
#include <stdlib.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);
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);
}
/**

Loading…
Cancel
Save