2004-05-25 Atsushi Enomoto <atsushi@ximian.com>
[mono.git] / mono / metadata / metadata.h
index ede32906ce7329945ce84ae9051e95e2f1e45781..2c2eb6af00202643ba2d7a7f6e37fa994086b93d 100644 (file)
@@ -18,6 +18,7 @@
 #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)))
+#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))
 
 typedef struct _MonoClass MonoClass;
 typedef struct _MonoDomain MonoDomain;
@@ -26,11 +27,11 @@ typedef enum {
        MONO_TABLE_MODULE,
        MONO_TABLE_TYPEREF,
        MONO_TABLE_TYPEDEF,
-       MONO_TABLE_UNUSED1,
+       MONO_TABLE_FIELD_POINTER,
        MONO_TABLE_FIELD,
-       MONO_TABLE_UNUSED2,
+       MONO_TABLE_METHOD_POINTER,
        MONO_TABLE_METHOD,
-       MONO_TABLE_UNUSED3,
+       MONO_TABLE_PARAM_POINTER,
        MONO_TABLE_PARAM,
        MONO_TABLE_INTERFACEIMPL,
        MONO_TABLE_MEMBERREF, /* 0xa */
@@ -42,7 +43,7 @@ typedef enum {
        MONO_TABLE_FIELDLAYOUT, /* 0x10 */
        MONO_TABLE_STANDALONESIG,
        MONO_TABLE_EVENTMAP,
-       MONO_TABLE_UNUSED4,
+       MONO_TABLE_EVENT_POINTER,
        MONO_TABLE_EVENT,
        MONO_TABLE_PROPERTYMAP,
        MONO_TABLE_UNUSED5,
@@ -156,8 +157,12 @@ typedef enum {
        MONO_MARSHAL_CONV_OBJECT_IUNKNOWN,
        MONO_MARSHAL_CONV_OBJECT_STRUCT,
        MONO_MARSHAL_CONV_DEL_FTN,
+       MONO_MARSHAL_CONV_FTN_DEL,
        MONO_MARSHAL_CONV_STRARRAY_STRLPARRAY,
-       MONO_MARSHAL_FREE_ARRAY
+       MONO_MARSHAL_CONV_STRARRAY_STRWLPARRAY,
+       MONO_MARSHAL_CONV_ASANY,
+       MONO_MARSHAL_FREE_ARRAY,
+       MONO_MARSHAL_FREE_ASANY
 } MonoMarshalConv;
 
 typedef struct {
@@ -263,6 +268,7 @@ typedef struct _MonoType MonoType;
 typedef struct _MonoGenericInst MonoGenericInst;
 typedef struct _MonoDynamicGenericInst MonoDynamicGenericInst;
 typedef struct _MonoGenericMethod MonoGenericMethod;
+typedef struct _MonoGenericContext MonoGenericContext;
 typedef struct _MonoGenericParam MonoGenericParam;
 typedef struct _MonoArrayType MonoArrayType;
 typedef struct _MonoMethodSignature MonoMethodSignature;
@@ -306,8 +312,9 @@ struct _MonoMethodSignature {
        unsigned int  ref_count : 23;
        guint16       param_count;
        guint16       sentinelpos;
-       guint16       generic_param_count;
-       MonoGenericMethod *gen_method;
+       unsigned int  generic_param_count : 30;
+       unsigned int  is_inflated         : 1;
+       unsigned int  has_type_parameters : 1;
        MonoType     *ret;
        MonoType     *params [MONO_ZERO_LEN_ARRAY];
 };
@@ -368,11 +375,16 @@ int            mono_type_size                  (MonoType        *type,
 int            mono_type_stack_size            (MonoType        *type, 
                                                int             *alignment);
 
+guint          mono_metadata_generic_inst_hash  (MonoGenericInst *ginst);
+gboolean       mono_metadata_generic_inst_equal (MonoGenericInst *g1, MonoGenericInst *g2);
+
 guint          mono_metadata_type_hash         (MonoType *t1);
 gboolean       mono_metadata_type_equal        (MonoType *t1, MonoType *t2);
 
 MonoMethodSignature  *mono_metadata_signature_alloc (MonoImage *image, guint32 nparams);
 
+MonoMethodSignature  *mono_metadata_signature_dup (MonoMethodSignature *sig);
+
 MonoMethodSignature  *mono_metadata_parse_signature (MonoImage *image, 
                                                     guint32    token);