X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=src%2Fvm%2Fclass.hpp;h=e1675a0844243d01c7fb446c797de2bbc7209825;hb=ae82ad99e3a6280a3df05d8ce5fd39db38729d17;hp=f643fd357850d1398b12e49b132475afa0b220e7;hpb=0698bb7e6153d5892e5ccdb9d9770999b1e1c217;p=cacao.git diff --git a/src/vm/class.hpp b/src/vm/class.hpp index f643fd357..e1675a084 100644 --- a/src/vm/class.hpp +++ b/src/vm/class.hpp @@ -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.h" +#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: */