X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=src%2Fvm%2Fclass.hpp;h=e1675a0844243d01c7fb446c797de2bbc7209825;hb=ae82ad99e3a6280a3df05d8ce5fd39db38729d17;hp=d1584b1c4228073671997988bbf27eb9038c663c;hpb=adb235ae1e53d15c6f71602049b2879451920c67;p=cacao.git diff --git a/src/vm/class.hpp b/src/vm/class.hpp index d1584b1c4..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,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: */