3 $C{COMPILE} $DIR/future0.m -o future0.dylib -dynamiclib
4 $C{COMPILE} $DIR/future2.m -x none future0.dylib -o future2.dylib -dynamiclib
5 $C{COMPILE} $DIR/future.m -x none future0.dylib -o future.exe
11 #if __has_feature(objc_arc)
15 testwarn("rdar://10041403 future class API is not ARC-compatible");
22 #include <objc/runtime.h>
23 #include <malloc/malloc.h>
37 @implementation SubSub2
39 return 1 + [super method];
49 // objc_getFutureClass with existing class
50 oldTestRoot = objc_getFutureClass("TestRoot");
51 testassert(oldTestRoot == [TestRoot class]);
52 testassert(! _class_isFutureClass(oldTestRoot));
54 // objc_getFutureClass with missing class
55 oldSub1 = objc_getFutureClass("Sub1");
57 testassert(malloc_size((__bridge void*)oldSub1) > 0);
58 testassert(objc_getClass("Sub1") == Nil);
59 testassert(_class_isFutureClass(oldSub1));
60 testassert(0 == strcmp(class_getName(oldSub1), "Sub1"));
61 testassert(object_getClass(oldSub1) == Nil); // CF expects this
63 // objc_getFutureClass a second time
64 testassert(oldSub1 == objc_getFutureClass("Sub1"));
67 dlopen("future2.dylib", 0);
69 // Verify use of future class
70 newSub1 = objc_getClass("Sub1");
71 testassert(oldSub1 == newSub1);
72 testassert(newSub1 == [newSub1 classref]);
73 testassert(newSub1 == class_getSuperclass(objc_getClass("SubSub1")));
74 testassert(! _class_isFutureClass(newSub1));
76 testassert(1 == [oldSub1 method]);
77 testassert(1 == [newSub1 method]);