Sat Jan 8 19:03:26 CET 2005 Paolo Molaro <lupus@ximian.com>
[mono.git] / mono / metadata / class-internals.h
index 65f0adfc774f30c2cf0cc26cba8922cd53ccab14..636cb475cd8f6dadec9d0ed6a2e2e28790748f1d 100644 (file)
@@ -37,6 +37,7 @@ typedef enum {
        MONO_WRAPPER_CASTCLASS,
        MONO_WRAPPER_PROXY_ISINST,
        MONO_WRAPPER_STELEMREF,
+       MONO_WRAPPER_UNBOX,
        MONO_WRAPPER_UNKNOWN
 } MonoWrapperType;
 
@@ -61,7 +62,8 @@ struct _MonoMethod {
        unsigned int string_ctor:1;
        unsigned int save_lmf:1;
        unsigned int dynamic:1; /* created & destroyed during runtime */
-       gint slot : 22;
+       unsigned int is_inflated:1;
+       gint slot : 21;
 };
 
 struct _MonoMethodNormal {
@@ -79,6 +81,7 @@ struct _MonoMethodInflated {
        MonoMethodNormal nmethod;
        MonoGenericContext *context;
        MonoMethod *declaring;
+       MonoMethodInflated *inflated;
 };
 
 struct _MonoMethodPInvoke {
@@ -211,6 +214,7 @@ struct _MonoClass {
        guint delegate        : 1; /* class is a Delegate */
        guint gc_descr_inited : 1; /* gc_descr is initialized */
        guint dummy           : 1; /* temporary hack */
+       guint32 declsec_flags;     /* declarative security attributes flags */
 
        MonoClass  *parent;
        MonoClass  *nested_in;
@@ -264,7 +268,7 @@ struct _MonoClass {
        MonoType this_arg;
        MonoType byval_arg;
 
-       MonoGenericInst *generic_inst;
+       MonoGenericClass *generic_class;
        MonoGenericContainer *generic_container;
 
        void *reflection_info;
@@ -301,23 +305,27 @@ struct MonoVTable {
  * Generic instantiation data type encoding.
  */
 struct _MonoGenericInst {
-       MonoGenericContainer *container;
+       int id;
+       int type_argc  : 23;
+       int is_open    : 1;
+       MonoType **type_argv;
+};
+
+struct _MonoGenericClass {
+       MonoGenericInst *inst;
+       MonoClass *container_class;
        MonoGenericContext *context;
        MonoClass *klass;
        MonoType *parent;
-       int count_ifaces;
+       guint count_ifaces  : 29;
+       guint initialized   :  1;
+       guint init_pending  :  1;
+       guint is_dynamic    :  1;
        MonoType **ifaces;
-       MonoType *generic_type;
-       MonoDynamicGenericInst *dynamic_info;
-       int type_argc;
-       MonoType **type_argv;
-       guint is_open       : 1;
-       guint initialized   : 1;
-       guint init_pending  : 1;
-       guint is_dynamic    : 1;
 };
 
-struct _MonoDynamicGenericInst {
+struct _MonoDynamicGenericClass {
+       MonoGenericClass generic_class;
        int count_methods;
        MonoMethod **methods;
        int count_ctors;
@@ -331,22 +339,20 @@ struct _MonoDynamicGenericInst {
 };
 
 struct _MonoGenericMethod {
+       MonoGenericInst *inst;
        MonoGenericContainer *container;
        gpointer reflection_info;
-       int mtype_argc;
-       MonoType **mtype_argv;
-       guint is_open       : 1;
 };
 
 struct _MonoGenericContext {
        MonoGenericContainer *container;
-       MonoGenericInst *ginst;
+       MonoGenericClass *gclass;
        MonoGenericMethod *gmethod;
 };
 
 struct _MonoGenericContainer {
+       MonoGenericContext context;
        MonoGenericContainer *parent;
-       MonoGenericContext *context;
        GHashTable *method_hash;
        MonoClass *klass;
        int type_argc    : 6;
@@ -381,7 +387,9 @@ typedef struct {
        gulong class_vtable_size;
        gulong class_static_data_size;
        gulong generic_instance_count;
+       gulong generic_class_count;
        gulong inflated_method_count;
+       gulong inflated_method_count_2;
        gulong inflated_type_count;
        gulong generics_metadata_size;
        gboolean enabled;
@@ -437,10 +445,10 @@ void
 mono_install_lookup_dynamic_token (MonoLookupDynamicToken func);
 
 void
-mono_class_create_generic (MonoGenericInst *ginst);
+mono_class_create_generic (MonoGenericClass *gclass);
 
 void
-mono_class_create_generic_2 (MonoGenericInst *ginst);
+mono_class_create_generic_2 (MonoGenericClass *gclass);
 
 typedef struct {
        MonoImage *corlib;
@@ -493,6 +501,7 @@ typedef struct {
        MonoClass *marshalbyrefobject_class;
        MonoClass *monitor_class;
        MonoClass *iremotingtypeinfo_class;
+       MonoClass *runtimesecurityframe_class;
 } MonoDefaults;
 
 extern MonoDefaults mono_defaults;
@@ -515,7 +524,8 @@ mono_method_get_wrapper_data (MonoMethod *method, guint32 id);
 void
 mono_install_stack_walk (MonoStackWalkImpl func);
 
-MonoGenericContainer *mono_metadata_load_generic_params (MonoImage *image, guint32 token);
+MonoGenericContainer *mono_metadata_load_generic_params (MonoImage *image, guint32 token,
+                                                        MonoGenericContainer *parent_container);
 
 MonoMethodSignature*
 mono_create_icall_signature (const char *sigstr);
@@ -532,5 +542,11 @@ mono_find_jit_icall_by_name (const char *name);
 MonoJitICallInfo *
 mono_find_jit_icall_by_addr (gconstpointer addr);
 
+MonoMethodSignature*
+mono_class_inflate_generic_signature (MonoImage *image, MonoMethodSignature *sig, MonoGenericContext *context);
+
+MonoGenericClass *
+mono_get_shared_generic_class (MonoGenericContainer *container, gboolean is_dynamic);
+
 #endif /* __MONO_METADATA_CLASS_INTERBALS_H__ */