X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Fclass-internals.h;h=40a8780dbbdd228d24efcaba92c53aa823c47779;hb=94b8270e9bdbd9280de1ec144af20877d8c8d055;hp=77b78dad4ef8e6e8f2702ed8ec985142e9e7459e;hpb=7ab70ce86d37266a4e8fcafa729f9606a5f5ed92;p=mono.git diff --git a/mono/metadata/class-internals.h b/mono/metadata/class-internals.h index 77b78dad4ef..40a8780dbbd 100644 --- a/mono/metadata/class-internals.h +++ b/mono/metadata/class-internals.h @@ -9,6 +9,7 @@ #include #include #include +#include #include #include "mono/utils/mono-compiler.h" #include "mono/utils/mono-error.h" @@ -164,6 +165,8 @@ typedef struct { } MonoMarshalField; typedef struct { + MonoPropertyBagItem head; + guint32 native_size, min_align; guint32 num_fields; MonoMethod *ptr_to_str; @@ -232,6 +235,8 @@ typedef struct { * be used for fields which are only used in like 5% of all classes. */ typedef struct { + MonoPropertyBagItem head; + struct { #if MONO_SMALL_CONFIG guint16 first, count; @@ -342,8 +347,8 @@ struct _MonoClass { int vtable_size; /* number of slots */ guint16 interface_count; - guint16 interface_id; /* unique inderface id (for interfaces) */ - guint16 max_interface_id; + guint32 interface_id; /* unique inderface id (for interfaces) */ + guint32 max_interface_id; guint16 interface_offsets_count; MonoClass **interfaces_packed; @@ -362,23 +367,6 @@ struct _MonoClass { int generic_param_token; /* for generic param types, both var and mvar */ } sizes; - /* - * From the TypeDef table - */ - struct { -#if MONO_SMALL_CONFIG - guint16 first, count; -#else - guint32 first, count; -#endif - } field, method; - - /* A GC handle pointing to the corresponding type builder/generic param builder */ - guint32 ref_info_handle; - - /* loaded on demand */ - MonoMarshalType *marshal_info; - /* * Field information: Type and location from object base */ @@ -397,13 +385,19 @@ struct _MonoClass { /* Generic vtable. Initialized by a call to mono_class_setup_vtable () */ MonoMethod **vtable; - /* Rarely used fields of classes */ - MonoClassExt *ext; + /* Infrequently used items. See class-accessors.c: InfrequentDataKind for what goes into here. */ + MonoPropertyBag infrequent_data; }; typedef struct { MonoClass class; guint32 flags; + /* + * From the TypeDef table + */ + guint32 first_method_idx; + guint32 first_field_idx; + guint32 method_count, field_count; /* next element in the class_cache hash list (in MonoImage) */ MonoClass *next_class_cache; } MonoClassDef; @@ -424,6 +418,7 @@ typedef struct { typedef struct { MonoClass class; + guint32 method_count; } MonoClassArray; typedef struct { @@ -478,7 +473,7 @@ struct MonoVTable { MonoDomain *domain; /* each object/vtable belongs to exactly one domain */ gpointer type; /* System.Type type for klass */ guint8 *interface_bitmap; - guint16 max_interface_id; + guint32 max_interface_id; guint8 rank; guint remote : 1; /* class is remotely activated */ guint initialized : 1; /* cctor has been run */ @@ -1474,6 +1469,48 @@ mono_class_try_get_generic_container (MonoClass *klass); void mono_class_set_generic_container (MonoClass *klass, MonoGenericContainer *container); +guint32 +mono_class_get_first_method_idx (MonoClass *klass); + +void +mono_class_set_first_method_idx (MonoClass *klass, guint32 idx); + +guint32 +mono_class_get_first_field_idx (MonoClass *klass); + +void +mono_class_set_first_field_idx (MonoClass *klass, guint32 idx); + +guint32 +mono_class_get_method_count (MonoClass *klass); + +void +mono_class_set_method_count (MonoClass *klass, guint32 count); + +guint32 +mono_class_get_field_count (MonoClass *klass); + +void +mono_class_set_field_count (MonoClass *klass, guint32 count); + +MonoMarshalType* +mono_class_get_marshal_info (MonoClass *class); + +void +mono_class_set_marshal_info (MonoClass *class, MonoMarshalType *marshal_info); + +MonoClassExt* +mono_class_get_ext (MonoClass *class); + +void +mono_class_set_ext (MonoClass *class, MonoClassExt *ext); + +guint32 +mono_class_get_ref_info_handle (MonoClass *class); + +guint32 +mono_class_set_ref_info_handle (MonoClass *class, guint32 value); + /*Now that everything has been defined, let's include the inline functions */ #include