X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Fobject-internals.h;h=e62d3883c2ed4e411e85503684651abebdba7756;hb=1a94285f85c1ba875655732e38653dec79081770;hp=c23f6b1ab4316c302d16a5506901b5dce1d13cd6;hpb=f73e0d5c67f0d26e85b92fc4b75fc48783f20d64;p=mono.git diff --git a/mono/metadata/object-internals.h b/mono/metadata/object-internals.h index c23f6b1ab43..e62d3883c2e 100644 --- a/mono/metadata/object-internals.h +++ b/mono/metadata/object-internals.h @@ -3,7 +3,9 @@ #include #include +#include #include +#include "mono/utils/mono-compiler.h" #if 1 #ifdef __GNUC__ @@ -127,6 +129,7 @@ struct _MonoException { gint32 remote_stack_index; gint32 hresult; MonoString *source; + MonoObject *_data; }; typedef struct { @@ -149,7 +152,8 @@ typedef struct { MonoObject *async_state; MonoObject *handle; MonoObject *async_delegate; - gpointer data; + gpointer *data; + MonoObject *object_data; MonoBoolean sync_completed; MonoBoolean completed; MonoBoolean endinvoke_called; @@ -184,8 +188,23 @@ typedef struct { MonoObject *unwrapped_server; gint32 target_domain_id; MonoString *target_uri; + MonoObject *object_identity; + MonoObject *obj_TP; + MonoObject *stub_data; } MonoRealProxy; +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; @@ -221,8 +240,8 @@ struct _MonoThread { MonoObject obj; int lock_thread_id; /* to be used as the pre-shifted thread id in thin locks */ HANDLE handle; - MonoObject **culture_info; - MonoObject **ui_culture_info; + MonoArray *cached_culture_info; + gpointer unused1; MonoBoolean threadpool_thread; gunichar2 *name; guint32 name_len; @@ -253,11 +272,13 @@ struct _MonoThread { * These fields are used to avoid having to increment corlib versions * when a new field is added to the unmanaged MonoThread structure. */ - gpointer unused1; - gpointer unused2; - gpointer unused3; - gpointer unused4; - gpointer unused5; + MonoBoolean thread_dump_requested; + gpointer end_stack; /* This is only used when running in the debugger. */ + MonoBoolean thread_interrupt_requested; + 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; }; @@ -301,6 +322,9 @@ typedef struct { MonoArray *LongDatePatterns; MonoArray *ShortTimePatterns; MonoArray *LongTimePatterns; + MonoArray *MonthDayPatterns; + MonoArray *YearMonthPatterns; + MonoArray *shortDayNames; } MonoDateTimeFormatInfo; typedef struct @@ -366,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; @@ -391,6 +416,11 @@ typedef struct { gint32 lcid; } MonoSortKey; +typedef struct { + MonoObject object; + guint16 intType; +} MonoInterfaceTypeAttribute; + /* used to free a dynamic method */ typedef void (*MonoFreeMethodFunc) (MonoDomain *domain, MonoMethod *method); @@ -401,71 +431,77 @@ typedef gboolean (*MonoInitVTableFunc) (MonoVTable *vtable); MonoAsyncResult * mono_async_result_new (MonoDomain *domain, HANDLE handle, - MonoObject *state, gpointer data); + MonoObject *state, gpointer data, MonoObject *object_data) MONO_INTERNAL; MonoWaitHandle * -mono_wait_handle_new (MonoDomain *domain, HANDLE handle); +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); + MonoReflectionMethod *method, MonoArray *out_args) MONO_INTERNAL; MonoObject * mono_remoting_invoke (MonoObject *real_proxy, MonoMethodMessage *msg, - MonoObject **exc, MonoArray **out_args); + MonoObject **exc, MonoArray **out_args) MONO_INTERNAL; MonoObject * mono_message_invoke (MonoObject *target, MonoMethodMessage *msg, - MonoObject **exc, MonoArray **out_args); + MonoObject **exc, MonoArray **out_args) MONO_INTERNAL; MonoMethodMessage * mono_method_call_message_new (MonoMethod *method, gpointer *params, MonoMethod *invoke, - MonoDelegate **cb, MonoObject **state); + MonoDelegate **cb, MonoObject **state) MONO_INTERNAL; void -mono_method_return_message_restore (MonoMethod *method, gpointer *params, MonoArray *out_args); +mono_method_return_message_restore (MonoMethod *method, gpointer *params, MonoArray *out_args) MONO_INTERNAL; void -mono_delegate_ctor (MonoObject *this_obj, MonoObject *target, gpointer addr); +mono_delegate_ctor (MonoObject *this_obj, MonoObject *target, gpointer addr) MONO_INTERNAL; void* -mono_class_get_allocation_ftn (MonoVTable *vtable, gboolean for_box, gboolean *pass_size_in_words); +mono_class_get_allocation_ftn (MonoVTable *vtable, gboolean for_box, gboolean *pass_size_in_words) MONO_INTERNAL; void -mono_runtime_free_method (MonoDomain *domain, MonoMethod *method); +mono_runtime_free_method (MonoDomain *domain, MonoMethod *method) MONO_INTERNAL; /* runtime initialization functions */ typedef void (*MonoExceptionFunc) (MonoException *ex); void -mono_install_handler (MonoExceptionFunc func); +mono_install_handler (MonoExceptionFunc func) MONO_INTERNAL; void -mono_install_runtime_invoke (MonoInvokeFunc func); +mono_install_runtime_invoke (MonoInvokeFunc func) MONO_INTERNAL; void -mono_install_compile_method (MonoCompileFunc func); +mono_install_compile_method (MonoCompileFunc func) MONO_INTERNAL; void -mono_install_free_method (MonoFreeMethodFunc func); +mono_install_free_method (MonoFreeMethodFunc func) MONO_INTERNAL; void -mono_install_init_vtable (MonoInitVTableFunc func); +mono_install_init_vtable (MonoInitVTableFunc func) MONO_INTERNAL; void -mono_type_initialization_init (void); +mono_type_initialization_init (void) MONO_INTERNAL; + +void +mono_type_initialization_cleanup (void) MONO_INTERNAL; guint32 -mono_thread_get_tls_key (void); +mono_thread_get_tls_key (void) MONO_INTERNAL; gint32 -mono_thread_get_tls_offset (void); +mono_thread_get_tls_offset (void) MONO_INTERNAL; guint32 -mono_domain_get_tls_key (void); +mono_domain_get_tls_key (void) MONO_INTERNAL; gint32 -mono_domain_get_tls_offset (void); +mono_domain_get_tls_offset (void) MONO_INTERNAL; /* Reflection and Reflection.Emit support */ @@ -487,12 +523,14 @@ struct _MonoReflectionGenericMethod { struct _MonoDelegate { MonoObject object; - MonoObject *target_type; + gpointer method_ptr; + gpointer invoke_impl; MonoObject *target; + MonoObject *target_type; MonoString *method_name; - gpointer method_ptr; gpointer delegate_trampoline; MonoReflectionMethod *method_info; + MonoReflectionMethod *original_method_info; }; typedef struct _MonoMulticastDelegate MonoMulticastDelegate; @@ -556,6 +594,7 @@ struct _MonoReflectionAssembly { MonoObject *denied; /* PermissionSet - for the resolved assembly denied permissions */ /* */ MonoBoolean from_byte_array; + MonoString *name; }; typedef struct { @@ -754,6 +793,7 @@ typedef struct { MonoString *filename; guint32 attrs; guint32 offset; + MonoObject *stream; } MonoReflectionResource; typedef struct { @@ -794,6 +834,7 @@ typedef struct { gint32 pe_kind; gint32 machine; MonoBoolean corlib_internal; + MonoArray *type_forwarders; } MonoReflectionAssemblyBuilder; typedef struct { @@ -955,6 +996,11 @@ typedef struct { MonoBoolean throw_on_unmappable; } MonoReflectionUnmanagedFunctionPointerAttribute; +typedef struct { + MonoObject object; + MonoString *guid; +} MonoReflectionGuidAttribute; + typedef struct { MonoObject object; MonoMethod *mhandle; @@ -969,6 +1015,7 @@ typedef struct { MonoReflectionILGen *ilgen; gint32 nrefs; MonoArray *refs; + GSList *referenced_by; } MonoReflectionDynamicMethod; typedef struct { @@ -1008,79 +1055,117 @@ typedef enum { GENERIC_PARAMETER_ATTRIBUTE_SPECIAL_CONSTRAINTS_MASK = 28 } GenericParameterAttributes; -void mono_image_create_pefile (MonoReflectionModuleBuilder *module, HANDLE file); -void mono_image_basic_init (MonoReflectionAssemblyBuilder *assembly); -MonoReflectionModule * mono_image_load_module (MonoReflectionAssemblyBuilder *assembly, MonoString *file_name); -guint32 mono_image_insert_string (MonoReflectionModuleBuilder *module, MonoString *str); -guint32 mono_image_create_token (MonoDynamicImage *assembly, MonoObject *obj, gboolean create_methodspec); -guint32 mono_image_create_method_token (MonoDynamicImage *assembly, MonoObject *obj, MonoArray *opt_param_types); -void mono_image_module_basic_init (MonoReflectionModuleBuilder *module); +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_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; +void mono_image_module_basic_init (MonoReflectionModuleBuilder *module) MONO_INTERNAL; -void mono_reflection_setup_internal_class (MonoReflectionTypeBuilder *tb); +void mono_reflection_setup_internal_class (MonoReflectionTypeBuilder *tb) MONO_INTERNAL; -void mono_reflection_create_internal_class (MonoReflectionTypeBuilder *tb); +void mono_reflection_create_internal_class (MonoReflectionTypeBuilder *tb) MONO_INTERNAL; -void mono_reflection_setup_generic_class (MonoReflectionTypeBuilder *tb); +void mono_reflection_setup_generic_class (MonoReflectionTypeBuilder *tb) MONO_INTERNAL; -void mono_reflection_create_generic_class (MonoReflectionTypeBuilder *tb); +void mono_reflection_create_generic_class (MonoReflectionTypeBuilder *tb) MONO_INTERNAL; -MonoReflectionType* mono_reflection_create_runtime_class (MonoReflectionTypeBuilder *tb); +MonoReflectionType* mono_reflection_create_runtime_class (MonoReflectionTypeBuilder *tb) MONO_INTERNAL; -void mono_reflection_get_dynamic_overrides (MonoClass *klass, MonoMethod ***overrides, int *num_overrides); +void mono_reflection_get_dynamic_overrides (MonoClass *klass, MonoMethod ***overrides, int *num_overrides) MONO_INTERNAL; -void mono_reflection_create_dynamic_method (MonoReflectionDynamicMethod *m); +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); +void mono_reflection_initialize_generic_parameter (MonoReflectionGenericParam *gparam) MONO_INTERNAL; +MonoClass* +mono_class_bind_generic_parameters (MonoClass *klass, int type_argc, MonoType **types, gboolean is_dynamic) MONO_INTERNAL; MonoType* -mono_class_bind_generic_parameters (MonoType *type, int type_argc, MonoType **types); -MonoType* -mono_reflection_bind_generic_parameters (MonoReflectionType *type, int type_argc, MonoType **types); +mono_reflection_bind_generic_parameters (MonoReflectionType *type, int type_argc, MonoType **types) MONO_INTERNAL; MonoReflectionMethod* -mono_reflection_bind_generic_method_parameters (MonoReflectionMethod *method, MonoArray *types); +mono_reflection_bind_generic_method_parameters (MonoReflectionMethod *method, MonoArray *types) MONO_INTERNAL; void -mono_reflection_generic_class_initialize (MonoReflectionGenericClass *type, MonoArray *methods, MonoArray *ctors, MonoArray *fields, MonoArray *properties, MonoArray *events); +mono_reflection_generic_class_initialize (MonoReflectionGenericClass *type, MonoArray *methods, MonoArray *ctors, MonoArray *fields, MonoArray *properties, MonoArray *events) MONO_INTERNAL; MonoReflectionEvent * -mono_reflection_event_builder_get_event_info (MonoReflectionTypeBuilder *tb, MonoReflectionEventBuilder *eb); +mono_reflection_event_builder_get_event_info (MonoReflectionTypeBuilder *tb, MonoReflectionEventBuilder *eb) MONO_INTERNAL; -MonoArray *mono_reflection_sighelper_get_signature_local (MonoReflectionSigHelper *sig); +MonoArray *mono_reflection_sighelper_get_signature_local (MonoReflectionSigHelper *sig) MONO_INTERNAL; -MonoArray *mono_reflection_sighelper_get_signature_field (MonoReflectionSigHelper *sig); +MonoArray *mono_reflection_sighelper_get_signature_field (MonoReflectionSigHelper *sig) MONO_INTERNAL; -MonoReflectionMarshal* mono_reflection_marshal_from_marshal_spec (MonoDomain *domain, MonoClass *klass, MonoMarshalSpec *spec); +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_reflection_lookup_dynamic_token (MonoImage *image, guint32 token, MonoClass **handle_class, MonoGenericContext *context) MONO_INTERNAL; gboolean -mono_reflection_call_is_assignable_to (MonoClass *klass, MonoClass *oklass); +mono_reflection_call_is_assignable_to (MonoClass *klass, MonoClass *oklass) MONO_INTERNAL; void -mono_image_build_metadata (MonoReflectionModuleBuilder *module); +mono_image_build_metadata (MonoReflectionModuleBuilder *module) MONO_INTERNAL; int -mono_get_constant_value_from_blob (MonoDomain* domain, MonoTypeEnum type, const char *blob, void *value); +mono_get_constant_value_from_blob (MonoDomain* domain, MonoTypeEnum type, const char *blob, void *value) MONO_INTERNAL; void -mono_release_type_locks (MonoThread *thread); +mono_release_type_locks (MonoThread *thread) MONO_INTERNAL; + +char * +mono_string_to_utf8_mp (MonoMemPool *mp, MonoString *s) MONO_INTERNAL; MonoArray* -mono_array_clone_in_domain (MonoDomain *domain, MonoArray *array); +mono_array_clone_in_domain (MonoDomain *domain, MonoArray *array) MONO_INTERNAL; void -mono_array_full_copy (MonoArray *src, MonoArray *dest); +mono_array_full_copy (MonoArray *src, MonoArray *dest) MONO_INTERNAL; gpointer -mono_remote_class_vtable (MonoDomain *domain, MonoRemoteClass *remote_class, MonoRealProxy *real_proxy); - -MonoMethodSignature* -mono_method_get_signature_full (MonoMethod *method, MonoImage *image, guint32 token, MonoGenericContext *context); +mono_remote_class_vtable (MonoDomain *domain, MonoRemoteClass *remote_class, MonoRealProxy *real_proxy) MONO_INTERNAL; void -mono_upgrade_remote_class (MonoDomain *domain, MonoObject *tproxy, MonoClass *klass); +mono_upgrade_remote_class (MonoDomain *domain, MonoObject *tproxy, MonoClass *klass) MONO_INTERNAL; gpointer -mono_get_addr_from_ftnptr (gpointer descr); +mono_get_addr_from_ftnptr (gpointer descr) MONO_INTERNAL; + +void +mono_nullable_init (guint8 *buf, MonoObject *value, MonoClass *klass) MONO_INTERNAL; + +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; + +guint32 +mono_method_get_imt_slot (MonoMethod *method) MONO_INTERNAL; #endif /* __MONO_OBJECT_INTERNALS_H__ */