Overview
Comment: | More compatibility with other blocks runtimes. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
c0863afedfc4c42206688402a45f1a7d |
User & Date: | js on 2010-11-12 14:06:43 |
Other Links: | manifest | tags |
Context
2010-11-12
| ||
15:08 | Make blocks work with the old Apple ObjC runtime. check-in: 7a6f696ef3 user: js tags: trunk | |
14:06 | More compatibility with other blocks runtimes. check-in: c0863afedf user: js tags: trunk | |
13:37 | Improve autoreleasing blocks. check-in: 09d6e5b6da user: js tags: trunk | |
Changes
Modified src/OFBlock.h from [5c02ac3636] to [0076f81009].
︙ | ︙ | |||
38 39 40 41 42 43 44 45 46 47 48 49 50 51 | enum { OF_BLOCK_HAS_COPY_DISPOSE = (1 << 25), OF_BLOCK_HAS_CTOR = (1 << 26), OF_BLOCK_IS_GLOBAL = (1 << 28), OF_BLOCK_HAS_STRET = (1 << 29), OF_BLOCK_HAS_SIGNATURE = (1 << 30), }; enum { OF_BLOCK_FIELD_IS_OBJECT = 3, OF_BLOCK_FIELD_IS_BLOCK = 7, OF_BLOCK_FIELD_IS_BYREF = 8, OF_BLOCK_FIELD_IS_WEAK = 16, OF_BLOCK_BYREF_CALLER = 128, | > > > | 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | enum { OF_BLOCK_HAS_COPY_DISPOSE = (1 << 25), OF_BLOCK_HAS_CTOR = (1 << 26), OF_BLOCK_IS_GLOBAL = (1 << 28), OF_BLOCK_HAS_STRET = (1 << 29), OF_BLOCK_HAS_SIGNATURE = (1 << 30), }; #define OF_BLOCK_REFCOUNT_MASK \ ~(OF_BLOCK_HAS_COPY_DISPOSE | OF_BLOCK_HAS_CTOR | OF_BLOCK_IS_GLOBAL | \ OF_BLOCK_HAS_STRET | OF_BLOCK_HAS_SIGNATURE) enum { OF_BLOCK_FIELD_IS_OBJECT = 3, OF_BLOCK_FIELD_IS_BLOCK = 7, OF_BLOCK_FIELD_IS_BYREF = 8, OF_BLOCK_FIELD_IS_WEAK = 16, OF_BLOCK_BYREF_CALLER = 128, |
︙ | ︙ |
Modified src/OFBlock.m from [922e8efbd5] to [04ef10271b].
︙ | ︙ | |||
129 130 131 132 133 134 135 | alloc_failed_exception.isa = [OFAllocFailedException class]; @throw (OFAllocFailedException*)&alloc_failed_exception; } memcpy(copy, block, block->descriptor->size); copy->isa = (Class)&_NSConcreteMallocBlock; | | | | | 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 | alloc_failed_exception.isa = [OFAllocFailedException class]; @throw (OFAllocFailedException*)&alloc_failed_exception; } memcpy(copy, block, block->descriptor->size); copy->isa = (Class)&_NSConcreteMallocBlock; copy->flags++; if (block->flags & OF_BLOCK_HAS_COPY_DISPOSE) block->descriptor->copy_helper(copy, block); return copy; } if (block->isa == (Class)&_NSConcreteMallocBlock) of_atomic_inc_int(&block->flags); return block; } void _Block_release(const void *block_) { of_block_literal_t *block = (of_block_literal_t*)block_; if (block->isa != (Class)&_NSConcreteMallocBlock) return; if ((of_atomic_dec_int(&block->flags) & OF_BLOCK_REFCOUNT_MASK) == 0) { if (block->flags & OF_BLOCK_HAS_COPY_DISPOSE) block->descriptor->dispose_helper(block); free(block); } } |
︙ | ︙ | |||
304 305 306 307 308 309 310 | return self; } - (size_t)retainCount { if (isa == (Class)&_NSConcreteMallocBlock) | | > | 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 | return self; } - (size_t)retainCount { if (isa == (Class)&_NSConcreteMallocBlock) return ((of_block_literal_t*)self)->flags & OF_BLOCK_REFCOUNT_MASK; return SIZE_MAX; } - (void)release { Block_release(self); |
︙ | ︙ |