#include "mono/metadata/domain-internals.h"
#include "mono/utils/mono-hash.h"
#include "mono/utils/mono-compiler.h"
+#include "mono/utils/mono-dl.h"
#include "mono/utils/monobitset.h"
struct _MonoAssembly {
int ref_count; /* use atomic operations only */
char *basedir;
MonoAssemblyName aname;
- GModule *aot_module;
+ MonoDl *aot_module;
MonoImage *image;
GSList *friend_assembly_names;
guint8 in_gac;
#define REFERENCE_MISSING ((gpointer) -1)
+typedef struct _MonoDllMap MonoDllMap;
+
struct _MonoImage {
/*
* The number of assemblies which reference this MonoImage though their 'image'
* this image between calls of mono_image_open () and mono_image_close ().
*/
int ref_count;
- FILE *file_descr;
- /* if file_descr is NULL the image was loaded from raw data */
char *raw_data;
guint32 raw_data_len;
- guint8 raw_data_allocated;
+ guint8 raw_buffer_used : 1;
+ guint8 raw_data_allocated : 1;
/* Whenever this is a dynamically emitted module */
- guint8 dynamic;
+ guint8 dynamic : 1;
/* Whenever this is a reflection only image */
- guint8 ref_only;
+ guint8 ref_only : 1;
+
+ /* Whenever this image contains uncompressed metadata */
+ guint8 uncompressed_metadata : 1;
+ guint8 checked_module_cctor : 1;
+ guint8 has_module_cctor : 1;
+
+ guint8 idx_string_wide : 1;
+ guint8 idx_guid_wide : 1;
+ guint8 idx_blob_wide : 1;
+
char *name;
const char *assembly_name;
const char *module_name;
char *raw_metadata;
- guint8 idx_string_wide, idx_guid_wide, idx_blob_wide;
-
MonoStreamHeader heap_strings;
MonoStreamHeader heap_us;
MonoStreamHeader heap_blob;
MonoImage **modules;
guint32 module_count;
+ gboolean *modules_loaded;
MonoImage **files;
* Indexed by method tokens and typedef tokens.
*/
GHashTable *method_cache;
- GHashTable *class_cache;
+ MonoInternalHashTable class_cache;
/*
* Indexed by fielddef and memberref tokens
*/
GHashTable *delegate_begin_invoke_cache;
GHashTable *delegate_end_invoke_cache;
GHashTable *delegate_invoke_cache;
+ GHashTable *runtime_invoke_cache;
+
+ /*
+ * indexed by SignatureMethodPair
+ */
+ GHashTable *delegate_abstract_invoke_cache;
/*
* indexed by MonoMethod pointers
*/
- GHashTable *runtime_invoke_cache;
+ GHashTable *runtime_invoke_direct_cache;
GHashTable *managed_wrapper_cache;
GHashTable *native_wrapper_cache;
GHashTable *remoting_invoke_cache;
GHashTable *isinst_cache;
GHashTable *castclass_cache;
GHashTable *proxy_isinst_cache;
+ GHashTable *rgctx_template_hash;
+
+ /*
+ * indexed by token and MonoGenericContext pointer
+ */
+ GHashTable *generic_class_cache;
void *reflection_info;
void *user_info;
/* dll map entries */
- GHashTable *dll_map;
+ MonoDllMap *dll_map;
/* interfaces IDs from this image */
MonoBitSet *interface_bitset;
guint32 strong_name_size;
char *win32_res;
guint32 win32_res_size;
+ guint8 *public_key;
+ int public_key_len;
MonoDynamicStream sheap;
MonoDynamicStream code; /* used to store method headers and bytecode */
MonoDynamicStream resources; /* managed embedded resources */
/* for use with allocated memory blocks (assumes alignment is to 8 bytes) */
guint mono_aligned_addr_hash (gconstpointer ptr) MONO_INTERNAL;
+void
+mono_image_check_for_module_cctor (MonoImage *image) MONO_INTERNAL;
+
+void
+mono_metadata_clean_for_image (MonoImage *image) MONO_INTERNAL;
+
void
mono_metadata_cleanup (void);
int* mono_metadata_get_param_attrs (MonoImage *m, int def);
guint
-mono_metadata_generic_method_hash (MonoGenericMethod *gmethod) MONO_INTERNAL;
+mono_metadata_generic_context_hash (const MonoGenericContext *context) MONO_INTERNAL;
gboolean
-mono_metadata_generic_method_equal (MonoGenericMethod *g1,
- MonoGenericMethod *g2) MONO_INTERNAL;
+mono_metadata_generic_context_equal (const MonoGenericContext *g1,
+ const MonoGenericContext *g2) MONO_INTERNAL;
MonoGenericInst *
mono_metadata_parse_generic_inst (MonoImage *image,
const char **rptr) MONO_INTERNAL;
MonoGenericInst *
-mono_metadata_lookup_generic_inst (MonoGenericInst *ginst) MONO_INTERNAL;
+mono_metadata_get_generic_inst (int type_argc,
+ MonoType **type_argv) MONO_INTERNAL;
MonoGenericClass *
-mono_metadata_lookup_generic_class (MonoGenericClass *gclass) MONO_INTERNAL;
+mono_metadata_lookup_generic_class (MonoClass *gclass,
+ MonoGenericInst *inst,
+ gboolean is_dynamic) MONO_INTERNAL;
MonoGenericInst *
mono_metadata_inflate_generic_inst (MonoGenericInst *ginst,
MonoGenericContext *context) MONO_INTERNAL;
-void mono_dynamic_stream_reset (MonoDynamicStream* stream) MONO_INTERNAL;
-void mono_assembly_addref (MonoAssembly *assembly) MONO_INTERNAL;
+void mono_dynamic_stream_reset (MonoDynamicStream* stream) MONO_INTERNAL;
+void mono_assembly_addref (MonoAssembly *assembly) MONO_INTERNAL;
+void mono_assembly_load_friends (MonoAssembly* ass);
void mono_config_parse_publisher_policy (const char *filename, MonoAssemblyBindingInfo *binding_info) MONO_INTERNAL;
void mono_unload_interface_ids (MonoBitSet *bitset) MONO_INTERNAL;
-MonoType *mono_metadata_type_dup_mp (MonoImage *image, const MonoType *original) MONO_INTERNAL;
+MonoType *mono_metadata_type_dup (MonoMemPool *mp, const MonoType *original) MONO_INTERNAL;
+
+MonoGenericInst *
+mono_get_shared_generic_inst (MonoGenericContainer *container) MONO_INTERNAL;
+
+int
+mono_type_stack_size_internal (MonoType *t, int *align, gboolean allow_open) MONO_INTERNAL;
+
+gboolean
+mono_metadata_type_equal_full (MonoType *t1, MonoType *t2, gboolean signature_only) MONO_INTERNAL;
+
#endif /* __MONO_METADATA_INTERNALS_H__ */