1#include "Test.h" 2#include <stdio.h> 3 4// Regression test for a bug where allocating a class as a subclass of an 5// unresolved class failed. 6 7static int loaded; 8 9static void load(Class self, SEL _cmd) 10{ 11 loaded++; 12} 13 14int main() 15{ 16 Class a, b, c, d, e; 17 18 assert(class_getInstanceSize(objc_allocateClassPair(Nil, "Empty", 0)) == sizeof(Class)); 19 a = objc_allocateClassPair([Test class], "A", 0); 20 objc_registerClassPair(a); 21 22 b = objc_allocateClassPair(a, "B", 0); 23 class_addMethod(object_getClass(b), @selector(load), (IMP)load, "@:"); 24 25 class_addIvar(b, "anIvar", 4, 2, "i"); 26 objc_registerClassPair(b); 27 28 Ivar iv = class_getInstanceVariable(b, "anIvar"); 29 size_t superSize = class_getInstanceSize([Test class]); 30 assert(ivar_getOffset(iv) == superSize); 31 32 class_getSuperclass(b); 33 34 35 c = objc_allocateClassPair(b, "C", 0); 36 objc_registerClassPair(c); 37 d = objc_allocateClassPair(c, "D", 0); 38 objc_registerClassPair(d); 39 e = objc_allocateClassPair(d, "E", 0); 40 objc_registerClassPair(e); 41 assert(loaded == 0); 42 assert(objc_getClass("C") == c); 43 assert(objc_getClass("D") == d); 44 assert(objc_getClass("E") == e); 45 objc_disposeClassPair(e); 46 assert(objc_getClass("E") == nil); 47 48 return 0; 49} 50 51 52