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_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) ((c->flags & TYPE_ATTRIBUTE_INTERFACE) || (c->byval_arg.type == MONO_TYPE_VAR) || (c->byval_arg.type == MONO_TYPE_MVAR))
MONO_MARSHAL_CONV_HANDLEREF
} MonoMarshalConv;
+#define MONO_MARSHAL_CONV_INVALID ((MonoMarshalConv)-1)
+
typedef struct {
MonoMarshalNative native;
union {
struct {
char *custom_name;
char *cookie;
+ MonoImage *image;
} custom_data;
struct {
MonoMarshalVariant elem_type;
} 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);
#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))
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_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_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);
#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);
-char *mono_guid_to_string (const uint8_t *guid);
+MONO_API char *mono_guid_to_string (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);