2005-03-04 Zoltan Varga <vargaz@freemail.hu>
[mono.git] / mono / metadata / object-internals.h
index 64223f89fa09f5cab4d874c67cea122189777f9a..ddbac892dd0f856b2cebb1d49f74348c016ecb6f 100644 (file)
@@ -76,7 +76,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;
@@ -93,6 +94,8 @@ typedef struct {
        MonoObject object;
        gint32 length;
        MonoString *str;
+       MonoString *cached_str;
+       gint32 max_capacity;
 } MonoStringBuilder;
 
 typedef struct {
@@ -209,10 +212,12 @@ 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;
@@ -228,6 +233,10 @@ struct _MonoThread {
        gpointer *static_data;
        gpointer jit_data;
        gpointer lock_data;
+       gpointer unused1;
+       MonoAppContext *current_appcontext;
+       int stack_size;
+       MonoObject *start_obj;
        GSList *appdomain_refs;
        MonoBoolean interruption_requested;
        gpointer suspend_event;
@@ -359,6 +368,9 @@ typedef struct {
 /* 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 *
@@ -390,6 +402,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);
 
@@ -408,15 +423,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 */
 
 /*
@@ -489,7 +513,7 @@ struct _MonoReflectionMethodBody {
        MonoArray *locals;
        MonoArray *il;
        MonoBoolean init_locals;
-       guint32 sig_token;
+       guint32 local_var_sig_token;
        guint32 max_stack;
 };
 
@@ -581,11 +605,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 {
@@ -609,6 +644,8 @@ typedef struct {
        MonoString *mcookie;
        MonoString *marshaltype;
        MonoReflectionType *marshaltyperef;
+       gint32 param_num;
+       MonoBoolean has_size;
 } MonoReflectionMarshal;
 
 typedef struct {
@@ -884,6 +921,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;