Removed fields from classinfo and related functions from descriptor pool.
[cacao.git] / src / vm / class.hpp
index 2f52ed77bb237923ee3d7e13e23ac4b9e4006e18..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,18 +40,19 @@ 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"
 #include "vm/global.h"
-#include "vm/linker.h"
+#include "vm/linker.hpp"
 #include "vm/loader.hpp"
 #include "vm/method.hpp"
 #include "vm/references.h"
 #include "vm/string.hpp"
 #include "vm/utf8.h"
 
+
 /* class state defines ********************************************************/
 
 #define CLASS_LOADING         0x0001
@@ -66,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 ******************************************************************/
@@ -89,6 +90,8 @@ typedef struct {
 #endif
 } dummy_java_lang_Class;
 
+struct threadobject;
+
 struct classinfo {                /* class structure                          */
        dummy_java_lang_Class object;
 
@@ -102,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                        */
@@ -123,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                         */
@@ -161,9 +163,6 @@ struct classinfo {                /* class structure                          */
        java_objectarray_t *signers;
 # endif
 #endif
-#if defined(ENABLE_JITCACHE)
-       int         cache_file_fd;
-#endif
 };
 
 
@@ -401,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);
 
@@ -425,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)
@@ -459,4 +461,5 @@ void class_showconstantpool(classinfo *c);
  * c-basic-offset: 4
  * tab-width: 4
  * End:
+ * vim:noexpandtab:sw=4:ts=4:
  */