2008-04-21 Gonzalo Paniagua Javier <gonzalo.mono@gmail.com>
[mono.git] / mono / metadata / object-internals.h
index 61598b4d7c60c22e97b3867c887f125bc3a6c98d..df479b861b6f39786ca239e60447e870a50397d9 100644 (file)
@@ -2,6 +2,7 @@
 #define __MONO_OBJECT_INTERNALS_H__
 
 #include <mono/metadata/object.h>
+#include <mono/metadata/threads.h>
 #include <mono/metadata/reflection.h>
 #include <mono/metadata/mempool.h>
 #include <mono/io-layer/io-layer.h>
@@ -129,6 +130,7 @@ struct _MonoException {
        gint32      remote_stack_index;
        gint32      hresult;
        MonoString *source;
+       MonoObject *_data;
 };
 
 typedef struct {
@@ -261,7 +263,7 @@ struct _MonoThread {
        gpointer suspend_event;
        gpointer suspended_event;
        gpointer resume_event;
-       MonoObject *synch_lock;
+       CRITICAL_SECTION *synch_cs;
        guint8* serialized_culture_info;
        guint32 serialized_culture_info_len;
        guint8* serialized_ui_culture_info;
@@ -275,8 +277,10 @@ struct _MonoThread {
        gpointer end_stack; /* This is only used when running in the debugger. */
        MonoBoolean thread_interrupt_requested;
        guint8  apartment_state;
-       gpointer unused5;
-       gpointer unused6;
+       gssize small_id;    /* A small, unique id, used for the hazard
+                              pointer table.  Should be changed to a
+                              guint32 at the next corlib version bump. */
+       MonoThreadManageCallback manage_callback;
        gpointer unused7;
 };
 
@@ -523,10 +527,12 @@ struct _MonoDelegate {
        gpointer method_ptr;
        gpointer invoke_impl;
        MonoObject *target;
+       MonoMethod *method;
        MonoObject *target_type;
        MonoString *method_name;
        gpointer delegate_trampoline;
        MonoReflectionMethod *method_info;
+       MonoReflectionMethod *original_method_info;
 };
 
 typedef struct _MonoMulticastDelegate MonoMulticastDelegate;
@@ -931,7 +937,7 @@ typedef struct {
 typedef struct _MonoReflectionGenericClass MonoReflectionGenericClass;
 struct _MonoReflectionGenericClass {
        MonoReflectionType type;
-       MonoReflectionType *generic_type;
+       MonoReflectionTypeBuilder *generic_type;
        guint32 initialized;
 };
 
@@ -948,6 +954,7 @@ typedef struct {
        MonoArray   *keyToken;
        guint32     versioncompat;
        MonoObject *version;
+       guint32     processor_architecture;
 } MonoReflectionAssemblyName;
 
 typedef struct {
@@ -1012,6 +1019,7 @@ typedef struct {
        gint32 nrefs;
        MonoArray *refs;
        GSList *referenced_by;
+       MonoReflectionType *owner;
 } MonoReflectionDynamicMethod; 
 
 typedef struct {
@@ -1022,8 +1030,16 @@ typedef struct {
        MonoReflectionType *return_type;
        guint32 call_conv;
        guint32 unmanaged_call_conv;
+       MonoArray *modreqs;
+       MonoArray *modopts;
 } MonoReflectionSigHelper;
 
+typedef struct {
+       MonoObject object;
+       MonoReflectionGenericClass *inst;
+       MonoReflectionFieldBuilder *fb;
+} MonoReflectionFieldOnTypeBuilderInst;
+
 enum {
        RESOURCE_LOCATION_EMBEDDED = 1,
        RESOURCE_LOCATION_ANOTHER_ASSEMBLY = 2,
@@ -1058,6 +1074,8 @@ guint32       mono_image_insert_string (MonoReflectionModuleBuilder *module, Mon
 guint32       mono_image_create_token  (MonoDynamicImage *assembly, MonoObject *obj, gboolean create_methodspec) MONO_INTERNAL;
 guint32       mono_image_create_method_token (MonoDynamicImage *assembly, MonoObject *obj, MonoArray *opt_param_types) MONO_INTERNAL;
 void          mono_image_module_basic_init (MonoReflectionModuleBuilder *module) MONO_INTERNAL;
+void          mono_image_register_token (MonoDynamicImage *assembly, guint32 token, MonoObject *obj) MONO_INTERNAL;
+void          mono_dynamic_image_free (MonoDynamicImage *image) MONO_INTERNAL;
 
 void        mono_reflection_setup_internal_class  (MonoReflectionTypeBuilder *tb) MONO_INTERNAL;
 
@@ -1094,11 +1112,14 @@ MonoArray  *mono_reflection_sighelper_get_signature_field (MonoReflectionSigHelp
 MonoReflectionMarshal* mono_reflection_marshal_from_marshal_spec (MonoDomain *domain, MonoClass *klass, MonoMarshalSpec *spec) MONO_INTERNAL;
 
 gpointer
-mono_reflection_lookup_dynamic_token (MonoImage *image, guint32 token, MonoClass **handle_class) MONO_INTERNAL;
+mono_reflection_lookup_dynamic_token (MonoImage *image, guint32 token, gboolean valid_token, MonoClass **handle_class, MonoGenericContext *context) MONO_INTERNAL;
 
 gboolean
 mono_reflection_call_is_assignable_to (MonoClass *klass, MonoClass *oklass) MONO_INTERNAL;
 
+gboolean
+mono_reflection_is_valid_dynamic_token (MonoDynamicImage *image, guint32 token) MONO_INTERNAL;
+
 void
 mono_image_build_metadata (MonoReflectionModuleBuilder *module) MONO_INTERNAL;
 
@@ -1123,6 +1144,9 @@ mono_remote_class_vtable (MonoDomain *domain, MonoRemoteClass *remote_class, Mon
 void
 mono_upgrade_remote_class (MonoDomain *domain, MonoObject *tproxy, MonoClass *klass) MONO_INTERNAL;
 
+gpointer
+mono_create_ftnptr (MonoDomain *domain, gpointer addr) MONO_INTERNAL;
+
 gpointer
 mono_get_addr_from_ftnptr (gpointer descr) MONO_INTERNAL;
 
@@ -1132,5 +1156,55 @@ mono_nullable_init (guint8 *buf, MonoObject *value, MonoClass *klass) MONO_INTER
 MonoObject*
 mono_nullable_box (guint8 *buf, MonoClass *klass) MONO_INTERNAL;
 
+#define MONO_IMT_SIZE 19
+
+typedef struct _MonoImtBuilderEntry {
+       MonoMethod *method;
+       struct _MonoImtBuilderEntry *next;
+       int vtable_slot;
+       int children;
+} MonoImtBuilderEntry;
+
+typedef struct _MonoIMTCheckItem MonoIMTCheckItem;
+
+struct _MonoIMTCheckItem {
+       MonoMethod       *method;
+       int               check_target_idx;
+       int               vtable_slot;
+       guint8           *jmp_code;
+       guint8           *code_target;
+       guint8            is_equals;
+       guint8            compare_done;
+       guint8            chunk_size;
+       guint8            short_branch;
+};
+
+typedef gpointer (*MonoImtThunkBuilder) (MonoVTable *vtable, MonoDomain *domain, MonoIMTCheckItem **imt_entries, int count);
+
+void
+mono_install_imt_thunk_builder (MonoImtThunkBuilder func) MONO_INTERNAL;
+
+void
+mono_install_imt_trampoline (gpointer tramp) MONO_INTERNAL;
+
+void
+mono_install_vtable_trampoline (gpointer tramp) MONO_INTERNAL;
+
+void
+mono_vtable_build_imt_slot (MonoVTable* vtable, int imt_slot) MONO_INTERNAL;
+
+guint32
+mono_method_get_imt_slot (MonoMethod *method) MONO_INTERNAL;
+
+typedef enum {
+       MONO_UNHANLED_POLICY_LEGACY,
+       MONO_UNHANLED_POLICY_CURRENT
+} MonoRuntimeUnhandledExceptionPolicy;
+
+MonoRuntimeUnhandledExceptionPolicy
+mono_runtime_unhandled_exception_policy_get (void) MONO_INTERNAL;
+void
+mono_runtime_unhandled_exception_policy_set (MonoRuntimeUnhandledExceptionPolicy policy) MONO_INTERNAL;
+
 #endif /* __MONO_OBJECT_INTERNALS_H__ */