Fix date.
[mono.git] / mono / metadata / object-internals.h
index 1ff484a2fd3dec4019a0016892cdf79c61a8240c..75a2b3ad56674a40e154beb8d71cc07417b5379d 100644 (file)
@@ -129,6 +129,7 @@ struct _MonoException {
        gint32      remote_stack_index;
        gint32      hresult;
        MonoString *source;
+       MonoObject *_data;
 };
 
 typedef struct {
@@ -192,16 +193,18 @@ typedef struct {
        MonoObject *stub_data;
 } MonoRealProxy;
 
-typedef struct {
-       MonoRealProxy real_proxy;
-       MonoObject *com_object;
-} MonoComInteropProxy;
-
 typedef struct {
        MonoMarshalByRefObject object;
+       gpointer iunknown;
        GHashTable* itf_hash;
 } MonoComObject;
 
+typedef struct {
+       MonoRealProxy real_proxy;
+       MonoComObject *com_object;
+       gint32 ref_count;
+} MonoComInteropProxy;
+
 typedef struct {
        MonoObject       object;
        MonoRealProxy   *rp;    
@@ -259,7 +262,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;
@@ -272,8 +275,10 @@ struct _MonoThread {
        MonoBoolean thread_dump_requested;
        gpointer end_stack; /* This is only used when running in the debugger. */
        MonoBoolean thread_interrupt_requested;
-       gpointer unused4;
-       gpointer unused5;
+       guint8  apartment_state;
+       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. */
        gpointer unused6;
        gpointer unused7;
 };
@@ -317,6 +322,9 @@ typedef struct {
        MonoArray *LongDatePatterns;
        MonoArray *ShortTimePatterns;
        MonoArray *LongTimePatterns;
+       MonoArray *MonthDayPatterns;
+       MonoArray *YearMonthPatterns;
+       MonoArray *shortDayNames;
 } MonoDateTimeFormatInfo;
 
 typedef struct 
@@ -382,6 +390,7 @@ typedef struct {
        MonoString *iso2lang;
        MonoString *icu_name;
        MonoString *win3lang;
+       MonoString *territory;
        MonoCompareInfo *compareinfo;
        const gint32 *calendar_data;
        const void* text_info_data;
@@ -427,6 +436,9 @@ mono_async_result_new           (MonoDomain *domain, HANDLE handle,
 MonoWaitHandle *
 mono_wait_handle_new       (MonoDomain *domain, HANDLE handle) MONO_INTERNAL;
 
+HANDLE
+mono_wait_handle_get_handle (MonoWaitHandle *handle) MONO_INTERNAL;
+
 void
 mono_message_init          (MonoDomain *domain, MonoMethodMessage *this_obj, 
                             MonoReflectionMethod *method, MonoArray *out_args) MONO_INTERNAL;
@@ -511,12 +523,15 @@ struct _MonoReflectionGenericMethod {
 
 struct _MonoDelegate {
        MonoObject object;
-       MonoObject *target_type;
+       gpointer method_ptr;
+       gpointer invoke_impl;
        MonoObject *target;
+       MonoMethod *method;
+       MonoObject *target_type;
        MonoString *method_name;
-       gpointer method_ptr;
        gpointer delegate_trampoline;
        MonoReflectionMethod *method_info;
+       MonoReflectionMethod *original_method_info;
 };
 
 typedef struct _MonoMulticastDelegate MonoMulticastDelegate;
@@ -938,6 +953,7 @@ typedef struct {
        MonoArray   *keyToken;
        guint32     versioncompat;
        MonoObject *version;
+       guint32     processor_architecture;
 } MonoReflectionAssemblyName;
 
 typedef struct {
@@ -982,6 +998,11 @@ typedef struct {
        MonoBoolean throw_on_unmappable;
 } MonoReflectionUnmanagedFunctionPointerAttribute;
 
+typedef struct {
+       MonoObject object;
+       MonoString *guid;
+} MonoReflectionGuidAttribute;
+
 typedef struct {
        MonoObject object;
        MonoMethod *mhandle;
@@ -996,6 +1017,8 @@ typedef struct {
        MonoReflectionILGen *ilgen;
        gint32 nrefs;
        MonoArray *refs;
+       GSList *referenced_by;
+       MonoReflectionType *owner;
 } MonoReflectionDynamicMethod; 
 
 typedef struct {
@@ -1006,6 +1029,8 @@ typedef struct {
        MonoReflectionType *return_type;
        guint32 call_conv;
        guint32 unmanaged_call_conv;
+       MonoArray *modreqs;
+       MonoArray *modopts;
 } MonoReflectionSigHelper;
 
 enum {
@@ -1037,7 +1062,7 @@ typedef enum {
 
 void          mono_image_create_pefile (MonoReflectionModuleBuilder *module, HANDLE file) MONO_INTERNAL;
 void          mono_image_basic_init (MonoReflectionAssemblyBuilder *assembly) MONO_INTERNAL;
-MonoReflectionModule * mono_image_load_module (MonoReflectionAssemblyBuilder *assembly, MonoString *file_name) MONO_INTERNAL;
+MonoReflectionModule * mono_image_load_module_dynamic (MonoReflectionAssemblyBuilder *assembly, MonoString *file_name) MONO_INTERNAL;
 guint32       mono_image_insert_string (MonoReflectionModuleBuilder *module, MonoString *str) MONO_INTERNAL;
 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;
@@ -1056,11 +1081,12 @@ MonoReflectionType* mono_reflection_create_runtime_class  (MonoReflectionTypeBui
 void        mono_reflection_get_dynamic_overrides (MonoClass *klass, MonoMethod ***overrides, int *num_overrides) MONO_INTERNAL;
 
 void mono_reflection_create_dynamic_method (MonoReflectionDynamicMethod *m) MONO_INTERNAL;
+void mono_reflection_destroy_dynamic_method (MonoReflectionDynamicMethod *mb) MONO_INTERNAL;
 
 void        mono_reflection_initialize_generic_parameter (MonoReflectionGenericParam *gparam) MONO_INTERNAL;
 
-MonoType*
-mono_class_bind_generic_parameters (MonoType *type, int type_argc, MonoType **types) MONO_INTERNAL;
+MonoClass*
+mono_class_bind_generic_parameters (MonoClass *klass, int type_argc, MonoType **types, gboolean is_dynamic) MONO_INTERNAL;
 MonoType*
 mono_reflection_bind_generic_parameters (MonoReflectionType *type, int type_argc, MonoType **types) MONO_INTERNAL;
 MonoReflectionMethod*
@@ -1077,7 +1103,7 @@ 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;
@@ -1106,6 +1132,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;
 
@@ -1115,5 +1144,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__ */