2006-06-15 Zoltan Varga <vargaz@gmail.com>
[mono.git] / mono / metadata / object-internals.h
index 1ae8b35844dcc081ca891b22106ad7d766a49e8a..3b5a440c388da33423fc23476d7e984745c7634b 100644 (file)
@@ -3,6 +3,7 @@
 
 #include <mono/metadata/object.h>
 #include <mono/metadata/reflection.h>
+#include <mono/metadata/mempool.h>
 #include <mono/io-layer/io-layer.h>
 
 #if 1
@@ -76,7 +77,8 @@
        };                              }G_STMT_END
 
 
-#define mono_stringbuilder_capacity(sb) ((sb)->str->length)
+/* 16 == default capacity */
+#define mono_stringbuilder_capacity(sb) ((sb)->str ? ((sb)->str->length) : 16)
 
 typedef struct {
        MonoObject obj;
@@ -148,11 +150,14 @@ 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;
        MonoObject  *async_callback;
+       MonoObject  *execution_context;
+       MonoObject  *original_context;
 } MonoAsyncResult;
 
 typedef struct {
@@ -211,39 +216,52 @@ typedef struct {
        MonoString *filename;
        gint32 line;
        gint32 column;
+       MonoString *internal_method_name;
 } MonoStackFrame;
 
 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;
        guint32     state;
        MonoException *abort_exc;
        MonoObject *abort_state;
-       guint32 tid;
+       guint64 tid;    /* This is accessed as a gsize in the code (so it can hold a 64bit pointer on systems that need it), but needs to reserve 64 bits of space on all machines as it corresponds to a field in managed code */
        HANDLE      start_notify;
        gpointer stack_ptr;
        gpointer *static_data;
        gpointer jit_data;
        gpointer lock_data;
-       gpointer unused1;
-       gpointer unused2;
+       MonoAppContext *current_appcontext;
        int stack_size;
        MonoObject *start_obj;
        GSList *appdomain_refs;
        MonoBoolean interruption_requested;
        gpointer suspend_event;
+       gpointer suspended_event;
        gpointer resume_event;
        MonoObject *synch_lock;
        guint8* serialized_culture_info;
        guint32 serialized_culture_info_len;
        guint8* serialized_ui_culture_info;
        guint32 serialized_ui_culture_info_len;
+       MonoObject *execution_context;
+       /* 
+        * These fields are used to avoid having to increment corlib versions
+        * when a new field is added to the unmanaged MonoThread structure.
+        */
+       MonoBoolean thread_dump_requested;
+       gpointer end_stack; /* This is only used when running in the debugger. */
+       gpointer unused3;
+       gpointer unused4;
+       gpointer unused5;
+       gpointer unused6;
+       gpointer unused7;
 };
 
 typedef struct {
@@ -355,6 +373,18 @@ typedef struct {
        const void* text_info_data;
 } MonoCultureInfo;
 
+typedef struct {
+       MonoObject obj;
+       gint32 region_id;
+       MonoString *iso2name;
+       MonoString *iso3name;
+       MonoString *win3name;
+       MonoString *english_name;
+       MonoString *currency_symbol;
+       MonoString *iso_currency_symbol;
+       MonoString *currency_english_name;
+} MonoRegionInfo;
+
 typedef struct {
        MonoObject obj;
        MonoString *str;
@@ -363,14 +393,22 @@ 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);
 
+/* Used to initialize the method pointers inside vtables */
+typedef gboolean    (*MonoInitVTableFunc)    (MonoVTable *vtable);
+
 /* remoting and async support */
 
 MonoAsyncResult *
 mono_async_result_new      (MonoDomain *domain, HANDLE handle, 
-                            MonoObject *state, gpointer data);
+                            MonoObject *state, gpointer data, MonoObject *object_data);
 
 MonoWaitHandle *
 mono_wait_handle_new       (MonoDomain *domain, HANDLE handle);
