libs-base/Source/ObjectiveC2/properties.m

59 lines
918 B
Mathematica
Raw Normal View History

#include "runtime.h"
// Subset of NSObject interface needed for properties.
@interface NSObject {}
- (id)retain;
- (id)copy;
- (id)autorelease;
- (void)release;
@end
id
objc_getProperty(id obj, SEL _cmd, ptrdiff_t offset, BOOL isAtomic)
{
char *addr;
id ret;
if (isAtomic)
{
@synchronized(obj)
{
return objc_getProperty(obj, _cmd, offset, NO);
}
}
addr = (char*)obj;
addr += offset;
ret = *(id*)addr;
return [[ret retain] autorelease];
}
void
objc_setProperty(id obj, SEL _cmd, ptrdiff_t offset, id arg, BOOL isAtomic,
BOOL isCopy)
{
char *addr;
id old;
if (isAtomic)
{
@synchronized(obj)
{
objc_setProperty(obj, _cmd, offset, arg, NO, isCopy);
return;
}
}
if (isCopy)
{
arg = [arg copy];
}
else
{
arg = [arg retain];
}
addr = (char*)obj;
addr += offset;
old = *(id*)addr;
*(id*)addr = arg;
[old release];
}