You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
1.6 KiB
Objective-C
69 lines
1.6 KiB
Objective-C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include "Test.h"
|
|
|
|
|
|
typedef uintptr_t NSUInteger;
|
|
|
|
@interface NSArray : Test
|
|
{
|
|
NSUInteger count;
|
|
id objects[0];
|
|
}
|
|
@end
|
|
|
|
@implementation NSArray @end
|
|
|
|
@interface BitfieldTest : Test
|
|
{
|
|
BOOL flag1:1;
|
|
BOOL flag2:1;
|
|
BOOL flag3:1;
|
|
}
|
|
@end
|
|
|
|
@implementation BitfieldTest @end
|
|
|
|
@interface BitfieldTest2 : Test
|
|
{
|
|
BOOL flag1:1;
|
|
BOOL flag2:1;
|
|
BOOL flag3:1;
|
|
int x;
|
|
}
|
|
@end
|
|
|
|
@implementation BitfieldTest2 @end
|
|
|
|
|
|
int main()
|
|
{
|
|
Class nsarray = objc_getClass("NSArray");
|
|
assert(nsarray);
|
|
assert(class_getInstanceSize(nsarray) == (sizeof(Class) + sizeof(NSUInteger)));
|
|
Ivar count = class_getInstanceVariable(nsarray, "count");
|
|
assert(ivar_getOffset(count) == sizeof(id));
|
|
|
|
Class bitfield = objc_getClass("BitfieldTest");
|
|
assert(bitfield);
|
|
Ivar flag1 = class_getInstanceVariable(bitfield, "flag1");
|
|
assert(flag1);
|
|
assert(ivar_getOffset(flag1) == sizeof(id));
|
|
Ivar flag2 = class_getInstanceVariable(bitfield, "flag2");
|
|
assert(flag2);
|
|
assert(ivar_getOffset(flag2) == sizeof(id));
|
|
Ivar flag3 = class_getInstanceVariable(bitfield, "flag3");
|
|
assert(flag3);
|
|
assert(ivar_getOffset(flag3) == sizeof(id));
|
|
assert(ivar_getOffset(flag3) + sizeof(BOOL) <= class_getInstanceSize(bitfield));
|
|
|
|
bitfield = objc_getClass("BitfieldTest2");
|
|
flag1 = class_getInstanceVariable(bitfield, "flag1");
|
|
flag3 = class_getInstanceVariable(bitfield, "flag3");
|
|
Ivar x = class_getInstanceVariable(bitfield, "x");
|
|
assert(ivar_getOffset(flag1) == ivar_getOffset(flag3));
|
|
assert(ivar_getOffset(x) > ivar_getOffset(flag3));
|
|
assert(ivar_getOffset(x) + sizeof(int) <= class_getInstanceSize(bitfield));
|
|
}
|
|
|