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]; |
︙ | ︙ |