Overview
Comment: | Fix a bug with recent Clang revisions and Blocks. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
eb3e09c15393b0023aa648fcedd07386 |
User & Date: | js on 2010-11-01 03:46:05 |
Other Links: | manifest | tags |
Context
2010-11-01
| ||
13:37 | Update PLATFORMS. check-in: c1d2ff2b95 user: js tags: trunk | |
03:46 | Fix a bug with recent Clang revisions and Blocks. check-in: eb3e09c153 user: js tags: trunk | |
2010-10-31
| ||
22:18 | Check if 64 bit version of OSAtomic* functions is available. check-in: 9626d917a6 user: js tags: trunk | |
Changes
Modified src/OFBlock.m from [d2c4fcd6af] to [0cda48050d].
︙ | ︙ | |||
154 155 156 157 158 159 160 | block->descriptor->dispose_helper(block); free(block); } } void | | | | | | | 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 | block->descriptor->dispose_helper(block); free(block); } } void _Block_object_assign(void *dst_, const void *src_, const int flags_) { int flags = flags_ & (OF_BLOCK_FIELD_IS_BLOCK | OF_BLOCK_FIELD_IS_OBJECT | OF_BLOCK_FIELD_IS_BYREF); switch (flags) { case OF_BLOCK_FIELD_IS_BLOCK: *(of_block_literal_t**)dst_ = _Block_copy(src_); break; case OF_BLOCK_FIELD_IS_OBJECT: *(id*)dst_ = [(id)src_ retain]; break; case OF_BLOCK_FIELD_IS_BYREF:; of_block_byref_t *src = (of_block_byref_t*)src_; of_block_byref_t **dst = (of_block_byref_t**)dst_; if ((src->flags & ~OF_BLOCK_HAS_COPY_DISPOSE) == 0) { if ((*dst = malloc(src->size)) == NULL) { fputs("Not enough memory for block " "variables!\n", stderr); exit(1); } |
︙ | ︙ | |||
193 194 195 196 197 198 199 | (*dst)->flags++; break; } } void | | | | | | 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 | (*dst)->flags++; break; } } void _Block_object_dispose(const void *obj_, const int flags_) { const int flags = flags_ & (OF_BLOCK_FIELD_IS_BLOCK | OF_BLOCK_FIELD_IS_OBJECT | OF_BLOCK_FIELD_IS_BYREF); switch (flags) { case OF_BLOCK_FIELD_IS_BLOCK: _Block_release(obj_); break; case OF_BLOCK_FIELD_IS_OBJECT: [(id)obj_ release]; break; case OF_BLOCK_FIELD_IS_BYREF:; of_block_byref_t *obj = (of_block_byref_t*)obj_; if ((--obj->flags & ~OF_BLOCK_HAS_COPY_DISPOSE) == 0) { if (obj->size >= sizeof(of_block_byref_t)) obj->byref_dispose(obj); free(obj); } |
︙ | ︙ |