Removed fields from classinfo and related functions from descriptor pool.
[cacao.git] / src / vm / class.hpp
index d1584b1c4228073671997988bbf27eb9038c663c..e1675a0844243d01c7fb446c797de2bbc7209825 100644 (file)
@@ -1,6 +1,6 @@
 /* src/vm/class.hpp - class related functions header
 
-   Copyright (C) 1996-2005, 2006, 2007, 2008
+   Copyright (C) 1996-2011
    CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
 
    This file is part of CACAO.
@@ -40,7 +40,7 @@ typedef struct extra_classref extra_classref;
 #include "vm/types.h"
 
 #if defined(ENABLE_JAVASE)
-# include "vm/annotation.h"
+# include "vm/annotation.hpp"
 #endif
 
 #include "vm/field.hpp"
@@ -67,7 +67,7 @@ typedef struct extra_classref extra_classref;
 /* some macros ****************************************************************/
 
 #define CLASS_IS_OR_ALMOST_INITIALIZED(c) \
-    (((c)->state & CLASS_INITIALIZING) || ((c)->state & CLASS_INITIALIZED))
+    (((c)->state & CLASS_INITIALIZED) || ((c)->state & CLASS_INITIALIZING && class_initializing_thread_is_self((c))))
 
 
 /* classinfo ******************************************************************/
@@ -90,6 +90,8 @@ typedef struct {
 #endif
 } dummy_java_lang_Class;
 
+struct threadobject;
+
 struct classinfo {                /* class structure                          */
        dummy_java_lang_Class object;
 
@@ -103,8 +105,6 @@ struct classinfo {                /* class structure                          */
        s4          classrefcount;    /* number of symbolic class references      */
        constant_classref *classrefs; /* table of symbolic class references       */
        extra_classref *extclassrefs; /* additional classrefs                     */
-       s4          parseddescsize;   /* size of the parsed descriptors block     */
-       u1         *parseddescs;      /* parsed descriptors                       */
 
        classinfo  *super;            /* super class                              */
        classinfo  *sub;              /* sub class pointer                        */
@@ -124,6 +124,7 @@ struct classinfo {                /* class structure                          */
                                      /* (interfaces)                             */
        s4          instancesize;     /* size of an instance of this class        */
 
+       struct threadobject *initializing_thread;
        vftbl_t    *vftbl;            /* pointer to virtual function table        */
 
        methodinfo *finalizer;        /* finalizer method                         */
@@ -399,6 +400,7 @@ methodinfo *class_resolveinterfacemethod(classinfo *c, utf *name, utf *dest, cla
 
 bool                       class_issubclass(classinfo *sub, classinfo *super);
 bool                       class_isanysubclass(classinfo *sub, classinfo *super);
+bool                       class_is_arraycompatible(arraydescriptor *desc, arraydescriptor *target);
 bool                       class_is_assignable_from(classinfo *to, classinfo *from);
 bool                       class_is_instance(classinfo *c, java_handle_t *h);
 
@@ -423,6 +425,8 @@ java_handle_t             *class_get_name(classinfo *c);
 utf                       *class_get_signature(classinfo *c);
 #endif
 
+bool class_initializing_thread_is_self(classinfo *c);
+
 /* some debugging functions */
 
 #if !defined(NDEBUG)
@@ -457,4 +461,5 @@ void class_showconstantpool(classinfo *c);
  * c-basic-offset: 4
  * tab-width: 4
  * End:
+ * vim:noexpandtab:sw=4:ts=4:
  */