1 /* This structure used to be public, but is now private to the runtime. */
2 #define __objc_STRUCT_OBJC_CLASS_defined
5 ** The compiler generates one of these structures for each class.
7 ** This structure is the definition for classes.
9 ** This structure is generated by the compiler in the executable and used by
10 ** the run-time during normal messaging operations. Therefore some members
11 ** change type. The compiler generates "char* const" and places a string in
12 ** the following member variables: super_class.
15 MetaClass class_pointer
; /* Pointer to the class's
17 struct objc_class
* super_class
; /* Pointer to the super
20 const char* name
; /* Name of the class. */
21 long version
; /* Unknown. */
22 unsigned long info
; /* Bit mask. See class masks
24 long instance_size
; /* Size in bytes of the class.
26 definition and all super
29 /* We pad the structure manually to prevent warning when -Wpadded
30 is used. The compiler automatically pads the structures that it
31 generates, so this manually padded structure still matches the one
32 generated by the compiler, but if we don't pad manually, -Wpadded
33 detects that padding is being added and generates annoying warnings.
34 This hack is necessary as on LLP64 targets sizeof (long) isn't equal
35 to sizeof (void *). */
38 struct objc_ivar_list
* ivars
; /* Pointer to a structure that
39 describes the instance
40 variables in the class
41 definition. NULL indicates
42 no instance variables. Does
43 not include super class
45 struct objc_method_list
* methods
; /* Linked list of instance
46 methods defined for the
48 struct sarray
* dtable
; /* Pointer to instance
49 method dispatch table. */
50 struct objc_class
* subclass_list
; /* Subclasses */
51 struct objc_class
* sibling_class
;
53 struct objc_protocol_list
*protocols
; /* Protocols conformed to */