Overview
Comment: | runtime: Add support for non-fragile ivars. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
3780f1462e0c05396d655d3e9a47a3e7 |
User & Date: | js on 2013-11-22 23:24:03 |
Other Links: | manifest | tags |
Context
2013-11-22
| ||
23:27 | make tarball: Make doxygen less verbose. check-in: 430a2dac04 user: js tags: trunk | |
23:24 | runtime: Add support for non-fragile ivars. check-in: 3780f1462e user: js tags: trunk | |
23:23 | exception.m: Handle class name @id. check-in: 9b9b00c5d9 user: js tags: trunk | |
Changes
Modified src/OFObject.m from [5387ac3c3a] to [8e2d9bc735].
︙ | |||
215 216 217 218 219 220 221 | 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 | - + | void **extra) { OFObject *instance; size_t instanceSize; instanceSize = class_getInstanceSize(class); |
︙ |
Modified src/runtime/class.m from [179d6825a3] to [0500525bf9].
︙ | |||
196 197 198 199 200 201 202 203 204 205 206 207 208 209 | 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 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + | OBJC_ERROR("Not enough memory for subclass list of class %s\n", cls->superclass->name); cls->superclass->subclass_list[i] = cls; cls->superclass->subclass_list[i + 1] = Nil; } static void update_ivar_offsets(Class cls) { unsigned i; if (!(cls->info & OBJC_CLASS_INFO_NEW_ABI)) return; if (cls->instance_size > 0) return; cls->instance_size = -cls->instance_size; if (cls->superclass != Nil) { cls->instance_size += cls->superclass->instance_size; if (cls->ivars != NULL) { for (i = 0; i < cls->ivars->count; i++) { cls->ivars->ivars[i].offset += cls->superclass->instance_size; *cls->ivar_offsets[i] = cls->ivars->ivars[i].offset; } } } else for (i = 0; i < cls->ivars->count; i++) *cls->ivar_offsets[i] = cls->ivars->ivars[i].offset; } static void setup_class(Class cls) { const char *superclass; if (cls->info & OBJC_CLASS_INFO_SETUP) return; |
︙ | |||
222 223 224 225 226 227 228 229 230 231 232 233 234 235 | 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 | + + | cls->superclass = super; cls->isa->superclass = super->isa; add_subclass(cls); add_subclass(cls->isa); } else cls->isa->superclass = cls; update_ivar_offsets(cls); cls->info |= OBJC_CLASS_INFO_SETUP; cls->isa->info |= OBJC_CLASS_INFO_SETUP; } static void initialize_class(Class cls) |
︙ |
Modified src/runtime/runtime-private.h from [a0b575feaf] to [ceb0d6303e].
︙ | |||
18 19 20 21 22 23 24 | 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | - + - + | struct objc_abi_class { struct objc_abi_class *metaclass; const char *superclass; const char *name; unsigned long version; unsigned long info; |
︙ |
Modified src/runtime/runtime.h from [8b0a6c7397] to [ced3444651].
︙ | |||
37 38 39 40 41 42 43 | 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | - + - + | struct objc_class { Class isa; Class superclass; const char *name; unsigned long version; unsigned long info; |
︙ |