/* 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.
#include "vm/types.h"
#if defined(ENABLE_JAVASE)
-# include "vm/annotation.h"
+# include "vm/annotation.hpp"
#endif
#include "vm/field.hpp"
/* 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 ******************************************************************/
#endif
} dummy_java_lang_Class;
+struct threadobject;
+
struct classinfo { /* class structure */
dummy_java_lang_Class object;
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 */
/* (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 */
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);
utf *class_get_signature(classinfo *c);
#endif
+bool class_initializing_thread_is_self(classinfo *c);
+
/* some debugging functions */
#if !defined(NDEBUG)
* c-basic-offset: 4
* tab-width: 4
* End:
+ * vim:noexpandtab:sw=4:ts=4:
*/