860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
|
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
|
-
+
|
{
while (cls->subclass_list != NULL && cls->subclass_list[0] != Nil)
objc_unregister_class(cls->subclass_list[0]);
if (cls->info & OBJC_CLASS_INFO_LOADED)
call_method(cls, "unload");
objc_hashtable_set(classes, cls->name, NULL);
objc_hashtable_delete(classes, cls->name);
if (strcmp(class_getName(cls), "Protocol"))
classes_cnt--;
unregister_class(cls);
unregister_class(cls->isa);
}
|
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
|
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
|
-
+
+
+
+
+
|
{
uint_fast32_t i;
if (classes == NULL)
return;
for (i = 0; i < classes->size; i++) {
if (classes->data[i] != NULL) {
if (classes->data[i] != NULL &&
classes->data[i] != &objc_deleted_bucket) {
void *cls = (Class)classes->data[i]->obj;
if (cls == Nil || (uintptr_t)cls & 1)
continue;
objc_unregister_class(cls);
/* The table might have been resized, so start again */
i = 0;
}
}
assert(classes_cnt == 0);
if (empty_dtable != NULL) {
objc_sparsearray_free(empty_dtable);
|