extern gboolean mono_print_vtable;
-typedef void (*MonoStackWalkImpl) (MonoStackWalk func, gpointer user_data);
+typedef void (*MonoStackWalkImpl) (MonoStackWalk func, gboolean do_il_offset, gpointer user_data);
typedef struct _MonoMethodNormal MonoMethodNormal;
typedef struct _MonoMethodWrapper MonoMethodWrapper;
MONO_WRAPPER_MANAGED_TO_NATIVE,
MONO_WRAPPER_REMOTING_INVOKE,
MONO_WRAPPER_REMOTING_INVOKE_WITH_CHECK,
+ MONO_WRAPPER_XDOMAIN_INVOKE,
+ MONO_WRAPPER_XDOMAIN_DISPATCH,
MONO_WRAPPER_LDFLD,
MONO_WRAPPER_STFLD,
MONO_WRAPPER_SYNCHRONIZED,
MONO_WRAPPER_DYNAMIC_METHOD,
+ MONO_WRAPPER_ISINST,
+ MONO_WRAPPER_CASTCLASS,
+ MONO_WRAPPER_PROXY_ISINST,
+ MONO_WRAPPER_STELEMREF,
+ MONO_WRAPPER_UNBOX,
MONO_WRAPPER_UNKNOWN
} MonoWrapperType;
+typedef enum {
+ MONO_REMOTING_TARGET_UNKNOWN,
+ MONO_REMOTING_TARGET_APPDOMAIN
+} MonoRemotingTarget;
+
struct _MonoMethod {
guint16 flags; /* method flags */
guint16 iflags; /* method implementation flags */
guint32 token;
MonoClass *klass;
MonoMethodSignature *signature;
- gpointer addr;
gpointer info; /* runtime info */
- gpointer remoting_tramp;
- gint slot;
/* name is useful mostly for debugging */
const char *name;
/* this is used by the inlining algorithm */
unsigned int inline_info:1;
unsigned int uses_this:1;
- unsigned int wrapper_type:4;
+ unsigned int wrapper_type:5;
unsigned int string_ctor:1;
unsigned int save_lmf:1;
- gint16 inline_count;
+ unsigned int dynamic:1; /* created & destroyed during runtime */
+ unsigned int is_inflated:1;
+ gint slot : 21;
};
struct _MonoMethodNormal {
MonoMethod method;
+ MonoGenericContainer *generic_container;
MonoMethodHeader *header;
};
MonoMethodNormal nmethod;
MonoGenericContext *context;
MonoMethod *declaring;
+ MonoMethodInflated *inflated;
};
struct _MonoMethodPInvoke {
MonoMethod method;
- void (*code) (void);
+ gpointer addr;
/* add marshal info */
guint16 piflags; /* pinvoke flags */
guint16 implmap_idx; /* index into IMPLMAP */
};
-typedef struct {
- MonoTypeEnum type;
- gpointer value;
-} MonoConstant;
-
typedef struct {
MonoType *generic_type;
gpointer reflection_info;
const char *name;
/*
- * Pointer to the data (from the RVA address, valid only for
- * fields with the has rva flag).
+ * If the field is constant, pointer to the metadata constant
+ * value.
+ * If the field has an RVA flag, pointer to the data.
+ * Else, invalid.
*/
const char *data;
MonoClass *parent;
/*
- * If the field is constant, pointer to the metadata where the
- * constant value can be loaded. Initialized lazily during vtable creation.
+ * If the field is constant, the type of the constant.
*/
- MonoConstant *def_value;
+ MonoTypeEnum def_type;
};
/* a field is ignored if it's named "_Deleted" and it has the specialname and rtspecialname flags set */
guint delegate : 1; /* class is a Delegate */
guint gc_descr_inited : 1; /* gc_descr is initialized */
guint dummy : 1; /* temporary hack */
+ guint32 declsec_flags; /* declarative security attributes flags */
MonoClass *parent;
MonoClass *nested_in;
MonoType this_arg;
MonoType byval_arg;
- MonoGenericInst *generic_inst;
- MonoGenericParam *gen_params;
- guint16 num_gen_params;
+ MonoGenericClass *generic_class;
+ MonoGenericContainer *generic_container;
void *reflection_info;
* Generic instantiation data type encoding.
*/
struct _MonoGenericInst {
+ int id;
+ int type_argc : 23;
+ int is_open : 1;
+ MonoType **type_argv;
+};
+
+struct _MonoGenericClass {
+ MonoGenericInst *inst;
+ MonoClass *container_class;
MonoGenericContext *context;
MonoClass *klass;
MonoType *parent;
- int count_ifaces;
+ guint count_ifaces : 29;
+ guint initialized : 1;
+ guint init_pending : 1;
+ guint is_dynamic : 1;
MonoType **ifaces;
- MonoType *generic_type;
- MonoDynamicGenericInst *dynamic_info;
- int type_argc;
- MonoType **type_argv;
- guint is_open : 1;
- guint initialized : 1;
- guint init_pending : 1;
- guint is_dynamic : 1;
};
-struct _MonoDynamicGenericInst {
+struct _MonoDynamicGenericClass {
+ MonoGenericClass generic_class;
int count_methods;
MonoMethod **methods;
int count_ctors;
};
struct _MonoGenericMethod {
+ MonoGenericInst *inst;
+ MonoGenericContainer *container;
gpointer reflection_info;
- int mtype_argc;
- MonoType **mtype_argv;
- guint is_open : 1;
};
struct _MonoGenericContext {
- MonoGenericInst *ginst;
+ MonoGenericContainer *container;
+ MonoGenericClass *gclass;
MonoGenericMethod *gmethod;
};
+struct _MonoGenericContainer {
+ MonoGenericContext context;
+ MonoGenericContainer *parent;
+ GHashTable *method_hash;
+ MonoClass *klass;
+ int type_argc : 6;
+ int is_method : 1;
+ int is_signature : 1;
+ MonoGenericParam *type_params;
+};
+
struct _MonoGenericParam {
+ MonoGenericContainer *owner;
MonoClass *pklass;
MonoMethod *method;
const char *name;
MonoClass** constraints; /* NULL means end of list */
};
+typedef struct {
+ const char *name;
+ gconstpointer func;
+ gconstpointer wrapper;
+ MonoMethodSignature *sig;
+} MonoJitICallInfo;
+
#define mono_class_has_parent(klass,parent) (((klass)->idepth >= (parent)->idepth) && ((klass)->supertypes [(parent)->idepth - 1] == (parent)))
typedef struct {
gulong class_vtable_size;
gulong class_static_data_size;
gulong generic_instance_count;
+ gulong generic_class_count;
gulong inflated_method_count;
+ gulong inflated_method_count_2;
gulong inflated_type_count;
gulong generics_metadata_size;
+ gboolean enabled;
} MonoStats;
extern MonoStats mono_stats;
typedef gpointer (*MonoTrampoline) (MonoMethod *method);
+typedef gpointer (*MonoRemotingTrampoline) (MonoMethod *method, MonoRemotingTarget target);
typedef gpointer (*MonoLookupDynamicToken) (MonoImage *image, guint32 token);
void
mono_class_setup_supertypes (MonoClass *klass);
+GPtrArray*
+mono_class_get_implemented_interfaces (MonoClass *klass);
+
gboolean
mono_class_is_open_constructed_type (MonoType *t);
mono_install_trampoline (MonoTrampoline func);
void
-mono_install_remoting_trampoline (MonoTrampoline func);
+mono_install_remoting_trampoline (MonoRemotingTrampoline func);
gpointer
mono_lookup_dynamic_token (MonoImage *image, guint32 token);
void
mono_install_lookup_dynamic_token (MonoLookupDynamicToken func);
+void
+mono_class_create_generic (MonoGenericClass *gclass);
+
+void
+mono_class_create_generic_2 (MonoGenericClass *gclass);
+
typedef struct {
MonoImage *corlib;
MonoClass *object_class;
MonoClass *marshalbyrefobject_class;
MonoClass *monitor_class;
MonoClass *iremotingtypeinfo_class;
+ MonoClass *runtimesecurityframe_class;
} MonoDefaults;
extern MonoDefaults mono_defaults;
void
mono_install_stack_walk (MonoStackWalkImpl func);
-MonoGenericParam *mono_metadata_load_generic_params (MonoImage *image, guint32 token, guint32 *num);
+MonoGenericContainer *mono_metadata_load_generic_params (MonoImage *image, guint32 token,
+ MonoGenericContainer *parent_container);
+
+MonoMethodSignature*
+mono_create_icall_signature (const char *sigstr);
+
+MonoJitICallInfo *
+mono_register_jit_icall (gconstpointer func, const char *name, MonoMethodSignature *sig, gboolean is_save);
+
+void
+mono_register_jit_icall_wrapper (MonoJitICallInfo *info, gconstpointer wrapper);
+
+MonoJitICallInfo *
+mono_find_jit_icall_by_name (const char *name);
+
+MonoJitICallInfo *
+mono_find_jit_icall_by_addr (gconstpointer addr);
+
+MonoMethodSignature*
+mono_class_inflate_generic_signature (MonoImage *image, MonoMethodSignature *sig, MonoGenericContext *context);
+
+MonoGenericClass *
+mono_get_shared_generic_class (MonoGenericContainer *container, gboolean is_dynamic);
#endif /* __MONO_METADATA_CLASS_INTERBALS_H__ */