Overview
| Comment: | objc_setProperty(): Use a signed char for copy.
No more abusing a poor BOOL... |
|---|---|
| Downloads: | Tarball | ZIP archive | SQL archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA3-256: |
d989794cc2e97ffe1ad5ec8b5c0f26e6 |
| User & Date: | js on 2012-03-21 17:33:21 |
| Other Links: | manifest | tags |
Context
|
2012-03-21
| ||
| 17:51 | Always pass a char for copy to objc_setProperty(). (check-in: 3a983475bc user: js tags: trunk) | |
| 17:33 | objc_setProperty(): Use a signed char for copy. (check-in: d989794cc2 user: js tags: trunk) | |
| 15:39 | OFThreadPool: Terminate threads on deallocation. (check-in: 4ac1256458 user: js tags: trunk) | |
Changes
Modified src/macros.h from [a584e5dfec] to [ef3c33f2fd].
| ︙ | ︙ | |||
96 97 98 99 100 101 102 | #ifndef _WIN32 # define OF_PATH_DELIMITER '/' #else # define OF_PATH_DELIMITER '\\' #endif extern id objc_getProperty(id, SEL, ptrdiff_t, BOOL); | | | 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | #ifndef _WIN32 # define OF_PATH_DELIMITER '/' #else # define OF_PATH_DELIMITER '\\' #endif extern id objc_getProperty(id, SEL, ptrdiff_t, BOOL); extern void objc_setProperty(id, SEL, ptrdiff_t, id, BOOL, signed char); #define OF_IVAR_OFFSET(ivar) ((intptr_t)&ivar - (intptr_t)self) #define OF_GETTER(ivar, atomic) \ return objc_getProperty(self, _cmd, OF_IVAR_OFFSET(ivar), atomic); #define OF_SETTER(ivar, value, atomic, copy) \ objc_setProperty(self, _cmd, OF_IVAR_OFFSET(ivar), value, atomic, copy); |
| ︙ | ︙ |
Modified src/objc_properties.m from [183eed378a] to [d2cf97ab35].
| ︙ | ︙ | |||
62 63 64 65 66 67 68 | } return *(id*)(void*)((char*)self + offset); } void objc_setProperty(id self, SEL _cmd, ptrdiff_t offset, id value, BOOL atomic, | | < < < < < | 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
}
return *(id*)(void*)((char*)self + offset);
}
void
objc_setProperty(id self, SEL _cmd, ptrdiff_t offset, id value, BOOL atomic,
signed char copy)
{
if (atomic) {
id *ptr = (id*)(void*)((char*)self + offset);
#ifdef OF_THREADS
unsigned hash = SPINLOCK_HASH(ptr);
assert(of_spinlock_lock(&spinlocks[hash]));
@try {
#endif
id old = *ptr;
switch (copy) {
case 0:
*ptr = [value retain];
break;
case 2:
*ptr = [value mutableCopy];
break;
default:
*ptr = [value copy];
}
[old release];
|
| ︙ | ︙ |