More fixes for bugs found by Mizuki.

main
theraven 16 years ago
parent 2a5ba9f18a
commit da9aafd3ed

@ -551,15 +551,11 @@ static inline Class
class_get_super_class(Class _class)
{
void __objc_resolve_class_links(void);
if CLS_ISCLASS(_class)
if (!CLS_ISRESOLV(_class))
{
if (!CLS_ISRESOLV(_class))
{
__objc_resolve_class_links();
}
return _class->super_class;
__objc_resolve_class_links();
}
return Nil;
return _class->super_class;
}
static inline int

@ -394,7 +394,6 @@ const char * class_getName(Class cls)
return class_get_class_name(cls);
}
void __objc_resolve_class_links(void);
Class class_getSuperclass(Class cls)
{
return class_get_super_class(cls);
@ -742,10 +741,11 @@ Class objc_allocateClassPair(Class superclass, const char *name, size_t extraByt
Class metaClass = calloc(1, sizeof(struct objc_class));
// Initialize the metaclass
metaClass->class_pointer = superclass->class_pointer;
metaClass->super_class = superclass->class_pointer->super_class;
metaClass->class_pointer = superclass->class_pointer->class_pointer;
metaClass->super_class = superclass->class_pointer;
metaClass->info = _CLS_META | _CLS_RUNTIME | _CLS_NEW_ABI;
metaClass->dtable = __objc_uninstalled_dtable;
metaClass->instance_size = sizeof(struct objc_class);
// Set up the new class
newClass->class_pointer = metaClass;
@ -753,6 +753,7 @@ Class objc_allocateClassPair(Class superclass, const char *name, size_t extraByt
newClass->name = strdup(name);
newClass->info = _CLS_CLASS | _CLS_RUNTIME | _CLS_NEW_ABI;
newClass->dtable = __objc_uninstalled_dtable;
newClass->instance_size = superclass->instance_size;
return newClass;
}
@ -792,6 +793,7 @@ const char *object_getClassName(id obj)
}
void __objc_add_class_to_hash(Class cls);
void __objc_resolve_class_links(void);
void objc_registerClassPair(Class cls)
{
@ -799,16 +801,9 @@ void objc_registerClassPair(Class cls)
// Initialize the dispatch table for the class and metaclass.
__objc_update_dispatch_table_for_class(metaClass);
__objc_update_dispatch_table_for_class(cls);
CLS_SETINITIALIZED(metaClass);
CLS_SETINITIALIZED(cls);
// Add pointer from super class
objc_mutex_lock(__objc_runtime_mutex);
cls->sibling_class = cls->super_class->subclass_list;
cls->super_class->subclass_list = cls;
metaClass->sibling_class = metaClass->super_class->subclass_list;
metaClass->super_class->subclass_list = metaClass;
objc_mutex_unlock(__objc_runtime_mutex);
__objc_add_class_to_hash(cls);
// Add pointer from super class
__objc_resolve_class_links();
}
static id objectNew(id cls)

Loading…
Cancel
Save