Tue May 13 16:41:49 CEST 2003 Paolo Molaro <lupus@ximian.com>
[mono.git] / mono / metadata / class.h
index 70a158c4bcf7961a9fe8ece0437408a08536d52e..47180f38be6846c0434c77d5bb7afeb9b15b4cb5 100644 (file)
@@ -7,6 +7,8 @@
 
 #define MONO_CLASS_IS_ARRAY(c) ((c)->rank)
 
+#define MONO_DEFAULT_SUPERTABLE_SIZE 6
+
 extern gboolean mono_print_vtable;
 typedef struct MonoVTable MonoVTable;
 
@@ -91,7 +93,8 @@ struct _MonoClass {
        guint marshalbyref    : 1; /* class is a MarshalByRefObject */
        guint contextbound    : 1; /* class is a ContextBoundObject */
        guint delegate        : 1; /* class is a Delegate */
-       guint dummy           : 1; /* temorary hack */
+       guint gc_descr_inited : 1; /* gc_descr is initialized */
+       guint dummy           : 1; /* temporary hack */
 
        MonoClass  *parent;
        MonoClass  *nested_in;
@@ -108,6 +111,10 @@ struct _MonoClass {
         gint       *interface_offsets;   
        MonoClass **interfaces;
 
+       /* for fast subtype checks */
+       guint       idepth;
+       MonoClass **supertypes;
+
        /*
         * Computed object instance size, total.
         */
@@ -144,6 +151,9 @@ struct _MonoClass {
 
        void *reflection_info;
 
+       void *gc_descr;
+       guint64 gc_bitmap;
+
        MonoMethod *ptr_to_str;
        MonoMethod *str_to_ptr;
 
@@ -153,10 +163,17 @@ struct _MonoClass {
 
 struct MonoVTable {
        MonoClass  *klass;
+    /*
+        * According to comments in gc_gcj.h, this should be the second word in
+        * the vtable.
+        */
+       void *gc_descr;         
        MonoDomain *domain;  /* each object/vtable belongs to exactly one domain */
        guint       max_interface_id;
         gpointer   *interface_offsets;   
         gpointer    data; /* to store static class data */
+       guint remote          : 1; /* class is remotely activated */
+       /* do not add any fields after vtable, the structure is dynamically extended */
         gpointer    vtable [MONO_ZERO_LEN_ARRAY];      
 };
 
@@ -198,6 +215,9 @@ mono_class_setup_mono_type (MonoClass *klass);
 void
 mono_class_setup_parent    (MonoClass *klass, MonoClass *parent);
 
+void
+mono_class_setup_supertypes (MonoClass *klass);
+
 MonoClass *
 mono_class_from_name       (MonoImage *image, const char* name_space, const char *name);
 
@@ -258,6 +278,10 @@ mono_class_min_align       (MonoClass *klass);
 MonoClass *
 mono_class_from_mono_type  (MonoType *type);
 
+gboolean
+mono_class_is_subclass_of (MonoClass *klass, MonoClass *klassc, 
+                                                  gboolean check_interfaces);
+
 gpointer
 mono_ldtoken               (MonoImage *image, guint32 token, MonoClass **retclass);
 
@@ -273,4 +297,7 @@ mono_lookup_dynamic_token (MonoImage *image, guint32 token);
 void
 mono_install_lookup_dynamic_token (MonoLookupDynamicToken func);
 
+void    
+mono_install_get_config_dir(void);
+
 #endif /* _MONO_CLI_CLASS_H_ */