X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Fclass.h;h=47180f38be6846c0434c77d5bb7afeb9b15b4cb5;hb=dcdd5a25d92ca46ae14f74e974b4def640920e33;hp=c6831a55dd56184f192d8e3680e0ed1b531ba200;hpb=625ea07825bf8c4b7c1bc0247d0e7401cb255ed2;p=mono.git diff --git a/mono/metadata/class.h b/mono/metadata/class.h index c6831a55dd5..47180f38be6 100644 --- a/mono/metadata/class.h +++ b/mono/metadata/class.h @@ -7,6 +7,8 @@ #define MONO_CLASS_IS_ARRAY(c) ((c)->rank) +#define MONO_DEFAULT_SUPERTABLE_SIZE 6 + extern gboolean mono_print_vtable; typedef struct MonoVTable MonoVTable; @@ -15,6 +17,7 @@ typedef struct { int offset; const char *name; const char *data; + MonoClass *parent; } MonoClassField; typedef struct { @@ -47,9 +50,22 @@ typedef struct { struct _MonoClass { MonoImage *image; - guint32 type_token; - guint dummy : 1; /* temorary hack */ + /* + * relative numbering for fast type checking + */ + unsigned int baseval; + unsigned int diffval; + + /* The underlying type of the enum */ + MonoType *enum_basetype; + /* element class for arrays and enum */ + MonoClass *element_class; + /* used for subtype checks */ + MonoClass *cast_class; + /* array dimension */ + guint32 rank; + guint inited : 1; /* We use init_pending to detect cyclic calls to mono_class_init */ guint init_pending : 1; @@ -65,21 +81,27 @@ struct _MonoClass { guint size_inited : 1; guint valuetype : 1; /* derives from System.ValueType */ guint enumtype : 1; /* derives from System.Enum */ + guint blittable : 1; /* class is blittable */ + guint unicode : 1; /* class uses unicode char when marshalled */ + guint wastypebuilder : 1; /* class was created at runtime from a TypeBuilder */ + /* next byte */ + guint min_align : 4; + guint packing_size : 4; + /* next byte */ guint ghcimpl : 1; /* class has its own GetHashCode impl */ guint has_finalize : 1; /* class has its own Finalize impl */ guint marshalbyref : 1; /* class is a MarshalByRefObject */ guint contextbound : 1; /* class is a ContextBoundObject */ guint delegate : 1; /* class is a Delegate */ - guint min_align : 4; - guint packing_size : 4; - guint blittable : 1; /* class is blittable */ - guint unicode : 1; /* class uses unicode char when marshalled */ + guint gc_descr_inited : 1; /* gc_descr is initialized */ + guint dummy : 1; /* temporary hack */ MonoClass *parent; MonoClass *nested_in; GList *nested_classes; GList *subclasses; /* list of all subclasses */ + guint32 type_token; const char *name; const char *name_space; @@ -89,6 +111,10 @@ struct _MonoClass { gint *interface_offsets; MonoClass **interfaces; + /* for fast subtype checks */ + guint idepth; + MonoClass **supertypes; + /* * Computed object instance size, total. */ @@ -96,12 +122,6 @@ struct _MonoClass { int class_size; int vtable_size; /* number of slots */ - /* - * relative numbering for fast type checking - */ - unsigned int baseval; - unsigned int diffval; - /* * From the TypeDef table */ @@ -125,19 +145,15 @@ struct _MonoClass { MonoMethod **methods; - /* The underlying type of the enum */ - MonoType *enum_basetype; - /* element class for arrays and enum */ - MonoClass *element_class; - /* array dimension */ - guint32 rank; - /* used as the type of the this argument and when passing the arg by value */ MonoType this_arg; MonoType byval_arg; void *reflection_info; + void *gc_descr; + guint64 gc_bitmap; + MonoMethod *ptr_to_str; MonoMethod *str_to_ptr; @@ -147,10 +163,17 @@ struct _MonoClass { struct MonoVTable { MonoClass *klass; + /* + * According to comments in gc_gcj.h, this should be the second word in + * the vtable. + */ + void *gc_descr; MonoDomain *domain; /* each object/vtable belongs to exactly one domain */ guint max_interface_id; gpointer *interface_offsets; - gpointer data; + gpointer data; /* to store static class data */ + guint remote : 1; /* class is remotely activated */ + /* do not add any fields after vtable, the structure is dynamically extended */ gpointer vtable [MONO_ZERO_LEN_ARRAY]; }; @@ -166,23 +189,34 @@ extern MonoStats mono_stats; typedef gpointer (*MonoTrampoline) (MonoMethod *method); +typedef gpointer (*MonoLookupDynamicToken) (MonoImage *image, guint32 token); + MonoClass * mono_class_get (MonoImage *image, guint32 type_token); void mono_class_init (MonoClass *klass); +void +mono_class_layout_fields (MonoClass *klass); + +void +mono_class_setup_vtable (MonoClass *klass, MonoMethod **overrides, int onum); + MonoVTable * -mono_class_vtable (MonoDomain *domain, MonoClass *class); +mono_class_vtable (MonoDomain *domain, MonoClass *klass); MonoVTable * -mono_class_proxy_vtable (MonoDomain *domain, MonoClass *class); +mono_class_proxy_vtable (MonoDomain *domain, MonoClass *klass); void -mono_class_setup_mono_type (MonoClass *class); +mono_class_setup_mono_type (MonoClass *klass); void -mono_class_setup_parent (MonoClass *class, MonoClass *parent); +mono_class_setup_parent (MonoClass *klass, MonoClass *parent); + +void +mono_class_setup_supertypes (MonoClass *klass); MonoClass * mono_class_from_name (MonoImage *image, const char* name_space, const char *name); @@ -214,12 +248,18 @@ mono_class_get_field (MonoClass *klass, guint32 field_token); MonoClassField * mono_class_get_field_from_name (MonoClass *klass, const char *name); +MonoProperty* +mono_class_get_property_from_name (MonoClass *klass, const char *name); + gint32 mono_array_element_size (MonoClass *ac); gint32 mono_class_instance_size (MonoClass *klass); +gint32 +mono_class_array_element_size (MonoClass *klass); + gint32 mono_class_data_size (MonoClass *klass); @@ -238,6 +278,10 @@ mono_class_min_align (MonoClass *klass); MonoClass * mono_class_from_mono_type (MonoType *type); +gboolean +mono_class_is_subclass_of (MonoClass *klass, MonoClass *klassc, + gboolean check_interfaces); + gpointer mono_ldtoken (MonoImage *image, guint32 token, MonoClass **retclass); @@ -247,4 +291,13 @@ mono_install_trampoline (MonoTrampoline func); void mono_install_remoting_trampoline (MonoTrampoline func); +gpointer +mono_lookup_dynamic_token (MonoImage *image, guint32 token); + +void +mono_install_lookup_dynamic_token (MonoLookupDynamicToken func); + +void +mono_install_get_config_dir(void); + #endif /* _MONO_CLI_CLASS_H_ */