@@ -397,6 +435,9 @@ mono_method_return_message_restore (MonoMethod *method, gpointer *params, MonoAr
 void
 mono_delegate_ctor         (MonoObject *this_obj, MonoObject *target, gpointer addr);
 
+void*
+mono_class_get_allocation_ftn (MonoVTable *vtable, gboolean for_box, gboolean *pass_size_in_words);
+
 void
 mono_runtime_free_method    (MonoDomain *domain, MonoMethod *method);
 
@@ -415,15 +456,24 @@ mono_install_compile_method (MonoCompileFunc func);
 void
 mono_install_free_method    (MonoFreeMethodFunc func);
 
+void
+mono_install_init_vtable    (MonoInitVTableFunc func);
+
 void
 mono_type_initialization_init (void);
 
 guint32
 mono_thread_get_tls_key    (void);
 
+gint32
+mono_thread_get_tls_offset (void);
+
 guint32
 mono_domain_get_tls_key    (void);
 
+gint32
+mono_domain_get_tls_offset (void);
+
 /* Reflection and Reflection.Emit support */
 
 /*
@@ -496,7 +546,7 @@ struct _MonoReflectionMethodBody {
        MonoArray *locals;
        MonoArray *il;
        MonoBoolean init_locals;
-       guint32 sig_token;
+       guint32 local_var_sig_token;
        guint32 max_stack;
 };
 
@@ -511,6 +561,9 @@ struct _MonoReflectionAssembly {
        MonoObject *refuse;     /* PermissionSet - for SecurityAction.RequestRefuse */
        MonoObject *granted;    /* PermissionSet - for the resolved assembly granted permissions */
        MonoObject *denied;     /* PermissionSet - for the resolved assembly denied permissions */
+       /* */
+       MonoBoolean from_byte_array;
+       MonoString *name;
 };
 
 typedef struct {
@@ -588,11 +641,22 @@ typedef struct {
        gint32 filter_offset;
 } MonoILExceptionBlock;
 
+typedef struct {
+       MonoObject object;
+       MonoReflectionType *catch_type;
+       gint32 filter_offset;
+       gint32 flags;
+       gint32 try_offset;
+       gint32 try_length;
+       gint32 handler_offset;
+       gint32 handler_length;
+} MonoReflectionExceptionHandlingClause;
+
 typedef struct {
        MonoObject object;
        MonoReflectionType *local_type;
        MonoBoolean is_pinned;
-       int local_index;
+       guint16 local_index;
 } MonoReflectionLocalVariableInfo;
 
 typedef struct {
@@ -616,6 +680,8 @@ typedef struct {
        MonoString *mcookie;
        MonoString *marshaltype;
        MonoReflectionType *marshaltyperef;
+       gint32 param_num;
+       MonoBoolean has_size;
 } MonoReflectionMarshal;
 
 typedef struct {
@@ -666,6 +732,7 @@ typedef struct {
        MonoString *dll;
        MonoString *dllentry;
        guint32 charset;
+       guint32 extra_flags;
        guint32 native_cc;
        guint32 call_conv;
        MonoBoolean init_locals;
@@ -695,6 +762,7 @@ typedef struct {
        MonoString *filename;
        guint32 attrs;
        guint32 offset;
+       MonoObject *stream;
 } MonoReflectionResource;
 
 typedef struct {
@@ -735,6 +803,7 @@ typedef struct {
        gint32 pe_kind;
        gint32 machine;
        MonoBoolean corlib_internal;
+       MonoArray *type_forwarders;
 } MonoReflectionAssemblyBuilder;
 
 typedef struct {
@@ -828,6 +897,7 @@ typedef struct {
        guint32 index;
        MonoReflectionType *base_type;
        MonoArray *iface_constraints;
+       MonoArray *cattrs;
        guint32 attrs;
 } MonoReflectionGenericParam;
 
@@ -843,19 +913,14 @@ typedef struct {
        MonoString *name;
        MonoString *codebase;
        gint32 major, minor, build, revision;
-       /* FIXME: add missing stuff */
-/*     CultureInfo cultureinfo;
-       AssemblyNameFlags flags;
-       AssemblyHashAlgorithm hashalg;
-       StrongNameKeyPair keypair;
-       AssemblyVersionCompatibility versioncompat;*/
        MonoObject  *cultureInfo;
        guint32     flags;
        guint32     hashalg;
        MonoObject  *keypair;
        MonoArray   *publicKey;
        MonoArray   *keyToken;
-       MonoObject  *versioncompat;
+       guint32     versioncompat;
+       MonoObject *version;
 } MonoReflectionAssemblyName;
 
 typedef struct {
@@ -891,6 +956,15 @@ typedef struct {
        MonoBoolean throw_on_unmappable;
 } MonoReflectionDllImportAttribute;
 
+typedef struct {
+       MonoObject object;
+       gint32 call_conv;
+       gint32 charset;
+       MonoBoolean set_last_error;
+       MonoBoolean best_fit_mapping;
+       MonoBoolean throw_on_unmappable;
+} MonoReflectionUnmanagedFunctionPointerAttribute;
+
 typedef struct {
        MonoObject object;
        MonoMethod *mhandle;
@@ -962,10 +1036,14 @@ void        mono_reflection_create_generic_class  (MonoReflectionTypeBuilder *tb
 
 MonoReflectionType* mono_reflection_create_runtime_class  (MonoReflectionTypeBuilder *tb);
 
+void        mono_reflection_get_dynamic_overrides (MonoClass *klass, MonoMethod ***overrides, int *num_overrides);
+
 void mono_reflection_create_dynamic_method (MonoReflectionDynamicMethod *m);
 
 void        mono_reflection_initialize_generic_parameter (MonoReflectionGenericParam *gparam);
 
+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);
 MonoReflectionMethod*
@@ -982,7 +1060,10 @@ MonoArray  *mono_reflection_sighelper_get_signature_field (MonoReflectionSigHelp
 MonoReflectionMarshal* mono_reflection_marshal_from_marshal_spec (MonoDomain *domain, MonoClass *klass, MonoMarshalSpec *spec);
 
 gpointer
-mono_reflection_lookup_dynamic_token (MonoImage *image, guint32 token);
+mono_reflection_lookup_dynamic_token (MonoImage *image, guint32 token, MonoClass **handle_class);
+
+gboolean
+mono_reflection_call_is_assignable_to (MonoClass *klass, MonoClass *oklass);
 
 void
 mono_image_build_metadata (MonoReflectionModuleBuilder *module);
@@ -993,6 +1074,9 @@ mono_get_constant_value_from_blob (MonoDomain* domain, MonoTypeEnum type, const
 void
 mono_release_type_locks (MonoThread *thread);
 
+char *
+mono_string_to_utf8_mp (MonoMemPool *mp, MonoString *s);
+
 MonoArray*
 mono_array_clone_in_domain (MonoDomain *domain, MonoArray *array);
 
@@ -1005,5 +1089,17 @@ mono_remote_class_vtable (MonoDomain *domain, MonoRemoteClass *remote_class, Mon
 MonoMethodSignature*
 mono_method_get_signature_full (MonoMethod *method, MonoImage *image, guint32 token, MonoGenericContext *context);
 
+void
+mono_upgrade_remote_class (MonoDomain *domain, MonoObject *tproxy, MonoClass *klass);
+
+gpointer
+mono_get_addr_from_ftnptr (gpointer descr);
+
+void
+mono_nullable_init (guint8 *buf, MonoObject *value, MonoClass *klass);
+
+MonoObject*
+mono_nullable_box (guint8 *buf, MonoClass *klass);
+
 #endif /* __MONO_OBJECT_INTERNALS_H__ */