X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Fmetadata.h;h=1c611f430070d99e83fc233d765162e3dcbffa6f;hb=d455c0d23462d34352e4accd9953b1f487351c7f;hp=2237da24aa82e961f2dfea8acb3a6591524e31e1;hpb=706401aecd199be3a103883bda806a22154ced6a;p=mono.git diff --git a/mono/metadata/metadata.h b/mono/metadata/metadata.h index 2237da24aa8..1c611f43007 100644 --- a/mono/metadata/metadata.h +++ b/mono/metadata/metadata.h @@ -10,38 +10,14 @@ MONO_BEGIN_DECLS -/* - * When embedding, you have to define MONO_ZERO_LEN_ARRAY before including any - * other Mono header file if you use a different compiler from the one used to - * build Mono. - */ -#ifndef MONO_ZERO_LEN_ARRAY -#ifdef __GNUC__ -#define MONO_ZERO_LEN_ARRAY 0 -#else -#define MONO_ZERO_LEN_ARRAY 1 -#endif -#endif - -#define MONO_TYPE_ISSTRUCT(t) (!(t)->byref && (((t)->type == MONO_TYPE_VALUETYPE && \ - !(t)->data.klass->enumtype) || ((t)->type == MONO_TYPE_TYPEDBYREF) || \ - (((t)->type == MONO_TYPE_GENERICINST) && mono_metadata_generic_class_is_valuetype ((t)->data.generic_class) && !(t)->data.generic_class->container_class->enumtype))) - -#define MONO_TYPE_IS_VOID(t) ((t) && ((t)->type == MONO_TYPE_VOID) && !(t)->byref) -#define MONO_TYPE_IS_POINTER(t) ((t) && (((t)->byref || ((t)->type == MONO_TYPE_I) || (t)->type == MONO_TYPE_STRING) || ((t)->type == MONO_TYPE_SZARRAY) || ((t)->type == MONO_TYPE_CLASS) || ((t)->type == MONO_TYPE_CLASS) || ((t)->type == MONO_TYPE_OBJECT) || ((t)->type == MONO_TYPE_ARRAY) || ((t)->type == MONO_TYPE_PTR))) - -#define MONO_TYPE_IS_REFERENCE(t) ((t) && \ - ((((t)->type == MONO_TYPE_STRING) || \ - ((t)->type == MONO_TYPE_SZARRAY) || \ - ((t)->type == MONO_TYPE_CLASS) || \ - ((t)->type == MONO_TYPE_OBJECT) || \ - ((t)->type == MONO_TYPE_ARRAY)) || \ - (((t)->type == MONO_TYPE_GENERICINST) && \ - !mono_metadata_generic_class_is_valuetype ((t)->data.generic_class)))) - -#define MONO_CLASS_IS_INTERFACE(c) ((c->flags & TYPE_ATTRIBUTE_INTERFACE) || (c->byval_arg.type == MONO_TYPE_VAR) || (c->byval_arg.type == MONO_TYPE_MVAR)) - -#define MONO_CLASS_IS_IMPORT(c) ((c->flags & TYPE_ATTRIBUTE_IMPORT)) +#define MONO_TYPE_ISSTRUCT(t) mono_type_is_struct (t) +#define MONO_TYPE_IS_VOID(t) mono_type_is_void (t) +#define MONO_TYPE_IS_POINTER(t) mono_type_is_pointer (t) +#define MONO_TYPE_IS_REFERENCE(t) mono_type_is_reference (t) + +#define MONO_CLASS_IS_INTERFACE(c) ((mono_class_get_flags (c) & TYPE_ATTRIBUTE_INTERFACE) || (c->byval_arg.type == MONO_TYPE_VAR) || (c->byval_arg.type == MONO_TYPE_MVAR)) + +#define MONO_CLASS_IS_IMPORT(c) ((mono_class_get_flags (c) & TYPE_ATTRIBUTE_IMPORT)) typedef struct _MonoClass MonoClass; typedef struct _MonoDomain MonoDomain; @@ -100,6 +76,9 @@ typedef enum { MONO_NATIVE_LPSTRUCT = 0x2b, MONO_NATIVE_CUSTOM = 0x2c, MONO_NATIVE_ERROR = 0x2d, + // TODO: MONO_NATIVE_IINSPECTABLE = 0x2e + // TODO: MONO_NATIVE_HSTRING = 0x2f + MONO_NATIVE_UTF8STR = 0x30, MONO_NATIVE_MAX = 0x50 /* no info */ } MonoMarshalNative; @@ -186,9 +165,16 @@ typedef enum { MONO_MARSHAL_FREE_ARRAY, MONO_MARSHAL_CONV_BSTR_STR, MONO_MARSHAL_CONV_SAFEHANDLE, - MONO_MARSHAL_CONV_HANDLEREF + MONO_MARSHAL_CONV_HANDLEREF, + MONO_MARSHAL_CONV_STR_UTF8STR, + MONO_MARSHAL_CONV_SB_UTF8STR, + MONO_MARSHAL_CONV_UTF8STR_STR, + MONO_MARSHAL_CONV_UTF8STR_SB, + MONO_MARSHAL_CONV_FIXED_BUFFER } MonoMarshalConv; +#define MONO_MARSHAL_CONV_INVALID ((MonoMarshalConv)-1) + typedef struct { MonoMarshalNative native; union { @@ -201,6 +187,7 @@ typedef struct { struct { char *custom_name; char *cookie; + MonoImage *image; } custom_data; struct { MonoMarshalVariant elem_type; @@ -209,14 +196,14 @@ typedef struct { } data; } MonoMarshalSpec; -void mono_metadata_init (void); +MONO_API void mono_metadata_init (void); -void mono_metadata_decode_row (const MonoTableInfo *t, +MONO_API void mono_metadata_decode_row (const MonoTableInfo *t, int idx, uint32_t *res, int res_size); -uint32_t mono_metadata_decode_row_col (const MonoTableInfo *t, +MONO_API uint32_t mono_metadata_decode_row_col (const MonoTableInfo *t, int idx, unsigned int col); @@ -227,61 +214,61 @@ uint32_t mono_metadata_decode_row_col (const MonoTableInfo *t, #define mono_metadata_table_size(bitfield,table) ((((bitfield) >> ((table)*2)) & 0x3) + 1) #define mono_metadata_table_count(bitfield) ((bitfield) >> 24) -int mono_metadata_compute_size (MonoImage *meta, +MONO_API int mono_metadata_compute_size (MonoImage *meta, int tableindex, uint32_t *result_bitfield); /* * */ -const char *mono_metadata_locate (MonoImage *meta, int table, int idx); -const char *mono_metadata_locate_token (MonoImage *meta, uint32_t token); +MONO_API const char *mono_metadata_locate (MonoImage *meta, int table, int idx); +MONO_API const char *mono_metadata_locate_token (MonoImage *meta, uint32_t token); -const char *mono_metadata_string_heap (MonoImage *meta, uint32_t table_index); -const char *mono_metadata_blob_heap (MonoImage *meta, uint32_t table_index); -const char *mono_metadata_user_string (MonoImage *meta, uint32_t table_index); -const char *mono_metadata_guid_heap (MonoImage *meta, uint32_t table_index); +MONO_API const char *mono_metadata_string_heap (MonoImage *meta, uint32_t table_index); +MONO_API const char *mono_metadata_blob_heap (MonoImage *meta, uint32_t table_index); +MONO_API const char *mono_metadata_user_string (MonoImage *meta, uint32_t table_index); +MONO_API const char *mono_metadata_guid_heap (MonoImage *meta, uint32_t table_index); -uint32_t mono_metadata_typedef_from_field (MonoImage *meta, uint32_t table_index); -uint32_t mono_metadata_typedef_from_method (MonoImage *meta, uint32_t table_index); -uint32_t mono_metadata_nested_in_typedef (MonoImage *meta, uint32_t table_index); -uint32_t mono_metadata_nesting_typedef (MonoImage *meta, uint32_t table_index, uint32_t start_index); +MONO_API uint32_t mono_metadata_typedef_from_field (MonoImage *meta, uint32_t table_index); +MONO_API uint32_t mono_metadata_typedef_from_method (MonoImage *meta, uint32_t table_index); +MONO_API uint32_t mono_metadata_nested_in_typedef (MonoImage *meta, uint32_t table_index); +MONO_API uint32_t mono_metadata_nesting_typedef (MonoImage *meta, uint32_t table_index, uint32_t start_index); -MonoClass** mono_metadata_interfaces_from_typedef (MonoImage *meta, uint32_t table_index, unsigned int *count); +MONO_API MonoClass** mono_metadata_interfaces_from_typedef (MonoImage *meta, uint32_t table_index, unsigned int *count); -uint32_t mono_metadata_events_from_typedef (MonoImage *meta, uint32_t table_index, unsigned int *end_idx); -uint32_t mono_metadata_methods_from_event (MonoImage *meta, uint32_t table_index, unsigned int *end); -uint32_t mono_metadata_properties_from_typedef (MonoImage *meta, uint32_t table_index, unsigned int *end); -uint32_t mono_metadata_methods_from_property (MonoImage *meta, uint32_t table_index, unsigned int *end); -uint32_t mono_metadata_packing_from_typedef (MonoImage *meta, uint32_t table_index, uint32_t *packing, uint32_t *size); -const char* mono_metadata_get_marshal_info (MonoImage *meta, uint32_t idx, mono_bool is_field); -uint32_t mono_metadata_custom_attrs_from_index (MonoImage *meta, uint32_t cattr_index); +MONO_API uint32_t mono_metadata_events_from_typedef (MonoImage *meta, uint32_t table_index, unsigned int *end_idx); +MONO_API uint32_t mono_metadata_methods_from_event (MonoImage *meta, uint32_t table_index, unsigned int *end); +MONO_API uint32_t mono_metadata_properties_from_typedef (MonoImage *meta, uint32_t table_index, unsigned int *end); +MONO_API uint32_t mono_metadata_methods_from_property (MonoImage *meta, uint32_t table_index, unsigned int *end); +MONO_API uint32_t mono_metadata_packing_from_typedef (MonoImage *meta, uint32_t table_index, uint32_t *packing, uint32_t *size); +MONO_API const char* mono_metadata_get_marshal_info (MonoImage *meta, uint32_t idx, mono_bool is_field); +MONO_API uint32_t mono_metadata_custom_attrs_from_index (MonoImage *meta, uint32_t cattr_index); -MonoMarshalSpec *mono_metadata_parse_marshal_spec (MonoImage *image, const char *ptr); +MONO_API MonoMarshalSpec *mono_metadata_parse_marshal_spec (MonoImage *image, const char *ptr); -void mono_metadata_free_marshal_spec (MonoMarshalSpec *spec); +MONO_API void mono_metadata_free_marshal_spec (MonoMarshalSpec *spec); -uint32_t mono_metadata_implmap_from_method (MonoImage *meta, uint32_t method_idx); +MONO_API uint32_t mono_metadata_implmap_from_method (MonoImage *meta, uint32_t method_idx); -void mono_metadata_field_info (MonoImage *meta, +MONO_API void mono_metadata_field_info (MonoImage *meta, uint32_t table_index, uint32_t *offset, uint32_t *rva, MonoMarshalSpec **marshal_spec); -uint32_t mono_metadata_get_constant_index (MonoImage *meta, uint32_t token, uint32_t hint); +MONO_API uint32_t mono_metadata_get_constant_index (MonoImage *meta, uint32_t token, uint32_t hint); /* * Functions to extract information from the Blobs */ -uint32_t mono_metadata_decode_value (const char *ptr, +MONO_API uint32_t mono_metadata_decode_value (const char *ptr, const char **rptr); -int32_t mono_metadata_decode_signed_value (const char *ptr, const char **rptr); +MONO_API int32_t mono_metadata_decode_signed_value (const char *ptr, const char **rptr); -uint32_t mono_metadata_decode_blob_size (const char *ptr, +MONO_API uint32_t mono_metadata_decode_blob_size (const char *ptr, const char **rptr); -void mono_metadata_encode_value (uint32_t value, char *bug, char **endbuf); +MONO_API void mono_metadata_encode_value (uint32_t value, char *bug, char **endbuf); #define MONO_OFFSET_IN_CLAUSE(clause,offset) \ ((clause)->try_offset <= (offset) && (offset) < ((clause)->try_offset + (clause)->try_len)) @@ -305,7 +292,6 @@ typedef struct { typedef struct _MonoType MonoType; typedef struct _MonoGenericInst MonoGenericInst; typedef struct _MonoGenericClass MonoGenericClass; -typedef struct _MonoDynamicGenericClass MonoDynamicGenericClass; typedef struct _MonoGenericContext MonoGenericContext; typedef struct _MonoGenericContainer MonoGenericContainer; typedef struct _MonoGenericParam MonoGenericParam; @@ -322,7 +308,10 @@ typedef struct { struct _MonoArrayType { MonoClass *eklass; + // Number of dimensions of the array uint8_t rank; + + // Arrays recording known upper and lower index bounds for each dimension uint8_t numsizes; uint8_t numlobounds; int *sizes; @@ -340,128 +329,143 @@ typedef enum { MONO_PARSE_FIELD } MonoParseTypeMode; -mono_bool +MONO_API mono_bool mono_type_is_byref (MonoType *type); -int +MONO_API int mono_type_get_type (MonoType *type); /* For MONO_TYPE_FNPTR */ -MonoMethodSignature* +MONO_API MonoMethodSignature* mono_type_get_signature (MonoType *type); /* For MONO_TYPE_CLASS, VALUETYPE */ -MonoClass* +MONO_API MonoClass* mono_type_get_class (MonoType *type); -MonoArrayType* +MONO_API MonoArrayType* mono_type_get_array_type (MonoType *type); /* For MONO_TYPE_PTR */ -MonoType* +MONO_API MonoType* mono_type_get_ptr_type (MonoType *type); -MonoClass* +MONO_API MonoClass* mono_type_get_modifiers (MonoType *type, mono_bool *is_required, void **iter); -MonoType* +MONO_API mono_bool mono_type_is_struct (MonoType *type); +MONO_API mono_bool mono_type_is_void (MonoType *type); +MONO_API mono_bool mono_type_is_pointer (MonoType *type); +MONO_API mono_bool mono_type_is_reference (MonoType *type); +mono_bool mono_type_is_generic_parameter (MonoType *type); + +MONO_API MonoType* mono_signature_get_return_type (MonoMethodSignature *sig); -MonoType* +MONO_API MonoType* mono_signature_get_params (MonoMethodSignature *sig, void **iter); -uint32_t +MONO_API uint32_t mono_signature_get_param_count (MonoMethodSignature *sig); -uint32_t +MONO_API uint32_t mono_signature_get_call_conv (MonoMethodSignature *sig); -int +MONO_API int mono_signature_vararg_start (MonoMethodSignature *sig); -mono_bool +MONO_API mono_bool mono_signature_is_instance (MonoMethodSignature *sig); -mono_bool +MONO_API mono_bool mono_signature_explicit_this (MonoMethodSignature *sig); -uint32_t mono_metadata_parse_typedef_or_ref (MonoImage *m, +MONO_API mono_bool +mono_signature_param_is_out (MonoMethodSignature *sig, int param_num); + +MONO_API uint32_t mono_metadata_parse_typedef_or_ref (MonoImage *m, const char *ptr, const char **rptr); -int mono_metadata_parse_custom_mod (MonoImage *m, +MONO_API int mono_metadata_parse_custom_mod (MonoImage *m, MonoCustomMod *dest, const char *ptr, const char **rptr); -MonoArrayType *mono_metadata_parse_array (MonoImage *m, +MONO_RT_EXTERNAL_ONLY +MONO_API MonoArrayType *mono_metadata_parse_array (MonoImage *m, const char *ptr, const char **rptr); -void mono_metadata_free_array (MonoArrayType *array); -MonoType *mono_metadata_parse_type (MonoImage *m, +MONO_API void mono_metadata_free_array (MonoArrayType *array); +MONO_RT_EXTERNAL_ONLY +MONO_API MonoType *mono_metadata_parse_type (MonoImage *m, MonoParseTypeMode mode, short opt_attrs, const char *ptr, const char **rptr); -MonoType *mono_metadata_parse_param (MonoImage *m, +MONO_RT_EXTERNAL_ONLY +MONO_API MonoType *mono_metadata_parse_param (MonoImage *m, const char *ptr, const char **rptr); -MonoType *mono_metadata_parse_ret_type (MonoImage *m, +MONO_API MonoType *mono_metadata_parse_ret_type (MonoImage *m, const char *ptr, const char **rptr); -MonoType *mono_metadata_parse_field_type (MonoImage *m, +MONO_RT_EXTERNAL_ONLY +MONO_API MonoType *mono_metadata_parse_field_type (MonoImage *m, short field_flags, const char *ptr, const char **rptr); -MonoType *mono_type_create_from_typespec (MonoImage *image, +MONO_API MonoType *mono_type_create_from_typespec (MonoImage *image, uint32_t type_spec); -void mono_metadata_free_type (MonoType *type); -int mono_type_size (MonoType *type, +MONO_API void mono_metadata_free_type (MonoType *type); +MONO_API int mono_type_size (MonoType *type, int *alignment); -int mono_type_stack_size (MonoType *type, +MONO_API int mono_type_stack_size (MonoType *type, int *alignment); -mono_bool mono_type_generic_inst_is_valuetype (MonoType *type); -mono_bool mono_metadata_generic_class_is_valuetype (MonoGenericClass *gclass); -unsigned int mono_metadata_generic_class_hash (MonoGenericClass *gclass); -mono_bool mono_metadata_generic_class_equal (MonoGenericClass *g1, MonoGenericClass *g2); +MONO_API mono_bool mono_type_generic_inst_is_valuetype (MonoType *type); +MONO_API mono_bool mono_metadata_generic_class_is_valuetype (MonoGenericClass *gclass); +MONO_API unsigned int mono_metadata_generic_class_hash (MonoGenericClass *gclass); +MONO_API mono_bool mono_metadata_generic_class_equal (MonoGenericClass *g1, MonoGenericClass *g2); -unsigned int mono_metadata_type_hash (MonoType *t1); -mono_bool mono_metadata_type_equal (MonoType *t1, MonoType *t2); +MONO_API unsigned int mono_metadata_type_hash (MonoType *t1); +MONO_API mono_bool mono_metadata_type_equal (MonoType *t1, MonoType *t2); -MonoMethodSignature *mono_metadata_signature_alloc (MonoImage *image, uint32_t nparams); +MONO_API MonoMethodSignature *mono_metadata_signature_alloc (MonoImage *image, uint32_t nparams); -MonoMethodSignature *mono_metadata_signature_dup (MonoMethodSignature *sig); +MONO_API MonoMethodSignature *mono_metadata_signature_dup (MonoMethodSignature *sig); -MonoMethodSignature *mono_metadata_parse_signature (MonoImage *image, +MONO_RT_EXTERNAL_ONLY +MONO_API MonoMethodSignature *mono_metadata_parse_signature (MonoImage *image, uint32_t token); -MonoMethodSignature *mono_metadata_parse_method_signature (MonoImage *m, +MONO_API MonoMethodSignature *mono_metadata_parse_method_signature (MonoImage *m, int def, const char *ptr, const char **rptr); -void mono_metadata_free_method_signature (MonoMethodSignature *method); +MONO_API void mono_metadata_free_method_signature (MonoMethodSignature *method); -mono_bool mono_metadata_signature_equal (MonoMethodSignature *sig1, +MONO_API mono_bool mono_metadata_signature_equal (MonoMethodSignature *sig1, MonoMethodSignature *sig2); -unsigned int mono_signature_hash (MonoMethodSignature *sig); +MONO_API unsigned int mono_signature_hash (MonoMethodSignature *sig); -MonoMethodHeader *mono_metadata_parse_mh (MonoImage *m, const char *ptr); -void mono_metadata_free_mh (MonoMethodHeader *mh); +MONO_RT_EXTERNAL_ONLY +MONO_API MonoMethodHeader *mono_metadata_parse_mh (MonoImage *m, const char *ptr); +MONO_API void mono_metadata_free_mh (MonoMethodHeader *mh); /* MonoMethodHeader acccessors */ -const unsigned char* +MONO_API const unsigned char* mono_method_header_get_code (MonoMethodHeader *header, uint32_t* code_size, uint32_t* max_stack); -MonoType** +MONO_API MonoType** mono_method_header_get_locals (MonoMethodHeader *header, uint32_t* num_locals, mono_bool *init_locals); -int +MONO_API int mono_method_header_get_num_clauses (MonoMethodHeader *header); -int +MONO_API int mono_method_header_get_clauses (MonoMethodHeader *header, MonoMethod *method, void **iter, MonoExceptionClause *clause); -uint32_t +MONO_API uint32_t mono_type_to_unmanaged (MonoType *type, MonoMarshalSpec *mspec, mono_bool as_field, mono_bool unicode, MonoMarshalConv *conv); @@ -483,20 +487,22 @@ mono_type_to_unmanaged (MonoType *type, MonoMarshalSpec *mspec, #define mono_metadata_token_code(token) ((token & 0xff000000)) -uint32_t mono_metadata_token_from_dor (uint32_t dor_index); +MONO_API uint32_t mono_metadata_token_from_dor (uint32_t dor_index); + +MONO_API char *mono_guid_to_string (const uint8_t *guid); -char *mono_guid_to_string (const uint8_t *guid); +MONO_API char *mono_guid_to_string_minimal (const uint8_t *guid); -uint32_t mono_metadata_declsec_from_index (MonoImage *meta, uint32_t idx); +MONO_API uint32_t mono_metadata_declsec_from_index (MonoImage *meta, uint32_t idx); -uint32_t mono_metadata_translate_token_index (MonoImage *image, int table, uint32_t idx); +MONO_API uint32_t mono_metadata_translate_token_index (MonoImage *image, int table, uint32_t idx); -void mono_metadata_decode_table_row (MonoImage *image, int table, +MONO_API void mono_metadata_decode_table_row (MonoImage *image, int table, int idx, uint32_t *res, int res_size); -uint32_t mono_metadata_decode_table_row_col (MonoImage *image, int table, +MONO_API uint32_t mono_metadata_decode_table_row_col (MonoImage *image, int table, int idx, unsigned int col);