/* * Copyright (c) 2008 - 2009 * Jonathan Schleifer * * All rights reserved. * * This file is part of ObjFW. It may be distributed under the terms of the * Q Public License 1.0, which can be found in the file LICENSE included in * the packaging of this file. */ #include "config.h" #import #import "OFExceptions.h" id objc_getProperty(id self, SEL _cmd, ptrdiff_t offset, BOOL atomic) { if (atomic) { @synchronized (self) { id ptr = *(id*)((char*)self + offset); return [[ptr retain] autorelease]; } } return *(id*)((char*)self + offset); } void objc_setProperty(id self, SEL _cmd, ptrdiff_t offset, id value, BOOL atomic, BOOL copy) { if (atomic) { @synchronized ((atomic ? self : nil)) { id *ptr = (id*)((char*)self + offset); id old = *ptr; switch (copy) { case 0: *ptr = [value retain]; break; case 2: /* * Apple uses this to indicate that the copy * should be mutable. Please hit them for * abusing a poor BOOL! */ *ptr = [value mutableCopy]; break; default: *ptr = [value copy]; } [old release]; return; } } id *ptr = (id*)((char*)self + offset); id old = *ptr; switch (copy) { case 0: *ptr = [value retain]; break; case 2: /* * Apple uses this to indicate that the copy should be mutable. * Please hit them for abusing a poor BOOL! */ *ptr = [value mutableCopy]; break; default: *ptr = [value copy]; } [old release]; }