2005-03-04 Zoltan Varga <vargaz@freemail.hu>
[mono.git] / mono / metadata / object-internals.h
index 7e542982073c7e323f9eafa6bccdcb66c31ee12b..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 {
@@ -177,6 +180,8 @@ typedef struct {
        MonoReflectionType *class_to_proxy;     
        MonoObject *context;
        MonoObject *unwrapped_server;
+       gint32      target_domain_id;
+       MonoString *target_uri;
 } MonoRealProxy;
 
 typedef struct {
@@ -207,13 +212,15 @@ 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;
+       MonoObject **culture_info;
+       MonoObject **ui_culture_info;
        MonoBoolean threadpool_thread;
        gunichar2  *name;
        guint32     name_len;
@@ -226,11 +233,19 @@ 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;
        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;
 };
 
 typedef struct {
@@ -339,6 +354,7 @@ typedef struct {
        MonoString *win3lang;
        MonoCompareInfo *compareinfo;
        const gint32 *calendar_data;
+       const void* text_info_data;
 } MonoCultureInfo;
 
 typedef struct {
@@ -349,6 +365,12 @@ typedef struct {
        gint32 lcid;
 } MonoSortKey;
 
+/* 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 *
@@ -380,6 +402,12 @@ 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);
+
 /* runtime initialization functions */
 typedef void (*MonoExceptionFunc) (MonoException *ex);
 
@@ -392,13 +420,31 @@ mono_install_runtime_invoke (MonoInvokeFunc func);
 void       
 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 */
 
 /*
- * The followinbg structure must match the C# implementation in our corlib.
+ * The following structure must match the C# implementation in our corlib.
  */
 
 struct _MonoReflectionMethod {
@@ -408,6 +454,11 @@ struct _MonoReflectionMethod {
        MonoReflectionType *reftype;
 };
 
+typedef struct _MonoReflectionGenericMethod MonoReflectionGenericMethod;
+struct _MonoReflectionGenericMethod {
+       MonoReflectionMethod method;
+};
+
 struct _MonoDelegate {
        MonoObject object;
        MonoObject *target_type;
@@ -453,12 +504,30 @@ typedef struct {
        MonoString *NameImpl;
        gint32 PositionImpl;
        guint32 AttrsImpl;
+       MonoObject *MarshalAsImpl;
 } MonoReflectionParameter;
 
+struct _MonoReflectionMethodBody {
+       MonoObject object;
+       MonoArray *clauses;
+       MonoArray *locals;
+       MonoArray *il;
+       MonoBoolean init_locals;
+       guint32 local_var_sig_token;
+       guint32 max_stack;
+};
+
 struct _MonoReflectionAssembly {
        MonoObject object;
        MonoAssembly *assembly;
        MonoObject *resolve_event_holder;
+       /* CAS related */
+       MonoObject *evidence;   /* Evidence */
+       MonoObject *minimum;    /* PermissionSet - for SecurityAction.RequestMinimum */
+       MonoObject *optional;   /* PermissionSet - for SecurityAction.RequestOptional */
+       MonoObject *refuse;     /* PermissionSet - for SecurityAction.RequestRefuse */
+       MonoObject *granted;    /* PermissionSet - for the resolved assembly granted permissions */
+       MonoObject *denied;     /* PermissionSet - for the resolved assembly denied permissions */
 };
 
 typedef struct {
@@ -491,6 +560,7 @@ typedef struct {
        MonoReflectionMethod *remove_method;
        MonoReflectionMethod *raise_method;
        guint32 attrs;
+       MonoArray *other_methods;
 } MonoEventInfo;
 
 typedef struct {
@@ -537,9 +607,32 @@ typedef struct {
 
 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;
+       guint16 local_index;
+} MonoReflectionLocalVariableInfo;
+
+typedef struct {
+       /*
+        * Must have the same layout as MonoReflectionLocalVariableInfo, since
+        * LocalBuilder inherits from it under net 2.0.
+        */
+       MonoObject object;
        MonoReflectionType *type;
-       MonoString *name;
        MonoBoolean is_pinned;
+       guint16 local_index;
+       MonoString *name;
 } MonoReflectionLocalBuilder;
 
 typedef struct {
@@ -551,6 +644,8 @@ typedef struct {
        MonoString *mcookie;
        MonoString *marshaltype;
        MonoReflectionType *marshaltyperef;
+       gint32 param_num;
+       MonoBoolean has_size;
 } MonoReflectionMarshal;
 
 typedef struct {
@@ -604,6 +699,7 @@ typedef struct {
        guint32 native_cc;
        guint32 call_conv;
        MonoBoolean init_locals;
+       MonoGenericContainer *generic_container;
        MonoArray *generic_params;
        MonoArray *return_modreq;
        MonoArray *return_modopt;
@@ -662,6 +758,13 @@ typedef struct {
        guint32 access;
        MonoArray *loaded_modules;
        MonoArray *win32_resources;
+       /* CAS related */
+       MonoArray *permissions_minimum;
+       MonoArray *permissions_optional;
+       MonoArray *permissions_refused;
+       gint32 pe_kind;
+       gint32 machine;
+       MonoBoolean corlib_internal;
 } MonoReflectionAssemblyBuilder;
 
 typedef struct {
@@ -702,6 +805,7 @@ struct _MonoReflectionModule {
        MonoString *name;
        MonoString *scopename;
        MonoBoolean is_resource;
+       guint32 token;
 };
 
 typedef struct {
@@ -740,8 +844,10 @@ typedef struct {
        MonoReflectionModuleBuilder *module;
        gint32 class_size;
        gint32 packing_size;
+       MonoGenericContainer *generic_container;
        MonoArray *generic_params;
        MonoArray *permissions;
+       MonoReflectionType *created;
 } MonoReflectionTypeBuilder;
 
 typedef struct {
@@ -752,13 +858,11 @@ typedef struct {
        guint32 index;
        MonoReflectionType *base_type;
        MonoArray *iface_constraints;
-       MonoBoolean has_ctor_constraint;
-       MonoBoolean has_reference_type;
-       MonoBoolean has_value_type;
+       guint32 attrs;
 } MonoReflectionGenericParam;
 
-typedef struct _MonoReflectionGenericInst MonoReflectionGenericInst;
-struct _MonoReflectionGenericInst {
+typedef struct _MonoReflectionGenericClass MonoReflectionGenericClass;
+struct _MonoReflectionGenericClass {
        MonoReflectionType type;
        MonoReflectionType *generic_type;
        guint32 initialized;
@@ -804,6 +908,28 @@ typedef struct {
        MonoArray *data;
 } MonoReflectionCustomAttr;
 
+typedef struct {
+       MonoObject object;
+       gint32 call_conv;
+       gint32 charset;
+       MonoString *dll;
+       MonoString *entry_point;
+       MonoBoolean exact_spelling;
+       MonoBoolean preserve_sig;
+       MonoBoolean set_last_error;
+       MonoBoolean best_fit_mapping;
+       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;
@@ -843,11 +969,25 @@ typedef struct {
        guint32 location;
 } MonoManifestResourceInfo;
 
-void          mono_image_create_pefile (MonoReflectionModuleBuilder *module);
+/* Keep in sync with System.GenericParameterAttributes */
+typedef enum {
+       GENERIC_PARAMETER_ATTRIBUTE_NON_VARIANT         = 0,
+       GENERIC_PARAMETER_ATTRIBUTE_COVARIANT           = 1,
+       GENERIC_PARAMETER_ATTRIBUTE_CONTRAVARIANT       = 2,
+       GENERIC_PARAMETER_ATTRIBUTE_VARIANCE_MASK       = 3,
+
+       GENERIC_PARAMETER_ATTRIBUTE_NO_SPECIAL_CONSTRAINT       = 0,
+       GENERIC_PARAMETER_ATTRIBUTE_REFERENCE_TYPE_CONSTRAINT   = 4,
+       GENERIC_PARAMETER_ATTRIBUTE_VALUE_TYPE_CONSTRAINT       = 8,
+       GENERIC_PARAMETER_ATTRIBUTE_CONSTRUCTOR_CONSTRAINT      = 16,
+       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);
+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);
 
@@ -857,6 +997,8 @@ void        mono_reflection_create_internal_class (MonoReflectionTypeBuilder *tb
 
 void        mono_reflection_setup_generic_class   (MonoReflectionTypeBuilder *tb);
 
+void        mono_reflection_create_generic_class  (MonoReflectionTypeBuilder *tb);
+
 MonoReflectionType* mono_reflection_create_runtime_class  (MonoReflectionTypeBuilder *tb);
 
 void mono_reflection_create_dynamic_method (MonoReflectionDynamicMethod *m);
@@ -868,7 +1010,7 @@ mono_reflection_bind_generic_parameters (MonoReflectionType *type, int type_argc
 MonoReflectionMethod*
 mono_reflection_bind_generic_method_parameters (MonoReflectionMethod *method, MonoArray *types);
 void
-mono_reflection_generic_inst_initialize (MonoReflectionGenericInst *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);
 MonoReflectionEvent *
 mono_reflection_event_builder_get_event_info (MonoReflectionTypeBuilder *tb, MonoReflectionEventBuilder *eb);
 
@@ -876,11 +1018,31 @@ MonoArray  *mono_reflection_sighelper_get_signature_local (MonoReflectionSigHelp
 
 MonoArray  *mono_reflection_sighelper_get_signature_field (MonoReflectionSigHelper *sig);
 
+MonoReflectionMarshal* mono_reflection_marshal_from_marshal_spec (MonoDomain *domain, MonoClass *klass, MonoMarshalSpec *spec);
+
 gpointer
 mono_reflection_lookup_dynamic_token (MonoImage *image, guint32 token);
 
 void
 mono_image_build_metadata (MonoReflectionModuleBuilder *module);
 
+int
+mono_get_constant_value_from_blob (MonoDomain* domain, MonoTypeEnum type, const char *blob, void *value);
+
+void
+mono_release_type_locks (MonoThread *thread);
+
+MonoArray*
+mono_array_clone_in_domain (MonoDomain *domain, MonoArray *array);
+
+void
+mono_array_full_copy (MonoArray *src, MonoArray *dest);
+
+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);
+
 #endif /* __MONO_OBJECT_INTERNALS_H__ */