X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Fobject-internals.h;h=ddbac892dd0f856b2cebb1d49f74348c016ecb6f;hb=5d7d39edc023af97d9b96d96199acc7f1cfea4ea;hp=7e542982073c7e323f9eafa6bccdcb66c31ee12b;hpb=7ff8f29ff29fa3f08ef305ac43ef079097323286;p=mono.git diff --git a/mono/metadata/object-internals.h b/mono/metadata/object-internals.h index 7e542982073..ddbac892dd0 100644 --- a/mono/metadata/object-internals.h +++ b/mono/metadata/object-internals.h @@ -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__ */