3 #include <objc/runtime.h>
6 @interface Super { id isa; } @end
9 +class { return self; }
10 +new { return class_createInstance(self, 0); }
11 -(void)dealloc { object_dispose(self); }
14 @interface Sub1 : Super {
20 @implementation Sub1 @end
22 @interface Sub2 : Sub1 {
23 // id isa // 0..4 0..8
24 // BOOL b // 4..5 8..9
25 BOOL b2; // 5..6 9..10
29 @implementation Sub2 @end
31 @interface Sub3 : Sub1 {
32 // id isa; // 0..4 0..8
33 // BOOL b; // 4..5 8..9
35 BOOL b2; // 12..13 24..25
38 @implementation Sub3 @end
42 testassert(sizeof(id) == class_getInstanceSize([Super class]));
43 testassert(2*sizeof(id) == class_getInstanceSize([Sub1 class]));
44 testassert(3*sizeof(id) == class_getInstanceSize([Sub2 class]));
45 testassert(4*sizeof(id) == class_getInstanceSize([Sub3 class]));
50 testassert(object_getIndexedIvars(o) == (char *)o + class_getInstanceSize(o->isa));
53 testassert(object_getIndexedIvars(o) == (char *)o + class_getInstanceSize(o->isa));
56 testassert(object_getIndexedIvars(o) == (char *)o + class_getInstanceSize(o->isa));
59 testassert(object_getIndexedIvars(o) == (char *)o + class_getInstanceSize(o->isa));