MONO_WRAPPER_RUNTIME_INVOKE,
MONO_WRAPPER_NATIVE_TO_MANAGED,
MONO_WRAPPER_MANAGED_TO_NATIVE,
+ MONO_WRAPPER_MANAGED_TO_MANAGED,
MONO_WRAPPER_REMOTING_INVOKE,
MONO_WRAPPER_REMOTING_INVOKE_WITH_CHECK,
MONO_WRAPPER_XDOMAIN_INVOKE,
MONO_WRAPPER_STELEMREF,
MONO_WRAPPER_UNBOX,
MONO_WRAPPER_LDFLDA,
- MONO_WRAPPER_UNKNOWN
+ MONO_WRAPPER_WRITE_BARRIER,
+ MONO_WRAPPER_UNKNOWN,
+ MONO_WRAPPER_COMINTEROP_INVOKE,
+ MONO_WRAPPER_COMINTEROP
} MonoWrapperType;
typedef enum {
typedef enum {
MONO_REMOTING_TARGET_UNKNOWN,
- MONO_REMOTING_TARGET_APPDOMAIN
+ MONO_REMOTING_TARGET_APPDOMAIN,
+ MONO_REMOTING_TARGET_COMINTEROP
} MonoRemotingTarget;
struct _MonoMethod {
unsigned int save_lmf:1;
unsigned int dynamic:1; /* created & destroyed during runtime */
unsigned int is_inflated:1; /* whether we're a MonoMethodInflated */
- signed int slot : 21;
+ unsigned int skip_visibility:1; /* whenever to skip JIT visibility checks */
+ signed int slot : 20;
};
struct _MonoMethodNormal {
guint delegate : 1; /* class is a Delegate */
guint gc_descr_inited : 1; /* gc_descr is initialized */
guint has_cctor : 1; /* class has a cctor */
- guint dummy : 1; /* temporary hack */
- /* next byte */
guint has_references : 1; /* it has GC-tracked references in the instance */
+ /* next byte */
guint has_static_refs : 1; /* it has static fields that are GC-tracked */
guint no_special_static_fields : 1; /* has no thread/context static fields */
+ /* directly or indirectly derives from ComImport attributed class.
+ * this means we need to create a proxy for instances of this class
+ * for COM Interop. set this flag on loading so all we need is a quick check
+ * during object creation rather than having to traverse supertypes
+ */
+ guint is_com_object : 1;
guint8 exception_type; /* MONO_EXCEPTION_* */
void* exception_data; /* Additional information about the exception */
* Computed object instance size, total.
*/
int instance_size;
- int class_size;
int vtable_size; /* number of slots */
+ union {
+ int class_size; /* size of area for static fields */
+ int element_size; /* for array types */
+ } sizes;
/*
* From the TypeDef table
guint8 rank;
guint remote : 1; /* class is remotely activated */
guint initialized : 1; /* cctor has been run */
+ guint init_failed : 1; /* cctor execution failed */
/* do not add any fields after vtable, the structure is dynamically extended */
gpointer vtable [MONO_ZERO_LEN_ARRAY];
};
typedef enum {
MONO_LOADER_ERROR_TYPE,
MONO_LOADER_ERROR_METHOD,
- MONO_LOADER_ERROR_FIELD
+ MONO_LOADER_ERROR_FIELD,
+ MONO_LOADER_ERROR_ASSEMBLY
} MonoLoaderErrorKind;
typedef struct {
MonoLoaderErrorKind kind;
- char *class_name, *assembly_name; /* If kind == TYPE */
+ char *class_name; /* If kind == TYPE */
+ char *assembly_name; /* If kind == TYPE or ASSEMBLY */
MonoClass *klass; /* If kind != TYPE */
const char *member_name; /* If kind != TYPE */
+ gboolean ref_only; /* If kind == ASSEMBLY */
} MonoLoaderError;
#define mono_class_has_parent(klass,parent) (((klass)->idepth >= (parent)->idepth) && ((klass)->supertypes [(parent)->idepth - 1] == (parent)))
typedef struct {
gulong new_object_count;
gulong initialized_class_count;
+ gulong generic_vtable_count;
gulong used_class_count;
+ gulong method_count;
gulong class_vtable_size;
gulong class_static_data_size;
gulong generic_instance_count;
typedef gboolean (*MonoGetCachedClassInfo) (MonoClass *klass, MonoCachedClassInfo *res);
+typedef gboolean (*MonoGetClassFromName) (MonoImage *image, const char *name_space, const char *name, MonoClass **res);
+
void
mono_classes_init (void) MONO_INTERNAL;
+void
+mono_classes_cleanup (void) MONO_INTERNAL;
+
void
mono_class_layout_fields (MonoClass *klass) MONO_INTERNAL;
+void
+mono_class_setup_interface_offsets (MonoClass *klass) MONO_INTERNAL;
+
void
mono_class_setup_vtable_general (MonoClass *klass, MonoMethod **overrides, int onum) MONO_INTERNAL;
void
mono_install_get_cached_class_info (MonoGetCachedClassInfo func) MONO_INTERNAL;
+void
+mono_install_get_class_from_name (MonoGetClassFromName func) MONO_INTERNAL;
+
MonoInflatedGenericClass*
mono_get_inflated_generic_class (MonoGenericClass *gclass) MONO_INTERNAL;
MonoClass *typehandle_class;
MonoClass *fieldhandle_class;
MonoClass *methodhandle_class;
+ MonoClass *systemtype_class;
MonoClass *monotype_class;
MonoClass *exception_class;
MonoClass *threadabortexception_class;
MonoClass *runtimesecurityframe_class;
MonoClass *executioncontext_class;
MonoClass *internals_visible_class;
- MonoClass *generic_array_class;
+ MonoClass *generic_ilist_class;
MonoClass *generic_nullable_class;
+ MonoClass *variant_class;
+ MonoClass *com_object_class;
+ MonoClass *com_interop_proxy_class;
} MonoDefaults;
extern MonoDefaults mono_defaults MONO_INTERNAL;
void
mono_loader_init (void) MONO_INTERNAL;
+void
+mono_loader_cleanup (void) MONO_INTERNAL;
+
void
mono_loader_lock (void) MONO_INTERNAL;
mono_loader_unlock (void) MONO_INTERNAL;
void
-mono_loader_set_error_type_load (char *class_name, char *assembly_name) MONO_INTERNAL;
+mono_loader_set_error_assembly_load (const char *assembly_name, gboolean ref_only) MONO_INTERNAL;
+
+void
+mono_loader_set_error_type_load (const char *class_name, const char *assembly_name) MONO_INTERNAL;
void
-mono_loader_set_error_method_load (MonoClass *klass, const char *member_name) MONO_INTERNAL;
+mono_loader_set_error_method_load (const char *class_name, const char *member_name) MONO_INTERNAL;
void
mono_loader_set_error_field_load (MonoClass *klass, const char *member_name) MONO_INTERNAL;
-MonoLoaderError*
+MonoException *
+mono_loader_error_prepare_exception (MonoLoaderError *error) MONO_INTERNAL;
+
+MonoLoaderError *
mono_loader_get_last_error (void) MONO_INTERNAL;
void
MonoArrayType *mono_dup_array_type (MonoArrayType *a) MONO_INTERNAL;
MonoMethodSignature *mono_metadata_signature_deep_dup (MonoMethodSignature *sig) MONO_INTERNAL;
+void
+mono_image_init_name_cache (MonoImage *image);
+
gboolean mono_class_is_nullable (MonoClass *klass) MONO_INTERNAL;
MonoClass *mono_class_get_nullable_param (MonoClass *klass) MONO_INTERNAL;
+/* object debugging functions, for use inside gdb */
+void mono_object_describe (MonoObject *obj);
+void mono_object_describe_fields (MonoObject *obj);
+void mono_value_describe_fields (MonoClass* klass, const char* addr);
+void mono_class_describe_statics (MonoClass* klass);
+
#endif /* __MONO_METADATA_CLASS_INTERBALS_H__ */