#include <mono/metadata/reflection.h>
#include <mono/metadata/mempool.h>
#include <mono/io-layer/io-layer.h>
+#include "mono/utils/mono-compiler.h"
#if 1
#ifdef __GNUC__
gint32 remote_stack_index;
gint32 hresult;
MonoString *source;
+ MonoObject *_data;
};
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;
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;
*/
MonoBoolean thread_dump_requested;
gpointer end_stack; /* This is only used when running in the debugger. */
- gpointer unused3;
- gpointer unused4;
- gpointer unused5;
+ 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;
};
MonoArray *LongDatePatterns;
MonoArray *ShortTimePatterns;
MonoArray *LongTimePatterns;
+ MonoArray *MonthDayPatterns;
+ MonoArray *YearMonthPatterns;
+ MonoArray *shortDayNames;
} MonoDateTimeFormatInfo;
typedef struct
MonoString *iso2lang;
MonoString *icu_name;
MonoString *win3lang;
+ MonoString *territory;
MonoCompareInfo *compareinfo;
const gint32 *calendar_data;
const void* text_info_data;
MonoAsyncResult *
mono_async_result_new (MonoDomain *domain, HANDLE handle,
- MonoObject *state, gpointer data, MonoObject *object_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_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 */
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;
MonoArray *keyToken;
guint32 versioncompat;
MonoObject *version;
+ guint32 processor_architecture;
} MonoReflectionAssemblyName;
typedef struct {
MonoBoolean throw_on_unmappable;
} MonoReflectionUnmanagedFunctionPointerAttribute;
+typedef struct {
+ MonoObject object;
+ MonoString *guid;
+} MonoReflectionGuidAttribute;
+
typedef struct {
MonoObject object;
MonoMethod *mhandle;
MonoReflectionILGen *ilgen;
gint32 nrefs;
MonoArray *refs;
+ GSList *referenced_by;
+ MonoReflectionType *owner;
} MonoReflectionDynamicMethod;
typedef struct {
MonoReflectionType *return_type;
guint32 call_conv;
guint32 unmanaged_call_conv;
+ MonoArray *modreqs;
+ MonoArray *modopts;
} MonoReflectionSigHelper;
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, gboolean valid_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_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_create_ftnptr (MonoDomain *domain, gpointer addr) MONO_INTERNAL;
+
+gpointer
+mono_get_addr_from_ftnptr (gpointer descr) MONO_INTERNAL;
void
-mono_nullable_init (guint8 *buf, MonoObject *value, MonoClass *klass);
+mono_nullable_init (guint8 *buf, MonoObject *value, MonoClass *klass) MONO_INTERNAL;
MonoObject*
-mono_nullable_box (guint8 *buf, MonoClass *klass);
+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__ */