Differences From Artifact [9014452587]:
- File src/runtime/class.m — part of check-in [7baf58021d] at 2013-03-09 09:24:45 on branch trunk — Fix objc_exit() and add it to tests. (user: js, size: 12530) [annotate] [blame] [check-ins using]
To Artifact [5994e9e90d]:
- File
src/runtime/class.m
— part of check-in
[69d9f76520]
at
2013-03-14 20:20:05
on branch trunk
— Tag class pointers for @compatibility_aliases.
This makes it possible to find aliases in the classes hashtable and not
call objc_free_class() on them. (user: js, size: 12594) [annotate] [blame] [check-ins using]
︙ | ︙ | |||
47 48 49 50 51 52 53 | BOOL class_registerAlias_np(Class cls, const char *name) { if (classes == NULL) return NO; | | | 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | BOOL class_registerAlias_np(Class cls, const char *name) { if (classes == NULL) return NO; objc_hashtable_set(classes, name, (Class)((uintptr_t)cls | 1)); return YES; } static void register_selectors(struct objc_abi_class *cls) { |
︙ | ︙ | |||
73 74 75 76 77 78 79 | { Class c; if (classes == NULL) return Nil; objc_global_mutex_lock(); | | | 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | { Class c; if (classes == NULL) return Nil; objc_global_mutex_lock(); c = (Class)((uintptr_t)objc_hashtable_get(classes, name) & ~1); objc_global_mutex_unlock(); return c; } static void call_method(Class cls, const char *method) |
︙ | ︙ | |||
612 613 614 615 616 617 618 | if (classes == NULL) return; for (i = 0; i <= classes->last_idx; i++) { if (classes->data[i] != NULL) { Class cls = classes->data[i]->obj; | | | 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 | if (classes == NULL) return; for (i = 0; i <= classes->last_idx; i++) { if (classes->data[i] != NULL) { Class cls = classes->data[i]->obj; if (cls == Nil || (uintptr_t)cls & 1) continue; objc_free_class(cls); objc_free_class(cls->isa); } } |
︙ | ︙ |