X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Fclass-internals.h;h=bc4469196a3fef66884bcf07940f342e80448662;hb=1113782115f43dae2d4a3bb705a30cf3e8e0cbdb;hp=a221614d9c9f8c789460e2a5361d7b939c2d648b;hpb=923e7bb5209d6f4d0b6a0eaa5b32a44bd61f87ee;p=mono.git diff --git a/mono/metadata/class-internals.h b/mono/metadata/class-internals.h index a221614d9c9..bc4469196a3 100644 --- a/mono/metadata/class-internals.h +++ b/mono/metadata/class-internals.h @@ -1,9 +1,13 @@ +/* + * Copyright 2012 Xamarin Inc + */ #ifndef __MONO_METADATA_CLASS_INTERBALS_H__ #define __MONO_METADATA_CLASS_INTERBALS_H__ #include #include #include +#include #include #include "mono/utils/mono-compiler.h" #include "mono/utils/mono-error.h" @@ -16,11 +20,6 @@ extern gboolean mono_print_vtable; -extern gboolean mono_setup_vtable_in_class_init; - -typedef void (*MonoStackWalkImpl) (MonoStackWalk func, gboolean do_il_offset, gpointer user_data); - -typedef struct _MonoMethodNormal MonoMethodNormal; typedef struct _MonoMethodWrapper MonoMethodWrapper; typedef struct _MonoMethodInflated MonoMethodInflated; typedef struct _MonoMethodPInvoke MonoMethodPInvoke; @@ -32,6 +31,13 @@ typedef struct _MonoMethodPInvoke MonoMethodPInvoke; */ #define MONO_PROP_DYNAMIC_CATTR 0x1000 +#ifdef ENABLE_ICALL_EXPORT +#pragma GCC diagnostic ignored "-Wmissing-prototypes" +#define ICALL_EXPORT +#else +#define ICALL_EXPORT static +#endif + typedef enum { #define WRAPPER(e,n) MONO_WRAPPER_ ## e, #include "wrapper-types.h" @@ -69,13 +75,14 @@ struct _MonoMethod { unsigned int string_ctor:1; unsigned int save_lmf:1; unsigned int dynamic:1; /* created & destroyed during runtime */ + unsigned int sre_method:1; /* created at runtime using Reflection.Emit */ unsigned int is_generic:1; /* whenever this is a generic method definition */ unsigned int is_inflated:1; /* whether we're a MonoMethodInflated */ unsigned int skip_visibility:1; /* whenever to skip JIT visibility checks */ unsigned int verification_success:1; /* whether this method has been verified successfully.*/ /* TODO we MUST get rid of this field, it's an ugly hack nobody is proud of. */ unsigned int is_mb_open : 1; /* This is the fully open instantiation of a generic method_builder. Worse than is_tb_open, but it's temporary */ - signed int slot : 17; + signed int slot : 16; /* * If is_generic is TRUE, the generic_container is stored in image->property_hash, @@ -83,13 +90,9 @@ struct _MonoMethod { */ }; -struct _MonoMethodNormal { +struct _MonoMethodWrapper { MonoMethod method; MonoMethodHeader *header; -}; - -struct _MonoMethodWrapper { - MonoMethodNormal method; void *method_data; }; @@ -148,6 +151,11 @@ struct _MonoClassField { #define mono_field_is_deleted(field) (((field)->type->attrs & (FIELD_ATTRIBUTE_SPECIAL_NAME | FIELD_ATTRIBUTE_RT_SPECIAL_NAME)) \ && (strcmp (mono_field_get_name (field), "_Deleted") == 0)) +/* a field is ignored if it's named "_Deleted" and it has the specialname and rtspecialname flags set */ +/* Try to avoid loading the field's type */ +#define mono_field_is_deleted_with_flags(field, flags) (((flags) & (FIELD_ATTRIBUTE_SPECIAL_NAME | FIELD_ATTRIBUTE_RT_SPECIAL_NAME)) \ + && (strcmp (mono_field_get_name (field), "_Deleted") == 0)) + typedef struct { MonoClassField *field; guint32 offset; @@ -178,7 +186,9 @@ struct _MonoEvent { MonoMethod *add; MonoMethod *remove; MonoMethod *raise; +#ifndef MONO_SMALL_CONFIG MonoMethod **other; +#endif guint32 attrs; }; @@ -197,7 +207,8 @@ enum { MONO_EXCEPTION_FIELD_ACCESS = 10, MONO_EXCEPTION_GENERIC_SHARING_FAILED = 11, MONO_EXCEPTION_BAD_IMAGE = 12, - MONO_EXCEPTION_OBJECT_SUPPLIED = 13 /*The exception object is already created.*/ + MONO_EXCEPTION_OBJECT_SUPPLIED = 13, /*The exception object is already created.*/ + MONO_EXCEPTION_OUT_OF_MEMORY = 14 /* add other exception type */ }; @@ -212,47 +223,6 @@ typedef struct { #define MONO_SIZEOF_CLASS_RUNTIME_INFO (sizeof (MonoClassRuntimeInfo) - MONO_ZERO_LEN_ARRAY * SIZEOF_VOID_P) -enum { - MONO_RGCTX_INFO_STATIC_DATA, - MONO_RGCTX_INFO_KLASS, - MONO_RGCTX_INFO_VTABLE, - MONO_RGCTX_INFO_TYPE, - MONO_RGCTX_INFO_REFLECTION_TYPE, - MONO_RGCTX_INFO_METHOD, - MONO_RGCTX_INFO_GENERIC_METHOD_CODE, - MONO_RGCTX_INFO_CLASS_FIELD, - MONO_RGCTX_INFO_METHOD_RGCTX, - MONO_RGCTX_INFO_METHOD_CONTEXT, - MONO_RGCTX_INFO_REMOTING_INVOKE_WITH_CHECK, - MONO_RGCTX_INFO_METHOD_DELEGATE_CODE -}; - -typedef struct _MonoRuntimeGenericContextOtherInfoTemplate { - int info_type; - gpointer data; - struct _MonoRuntimeGenericContextOtherInfoTemplate *next; -} MonoRuntimeGenericContextOtherInfoTemplate; - -typedef struct { - MonoClass *next_subclass; - MonoRuntimeGenericContextOtherInfoTemplate *other_infos; - GSList *method_templates; -} MonoRuntimeGenericContextTemplate; - -typedef struct { - MonoVTable *class_vtable; /* must be the first element */ - MonoGenericInst *method_inst; - gpointer infos [MONO_ZERO_LEN_ARRAY]; -} MonoMethodRuntimeGenericContext; - -#define MONO_SIZEOF_METHOD_RUNTIME_GENERIC_CONTEXT (sizeof (MonoMethodRuntimeGenericContext) - MONO_ZERO_LEN_ARRAY * SIZEOF_VOID_P) - -#define MONO_RGCTX_SLOT_MAKE_RGCTX(i) (i) -#define MONO_RGCTX_SLOT_MAKE_MRGCTX(i) ((i) | 0x80000000) -#define MONO_RGCTX_SLOT_INDEX(s) ((s) & 0x7fffffff) -#define MONO_RGCTX_SLOT_IS_MRGCTX(s) (((s) & 0x80000000) ? TRUE : FALSE) - - #define MONO_CLASS_PROP_EXCEPTION_DATA 0 /* @@ -262,7 +232,11 @@ typedef struct { */ typedef struct { struct { +#if MONO_SMALL_CONFIG + guint16 first, count; +#else guint32 first, count; +#endif } property, event; /* Initialized by a call to mono_class_setup_properties () */ @@ -273,9 +247,10 @@ typedef struct { guint32 declsec_flags; /* declarative security attributes flags */ - /* Default values/RVA for fields */ + /* Default values/RVA for fields and properties */ /* Accessed using mono_class_get_field_default_value () / mono_field_get_data () */ MonoFieldDefaultValue *field_def_values; + MonoFieldDefaultValue *prop_def_values; GList *nested_classes; } MonoClassExt; @@ -341,6 +316,9 @@ struct _MonoClass { guint simd_type : 1; /* class is a simd intrinsic type */ guint is_generic : 1; /* class is a generic type definition */ guint is_inflated : 1; /* class is a generic instance */ + /* next byte */ + guint has_finalize_inited : 1; /* has_finalize is initialized */ + guint fields_inited : 1; /* fields is initialized */ guint8 exception_type; /* MONO_EXCEPTION_* */ @@ -365,8 +343,12 @@ struct _MonoClass { guint16 interface_offsets_count; MonoClass **interfaces_packed; guint16 *interface_offsets_packed; +/* enabled only with small config for now: we might want to do it unconditionally */ +#ifdef MONO_SMALL_CONFIG +#define COMPRESSED_INTERFACE_BITMAP 1 +#endif guint8 *interface_bitmap; - + MonoClass **interfaces; union { @@ -380,9 +362,16 @@ struct _MonoClass { */ guint32 flags; 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; @@ -400,8 +389,6 @@ struct _MonoClass { MonoGenericClass *generic_class; MonoGenericContainer *generic_container; - void *reflection_info; - void *gc_descr; MonoClassRuntimeInfo *runtime_info; @@ -416,7 +403,17 @@ struct _MonoClass { MonoClassExt *ext; }; -#define MONO_CLASS_IMPLEMENTS_INTERFACE(k,uiid) (((uiid) <= (k)->max_interface_id) && ((k)->interface_bitmap [(uiid) >> 3] & (1 << ((uiid)&7)))) +#ifdef COMPRESSED_INTERFACE_BITMAP +int mono_compress_bitmap (uint8_t *dest, const uint8_t *bitmap, int size) MONO_INTERNAL; +int mono_class_interface_match (const uint8_t *bitmap, int id) MONO_INTERNAL; +#else +#define mono_class_interface_match(bmap,uiid) ((bmap) [(uiid) >> 3] & (1 << ((uiid)&7))) +#endif + +#define MONO_CLASS_IMPLEMENTS_INTERFACE(k,uiid) (((uiid) <= (k)->max_interface_id) && mono_class_interface_match ((k)->interface_bitmap, (uiid))) + +#define MONO_VTABLE_AVAILABLE_GC_BITS 4 + int mono_class_interface_offset (MonoClass *klass, MonoClass *itf); int mono_class_interface_offset_with_variance (MonoClass *klass, MonoClass *itf, gboolean *non_exact_match) MONO_INTERNAL; @@ -431,7 +428,6 @@ struct MonoVTable { */ void *gc_descr; MonoDomain *domain; /* each object/vtable belongs to exactly one domain */ - gpointer data; /* to store static class data */ gpointer type; /* System.Type type for klass */ guint8 *interface_bitmap; guint16 max_interface_id; @@ -439,15 +435,20 @@ struct MonoVTable { guint remote : 1; /* class is remotely activated */ guint initialized : 1; /* cctor has been run */ guint init_failed : 1; /* cctor execution failed */ + guint has_static_fields : 1; /* pointer to the data stored at the end of the vtable array */ + guint gc_bits : MONO_VTABLE_AVAILABLE_GC_BITS; /* Those bits are reserved for the usaged of the GC */ + guint32 imt_collisions_bitmap; MonoRuntimeGenericContext *runtime_generic_context; /* do not add any fields after vtable, the structure is dynamically extended */ + /* vtable contains function pointers to methods or their trampolines, at the + end there may be a slot containing the pointer to the static fields */ gpointer vtable [MONO_ZERO_LEN_ARRAY]; }; #define MONO_SIZEOF_VTABLE (sizeof (MonoVTable) - MONO_ZERO_LEN_ARRAY * SIZEOF_VOID_P) -#define MONO_VTABLE_IMPLEMENTS_INTERFACE(vt,uiid) (((uiid) <= (vt)->max_interface_id) && ((vt)->interface_bitmap [(uiid) >> 3] & (1 << ((uiid)&7)))) +#define MONO_VTABLE_IMPLEMENTS_INTERFACE(vt,uiid) (((uiid) <= (vt)->max_interface_id) && mono_class_interface_match ((vt)->interface_bitmap, (uiid))) /* * Generic instantiation data type encoding. @@ -460,7 +461,9 @@ struct MonoVTable { * instantiations here. */ struct _MonoGenericInst { +#ifndef MONO_SMALL_CONFIG guint id; /* unique ID for debugging */ +#endif guint type_argc : 22; /* number of type arguments */ guint is_open : 1; /* if this is an open type */ MonoType *type_argv [MONO_ZERO_LEN_ARRAY]; @@ -487,9 +490,9 @@ struct _MonoGenericContext { struct _MonoMethodInflated { union { MonoMethod method; - MonoMethodNormal normal; MonoMethodPInvoke pinvoke; } method; + MonoMethodHeader *header; MonoMethod *declaring; /* the generic method definition. */ MonoGenericContext context; /* The current instantiation */ }; @@ -503,6 +506,13 @@ struct _MonoGenericClass { guint is_dynamic : 1; /* We're a MonoDynamicGenericClass */ guint is_tb_open : 1; /* This is the fully open instantiation for a type_builder. Quite ugly, but it's temporary.*/ MonoClass *cached_class; /* if present, the MonoClass corresponding to the instantiation. */ + + /* + * The image set which owns this generic class. Memory owned by the generic class + * including cached_class should be allocated from the mempool of the image set, + * so it is easy to free. + */ + MonoImageSet *owner; }; /* @@ -511,10 +521,6 @@ struct _MonoGenericClass { */ struct _MonoDynamicGenericClass { MonoGenericClass generic_class; - int count_methods; - MonoMethod **methods; - int count_ctors; - MonoMethod **ctors; int count_fields; MonoClassField *fields; guint initialized; @@ -530,6 +536,8 @@ struct _MonoDynamicGenericClass { struct _MonoGenericParam { MonoGenericContainer *owner; /* Type or method this parameter was defined in. */ guint16 num; + /* For internal runtime use, used to make different versions of the same param */ + guint16 serial; /* * If owner is NULL, or owner is 'owned' by this gparam, * then this is the image whose mempool this struct was allocated from. @@ -635,7 +643,49 @@ typedef struct { char *msg; /* If kind == BAD_IMAGE */ } MonoLoaderError; -#define mono_class_has_parent(klass,parent) (((klass)->idepth >= (parent)->idepth) && ((klass)->supertypes [(parent)->idepth - 1] == (parent))) +void +mono_class_setup_supertypes (MonoClass *klass) MONO_INTERNAL; + +void +mono_class_setup_fields_locking (MonoClass *class) MONO_INTERNAL; + +/* WARNING + * Only call this function if you can ensure both @klass and @parent + * have supertype information initialized. + * This can be accomplished by mono_class_setup_supertypes or mono_class_init. + * If unsure, use mono_class_has_parent. + */ +static inline gboolean +mono_class_has_parent_fast (MonoClass *klass, MonoClass *parent) +{ + return (klass->idepth >= parent->idepth) && (klass->supertypes [parent->idepth - 1] == parent); +} + +static inline gboolean +mono_class_has_parent (MonoClass *klass, MonoClass *parent) +{ + if (G_UNLIKELY (!klass->supertypes)) + mono_class_setup_supertypes (klass); + + if (G_UNLIKELY (!parent->supertypes)) + mono_class_setup_supertypes (parent); + + return mono_class_has_parent_fast (klass, parent); +} + +typedef struct { + MonoVTable *default_vtable; + MonoVTable *xdomain_vtable; + MonoClass *proxy_class; + char* proxy_class_name; + uint32_t interface_count; + MonoClass *interfaces [MONO_ZERO_LEN_ARRAY]; +} MonoRemoteClass; + +#define MONO_SIZEOF_REMOTE_CLASS (sizeof (MonoRemoteClass) - MONO_ZERO_LEN_ARRAY * SIZEOF_VOID_P) + +MonoRemoteClass* +mono_remote_class (MonoDomain *domain, MonoString *class_name, MonoClass *proxy_class) MONO_INTERNAL; typedef struct { gulong new_object_count; @@ -755,6 +805,8 @@ typedef struct { /* Threadpool */ guint64 threadpool_workitems; guint64 threadpool_ioworkitems; + guint threadpool_threads; + guint threadpool_iothreads; } MonoPerfCounters; extern MonoPerfCounters *mono_perfcounters MONO_INTERNAL; @@ -801,7 +853,7 @@ extern MonoStats mono_stats MONO_INTERNAL; typedef gpointer (*MonoTrampoline) (MonoMethod *method); typedef gpointer (*MonoJumpTrampoline) (MonoDomain *domain, MonoMethod *method, gboolean add_sync_wrapper); typedef gpointer (*MonoRemotingTrampoline) (MonoDomain *domain, MonoMethod *method, MonoRemotingTarget target); -typedef gpointer (*MonoDelegateTrampoline) (MonoClass *klass); +typedef gpointer (*MonoDelegateTrampoline) (MonoDomain *domain, MonoClass *klass); typedef gpointer (*MonoLookupDynamicToken) (MonoImage *image, guint32 token, gboolean valid_token, MonoClass **handle_class, MonoGenericContext *context); @@ -822,7 +874,7 @@ void mono_class_setup_interface_offsets (MonoClass *klass) MONO_INTERNAL; void -mono_class_setup_vtable_general (MonoClass *klass, MonoMethod **overrides, int onum) MONO_INTERNAL; +mono_class_setup_vtable_general (MonoClass *klass, MonoMethod **overrides, int onum, GList *in_setup) MONO_INTERNAL; void mono_class_setup_vtable (MonoClass *klass) MONO_INTERNAL; @@ -836,9 +888,6 @@ mono_class_setup_mono_type (MonoClass *klass) MONO_INTERNAL; void mono_class_setup_parent (MonoClass *klass, MonoClass *parent) MONO_INTERNAL; -void -mono_class_setup_supertypes (MonoClass *klass) MONO_INTERNAL; - MonoMethod* mono_class_get_method_by_index (MonoClass *class, int index) MONO_INTERNAL; @@ -849,7 +898,7 @@ MonoMethod* mono_class_get_vtable_entry (MonoClass *class, int offset) MONO_INTERNAL; GPtrArray* -mono_class_get_implemented_interfaces (MonoClass *klass) MONO_INTERNAL; +mono_class_get_implemented_interfaces (MonoClass *klass, MonoError *error) MONO_INTERNAL; int mono_class_get_vtable_size (MonoClass *klass) MONO_INTERNAL; @@ -873,12 +922,18 @@ mono_class_needs_cctor_run (MonoClass *klass, MonoMethod *caller) MONO_INTERNAL; gboolean mono_class_field_is_special_static (MonoClassField *field) MONO_INTERNAL; +guint32 +mono_class_field_get_special_static_type (MonoClassField *field) MONO_INTERNAL; + gboolean mono_class_has_special_static_fields (MonoClass *klass) MONO_INTERNAL; const char* mono_class_get_field_default_value (MonoClassField *field, MonoTypeEnum *def_type) MONO_INTERNAL; +const char* +mono_class_get_property_default_value (MonoProperty *property, MonoTypeEnum *def_type) MONO_INTERNAL; + void mono_install_trampoline (MonoTrampoline func) MONO_INTERNAL; @@ -915,6 +970,9 @@ mono_install_get_class_from_name (MonoGetClassFromName func) MONO_INTERNAL; MonoGenericContext* mono_class_get_context (MonoClass *class) MONO_INTERNAL; +MonoMethodSignature* +mono_method_signature_checked (MonoMethod *m, MonoError *err) MONO_INTERNAL; + MonoGenericContext* mono_method_get_context_general (MonoMethod *method, gboolean uninflated) MONO_INTERNAL; @@ -1037,10 +1095,10 @@ void mono_loader_cleanup (void) MONO_INTERNAL; void -mono_loader_lock (void) MONO_INTERNAL; +mono_loader_lock (void) MONO_LLVM_INTERNAL; void -mono_loader_unlock (void) MONO_INTERNAL; +mono_loader_unlock (void) MONO_LLVM_INTERNAL; void mono_loader_lock_track_ownership (gboolean track) MONO_INTERNAL; @@ -1048,6 +1106,12 @@ mono_loader_lock_track_ownership (gboolean track) MONO_INTERNAL; gboolean mono_loader_lock_is_owned_by_self (void) MONO_INTERNAL; +void +mono_loader_lock_if_inited (void) MONO_INTERNAL; + +void +mono_loader_unlock_if_inited (void) MONO_INTERNAL; + void mono_loader_set_error_assembly_load (const char *assembly_name, gboolean ref_only) MONO_INTERNAL; @@ -1083,9 +1147,6 @@ mono_icall_cleanup (void) MONO_INTERNAL; gpointer mono_method_get_wrapper_data (MonoMethod *method, guint32 id) MONO_INTERNAL; -void -mono_install_stack_walk (MonoStackWalkImpl func) MONO_INTERNAL; - gboolean mono_metadata_has_generic_params (MonoImage *image, guint32 token) MONO_INTERNAL; @@ -1111,10 +1172,10 @@ void mono_register_jit_icall_wrapper (MonoJitICallInfo *info, gconstpointer wrapper) MONO_INTERNAL; MonoJitICallInfo * -mono_find_jit_icall_by_name (const char *name) MONO_INTERNAL; +mono_find_jit_icall_by_name (const char *name) MONO_LLVM_INTERNAL; MonoJitICallInfo * -mono_find_jit_icall_by_addr (gconstpointer addr) MONO_INTERNAL; +mono_find_jit_icall_by_addr (gconstpointer addr) MONO_LLVM_INTERNAL; GHashTable* mono_get_jit_icall_info (void) MONO_INTERNAL; @@ -1162,60 +1223,12 @@ mono_type_get_full (MonoImage *image, guint32 type_token, MonoGenericCont gboolean mono_generic_class_is_generic_type_definition (MonoGenericClass *gklass) MONO_INTERNAL; -MonoMethod* -mono_method_get_declaring_generic_method (MonoMethod *method) MONO_INTERNAL; - MonoMethod* mono_class_get_method_generic (MonoClass *klass, MonoMethod *method) MONO_INTERNAL; MonoType* mono_type_get_basic_type_from_generic (MonoType *type) MONO_INTERNAL; -void -mono_set_generic_sharing_supported (gboolean supported) MONO_INTERNAL; - -gboolean -mono_class_generic_sharing_enabled (MonoClass *class) MONO_INTERNAL; - -gpointer -mono_class_fill_runtime_generic_context (MonoVTable *class_vtable, guint32 slot) MONO_INTERNAL; - -gpointer -mono_method_fill_runtime_generic_context (MonoMethodRuntimeGenericContext *mrgctx, guint32 slot) MONO_INTERNAL; - -MonoMethodRuntimeGenericContext* -mono_method_lookup_rgctx (MonoVTable *class_vtable, MonoGenericInst *method_inst) MONO_INTERNAL; - -gboolean -mono_method_needs_static_rgctx_invoke (MonoMethod *method, gboolean allow_type_vars) MONO_INTERNAL; - -int -mono_class_rgctx_get_array_size (int n, gboolean mrgctx) MONO_INTERNAL; - -guint32 -mono_method_lookup_or_register_other_info (MonoMethod *method, gboolean in_mrgctx, gpointer data, - int info_type, MonoGenericContext *generic_context) MONO_INTERNAL; - -MonoGenericContext -mono_method_construct_object_context (MonoMethod *method) MONO_INTERNAL; - -int -mono_generic_context_check_used (MonoGenericContext *context) MONO_INTERNAL; - -int -mono_class_check_context_used (MonoClass *class) MONO_INTERNAL; - -gboolean -mono_generic_context_is_sharable (MonoGenericContext *context, gboolean allow_type_vars) MONO_INTERNAL; - -gboolean -mono_method_is_generic_impl (MonoMethod *method) MONO_INTERNAL; -gboolean -mono_method_is_generic_sharable_impl (MonoMethod *method, gboolean allow_type_vars) MONO_INTERNAL; - -void -mono_class_unregister_image_generic_subclasses (MonoImage *image) MONO_INTERNAL; - gboolean mono_method_can_access_method_full (MonoMethod *method, MonoMethod *called, MonoClass *context_klass) MONO_INTERNAL; @@ -1250,7 +1263,7 @@ void mono_class_alloc_ext (MonoClass *klass) MONO_INTERNAL; void -mono_class_setup_interfaces (MonoClass *klass) MONO_INTERNAL; +mono_class_setup_interfaces (MonoClass *klass, MonoError *error) MONO_INTERNAL; MonoClassField* mono_class_get_field_from_name_full (MonoClass *klass, const char *name, MonoType *type) MONO_INTERNAL; @@ -1264,4 +1277,27 @@ mono_class_is_assignable_from_slow (MonoClass *target, MonoClass *candidate) MON gboolean mono_class_has_variant_generic_params (MonoClass *klass) MONO_INTERNAL; +gboolean +mono_class_is_variant_compatible (MonoClass *klass, MonoClass *oklass, gboolean check_for_reference_conv) MONO_INTERNAL; + +gboolean mono_is_corlib_image (MonoImage *image) MONO_INTERNAL; + +MonoType* +mono_field_get_type_checked (MonoClassField *field, MonoError *error) MONO_INTERNAL; + +MonoClassField* +mono_class_get_fields_lazy (MonoClass* klass, gpointer *iter) MONO_INTERNAL; + +gboolean +mono_class_check_vtable_constraints (MonoClass *class, GList *in_setup) MONO_INTERNAL; + +gboolean +mono_class_has_finalizer (MonoClass *klass) MONO_INTERNAL; + +void +mono_unload_interface_id (MonoClass *class) MONO_INTERNAL; + +GPtrArray* +mono_class_get_methods_by_name (MonoClass *klass, const char *name, guint32 bflags, gboolean ignore_case, gboolean allow_ctors, MonoException **ex) MONO_INTERNAL; + #endif /* __MONO_METADATA_CLASS_INTERBALS_H__ */