c->state & CLASS_{LOADED,LINKED}.
- Calling the class loader
- Running the main method
- $Id: cacao.c 3840 2005-12-02 15:15:39Z twisti $
+ $Id: cacao.c 3888 2005-12-05 22:08:45Z twisti $
*/
if (!c)
continue;
- if (!c->linked)
+ if (!(c->state & CLASS_LINKED))
if (!link_class(c))
throw_main_exception_exit();
methodinfo *m;
assert(class_java_lang_System);
- assert(class_java_lang_System->loaded);
+ assert(class_java_lang_System->state & CLASS_LOADED);
#if defined(ENABLE_JVMTI)
set_jvmti_phase(JVMTI_PHASE_DEAD);
Changes: Joseph Wenninger
Christian Thalinger
- $Id: VMClass.c 3829 2005-12-01 19:47:56Z twisti $
+ $Id: VMClass.c 3888 2005-12-05 22:08:45Z twisti $
*/
&inner))
return NULL;
- if (!inner->linked)
+ if (!(inner->state & CLASS_LINKED))
if (!link_class(inner))
return NULL;
&outer))
return NULL;
- if (!outer->linked)
+ if (!(outer->state & CLASS_LINKED))
if (!link_class(outer))
return NULL;
c = (classinfo *) klass;
- if (!c->linked)
+ if (!(c->state & CLASS_LINKED))
if (!link_class(c))
return NULL;
{
classinfo *c = (classinfo *) klass;
- if (!c->linked)
+ if (!(c->state & CLASS_LINKED))
if (!link_class(c))
return 0;
return 0;
}
- if (!kc->linked)
+ if (!(kc->state & CLASS_LINKED))
if (!link_class(kc))
return 0;
- if (!cc->linked)
+ if (!(cc->state & CLASS_LINKED))
if (!link_class(cc))
return 0;
c = (classinfo *) klass;
ob = (java_objectheader *) o;
- if (!c->linked)
+ if (!(c->state & CLASS_LINKED))
if (!link_class(c))
return 0;
Christian Thalinger
Edwin Steiner
- $Id: VMClassLoader.c 3846 2005-12-03 12:19:38Z twisti $
+ $Id: VMClassLoader.c 3888 2005-12-05 22:08:45Z twisti $
*/
/* link the class */
- if (!ci->linked)
+ if (!(ci->state & CLASS_LINKED))
link_class(ci);
return;
calls instead of machine instructions, using the C calling
convention.
- $Id: builtin.c 3854 2005-12-03 12:35:43Z twisti $
+ $Id: builtin.c 3888 2005-12-05 22:08:45Z twisti $
*/
#include "toolbox/logging.h"
#include "toolbox/util.h"
#include "vm/builtin.h"
+#include "vm/class.h"
#include "vm/exceptions.h"
#include "vm/global.h"
#include "vm/initialize.h"
/* is the class loaded */
- assert(c->loaded);
+ assert(c->state & CLASS_LOADED);
/* check if we can instantiate this class */
/* is the class linked */
- if (!c->linked)
+ if (!(c->state & CLASS_LINKED))
if (!link_class(c))
return NULL;
/* is class loaded */
- assert(componentclass->loaded);
+ assert(componentclass->state & CLASS_LOADED);
/* is class linked */
- if (!componentclass->linked)
+ if (!(componentclass->state & CLASS_LINKED))
if (!link_class(componentclass))
return NULL;
Andreas Krall
Christian Thalinger
- $Id: class.c 3859 2005-12-03 13:00:28Z twisti $
+ $Id: class.c 3888 2005-12-05 22:08:45Z twisti $
*/
}
CLASS_ASSERT(c);
- CLASS_ASSERT(c->loaded);
+ CLASS_ASSERT(c->state & CLASS_LOADED);
CLASS_ASSERT(c->classloader == defloader);
- if (link && !c->linked)
+ if (link && !(c->state & CLASS_LINKED))
if (!link_class(c))
return NULL;
- CLASS_ASSERT(!link || c->linked);
+ CLASS_ASSERT(!link || (c->state & CLASS_LINKED));
return c;
}
Changes: Christian Thalinger
- $Id: classcache.c 3837 2005-12-01 23:50:28Z twisti $
+ $Id: classcache.c 3888 2005-12-05 22:08:45Z twisti $
*/
*******************************************************************************/
-classinfo * classcache_store(classloader * initloader,
- classinfo * cls,
- bool mayfree)
+classinfo *classcache_store(classloader *initloader, classinfo *cls,
+ bool mayfree)
{
classcache_name_entry *en;
classcache_class_entry *clsen;
#endif
assert(cls);
- assert(cls->loaded != 0);
+ assert(cls->state & CLASS_LOADED);
CLASSCACHE_LOCK();
*******************************************************************************/
-classinfo * classcache_store_defined(classinfo *cls)
+classinfo *classcache_store_defined(classinfo *cls)
{
classcache_name_entry *en;
classcache_class_entry *clsen;
#endif
assert(cls);
- assert(cls->loaded != 0);
+ assert(cls->state & CLASS_LOADED);
CLASSCACHE_LOCK();
Andreas Krall
Christian Thalinger
- $Id: initialize.c 3858 2005-12-03 12:58:36Z twisti $
+ $Id: initialize.c 3888 2005-12-05 22:08:45Z twisti $
*/
/* maybe the class is not already linked */
- if (!c->linked)
+ if (!(c->state & CLASS_LINKED))
if (!link_class(c))
return false;
Authors: Carolyn Oates
- $Id: parseXTA.h 2193 2005-04-02 19:33:43Z edwin $
+ $Id: parseXTA.h 3888 2005-12-05 22:08:45Z twisti $
*/
#define LAZYLOADING(class) { \
- if (!class->linked) \
+ if (!(class->state & CLASS_LINKED)) \
if (!link_class(class)) \
return 0; }
#define LAZYLOADING1(class) { \
- if (!class->linked) \
+ if (!(class->state & CLASS_LINKED)) \
if (!link_class(class)) \
return; }
Authors: Edwin Steiner
- $Id: typeinfo.c 3829 2005-12-01 19:47:56Z twisti $
+ $Id: typeinfo.c 3888 2005-12-05 22:08:45Z twisti $
*/
TYPEINFO_ASSERT(interf);
TYPEINFO_ASSERT((interf->flags & ACC_INTERFACE) != 0);
TYPEINFO_ASSERT((cls->flags & ACC_INTERFACE) != 0);
- TYPEINFO_ASSERT(cls->linked);
+ TYPEINFO_ASSERT(cls->state & CLASS_LINKED);
/* first check direct superinterfaces */
for (i=0; i<cls->interfacescount; ++i) {
TYPEINFO_ASSERT(interf);
TYPEINFO_ASSERT((interf->flags & ACC_INTERFACE) != 0);
- if (!cls->linked)
+ if (!(cls->state & CLASS_LINKED))
if (!link_class(cls))
return typecheck_FAIL;
return interface_extends_interface(cls,interf);
}
- TYPEINFO_ASSERT(cls->linked);
+ TYPEINFO_ASSERT(cls->state & CLASS_LINKED);
return CLASSINFO_IMPLEMENTS_INTERFACE(cls,interf->index);
}
if (typeclass == pseudo_class_Null)
return typecheck_TRUE;
- TYPEINFO_ASSERT(typeclass->loaded);
- TYPEINFO_ASSERT(typeclass->linked);
+ TYPEINFO_ASSERT(typeclass->state & CLASS_LOADED);
+ TYPEINFO_ASSERT(typeclass->state & CLASS_LINKED);
/* check if the common typeclass is a subclass of CLS. */
if (class_issubclass(typeclass,cls))
if (IS_CLASSREF(*mlist)) {
return typecheck_MAYBE;
}
- if (!mlist->cls->linked)
+ if (!(mlist->cls->state & CLASS_LINKED))
if (!link_class(mlist->cls))
return typecheck_FAIL;
if (!class_issubclass(mlist->cls,cls))
cls = c.cls;
- TYPEINFO_ASSERT(cls->loaded);
- TYPEINFO_ASSERT(dest.cls->loaded);
+ TYPEINFO_ASSERT(cls->state & CLASS_LOADED);
+ TYPEINFO_ASSERT(dest.cls->state & CLASS_LOADED);
/* maybe we need to link the classes */
- if (!cls->linked)
+ if (!(cls->state & CLASS_LINKED))
if (!link_class(cls))
return typecheck_FAIL;
- if (!dest.cls->linked)
+ if (!(dest.cls->state & CLASS_LINKED))
if (!link_class(dest.cls))
return typecheck_FAIL;
/* { we know that both c and dest are linked classes } */
- TYPEINFO_ASSERT(cls->linked);
- TYPEINFO_ASSERT(dest.cls->linked);
+ TYPEINFO_ASSERT(cls->state & CLASS_LINKED);
+ TYPEINFO_ASSERT(dest.cls->state & CLASS_LINKED);
if (dest.cls->flags & ACC_INTERFACE) {
/* We are assigning to an interface type. */
else {
vftbl_t *comp;
- if (!srcarray->typeclass.cls->linked) {
+ if (!(srcarray->typeclass.cls->state & CLASS_LINKED)) {
if (!link_class(srcarray->typeclass.cls)) {
return false;
}
}
#endif
- TYPEINFO_ASSERT(IS_CLASSREF(x) || x.cls->loaded);
- TYPEINFO_ASSERT(IS_CLASSREF(y) || y.cls->loaded);
+ TYPEINFO_ASSERT(IS_CLASSREF(x) || (x.cls->state & CLASS_LOADED));
+ TYPEINFO_ASSERT(IS_CLASSREF(y) || (y.cls->state & CLASS_LOADED));
/* If y is unresolved or an interface, swap x and y. */
if (IS_CLASSREF(y) || (!IS_CLASSREF(x) && y.cls->flags & ACC_INTERFACE))
/* {We know: If only one of x,y is an interface it is x.} */
TYPEINFO_ASSERT(!IS_CLASSREF(x) && !IS_CLASSREF(y));
- TYPEINFO_ASSERT(x.cls->loaded);
- TYPEINFO_ASSERT(y.cls->loaded);
+ TYPEINFO_ASSERT(x.cls->state & CLASS_LOADED);
+ TYPEINFO_ASSERT(y.cls->state & CLASS_LOADED);
/* Handle merging of interfaces: */
if (x.cls->flags & ACC_INTERFACE) {
*/
/* we may have to link the classes */
- if (!x.cls->linked)
+ if (!(x.cls->state & CLASS_LINKED))
if (!link_class(x.cls))
return typecheck_FAIL;
- if (!y.cls->linked)
+ if (!(y.cls->state & CLASS_LINKED))
if (!link_class(y.cls))
return typecheck_FAIL;
- TYPEINFO_ASSERT(x.cls->linked);
- TYPEINFO_ASSERT(y.cls->linked);
+ TYPEINFO_ASSERT(x.cls->state & CLASS_LINKED);
+ TYPEINFO_ASSERT(y.cls->state & CLASS_LINKED);
if (CLASSINFO_IMPLEMENTS_INTERFACE(y.cls,x.cls->index))
{
/* {We know: x and y are classes (not interfaces).} */
/* we may have to link the classes */
- if (!x.cls->linked)
+ if (!(x.cls->state & CLASS_LINKED))
if (!link_class(x.cls))
return typecheck_FAIL;
- if (!y.cls->linked)
+ if (!(y.cls->state & CLASS_LINKED))
if (!link_class(y.cls))
return typecheck_FAIL;
- TYPEINFO_ASSERT(x.cls->linked);
- TYPEINFO_ASSERT(y.cls->linked);
+ TYPEINFO_ASSERT(x.cls->state & CLASS_LINKED);
+ TYPEINFO_ASSERT(y.cls->state & CLASS_LINKED);
/* If *x is deeper in the inheritance hierarchy swap x and y. */
if (x.cls->index > y.cls->index) {
Edwin Steiner
Christian Thalinger
- $Id: linker.c 3825 2005-12-01 18:46:29Z edwin $
+ $Id: linker.c 3888 2005-12-05 22:08:45Z twisti $
*/
/* pseudo class for Arraystubs (extends java.lang.Object) */
- pseudo_class_Arraystub =
+ pseudo_class_Arraystub =
class_create_classinfo(utf_new_char("$ARRAYSTUB$"));
- pseudo_class_Arraystub->loaded = true;
- pseudo_class_Arraystub->super.cls = class_java_lang_Object;
- pseudo_class_Arraystub->interfacescount = 2;
- pseudo_class_Arraystub->interfaces = MNEW(classref_or_classinfo, 2);
- pseudo_class_Arraystub->interfaces[0].cls = class_java_lang_Cloneable;
- pseudo_class_Arraystub->interfaces[1].cls = class_java_io_Serializable;
+ pseudo_class_Arraystub->state |= CLASS_LOADED;
+ pseudo_class_Arraystub->super.cls = class_java_lang_Object;
+ pseudo_class_Arraystub->interfacescount = 2;
+ pseudo_class_Arraystub->interfaces = MNEW(classref_or_classinfo, 2);
+ pseudo_class_Arraystub->interfaces[0].cls = class_java_lang_Cloneable;
+ pseudo_class_Arraystub->interfaces[1].cls = class_java_io_Serializable;
if (!classcache_store_unique(pseudo_class_Arraystub)) {
log_text("could not cache pseudo_class_Arraystub");
return false;
/* pseudo class representing the null type */
-
+
pseudo_class_Null = class_create_classinfo(utf_new_char("$NULL$"));
- pseudo_class_Null->loaded = true;
+ pseudo_class_Null->state |= CLASS_LOADED;
pseudo_class_Null->super.cls = class_java_lang_Object;
if (!classcache_store_unique(pseudo_class_Null)) {
/* pseudo class representing new uninitialized objects */
pseudo_class_New = class_create_classinfo(utf_new_char("$NEW$"));
- pseudo_class_New->loaded = true;
- pseudo_class_New->linked = true; /* XXX is this allright? */
+ pseudo_class_New->state |= CLASS_LOADED;
+ pseudo_class_New->state |= CLASS_LINKED; /* XXX is this allright? */
pseudo_class_New->super.cls = class_java_lang_Object;
if (!classcache_store_unique(pseudo_class_New)) {
/* prevent loader from loading primitive class */
- c->loaded = true;
+ c->state |= CLASS_LOADED;
/* INFO: don't put primitive classes into the classcache */
primitivetype_table[i].arrayclass = c;
- assert(c->loaded);
- if (!c->linked)
+ assert(c->state & CLASS_LOADED);
+
+ if (!(c->state & CLASS_LINKED))
if (!link_class(c))
return false;
#endif
/* maybe the class is already linked */
- if (c->linked) {
+
+ if (c->state & CLASS_LINKED) {
#if defined(USE_THREADS)
builtin_monitorexit((java_objectheader *) c);
#endif
/* if return value is NULL, we had a problem and the class is not linked */
if (!r)
- c->linked = false;
+ c->state &= ~CLASS_LINKING;
#if defined(STATISTICS)
/* measure time */
s4 i,j; /* interface/method/field counter */
arraydescriptor *arraydesc; /* descriptor for array classes */
- /* maybe the class is already linked */
+ /* the class is already linked */
- if (c->linked)
+ if (c->state & CLASS_LINKED)
return c;
if (linkverbose)
/* the class must be loaded */
- if (!c->loaded)
- throw_cacao_exception_exit(string_java_lang_InternalError,
- "Trying to link unloaded class");
+ /* XXX should this be a specific exception? */
+ assert(c->state & CLASS_LOADED);
/* cache the self-reference of this class */
/* we do this for cases where the defining loader of the class */
if (c->classloader)
classcache_store(c->classloader,c,false);
- /* ok, this class is somewhat linked */
+ /* this class is currently linking */
- c->linked = true;
+ c->state |= CLASS_LINKING;
arraydesc = NULL;
return NULL;
}
- assert(tc->loaded);
+ assert(tc->state & CLASS_LOADED);
if (!(tc->flags & ACC_INTERFACE)) {
*exceptionptr =
return NULL;
}
- if (!tc->linked)
+ if (!(tc->state & CLASS_LINKED))
if (!link_class(tc))
return NULL;
}
return NULL;
}
- assert(super->loaded);
+ assert(super->state & CLASS_LOADED);
if (super->flags & ACC_INTERFACE) {
/* java.lang.IncompatibleClassChangeError: class a has interface java.lang.Cloneable as super class */
return NULL;
}
- if (!super->linked)
+ if (!(super->state & CLASS_LINKED))
if (!link_class(super))
return NULL;
linker_compute_subclasses(c);
+ /* revert the linking state and class is linked */
+
+ c->state = (c->state & ~CLASS_LINKING) | CLASS_LINKED;
+
if (linkverbose)
log_message_class("Linking done class: ", c);
}
/* If the component type has not been linked, link it now */
- assert(!comp || comp->loaded);
- if (comp && !comp->linked) {
+ assert(!comp || (comp->state & CLASS_LOADED));
+
+ if (comp && !(comp->state & CLASS_LINKED))
if (!link_class(comp))
return NULL;
- }
/* Allocate the arraydescriptor */
+
desc = NEW(arraydescriptor);
if (comp) {
Edwin Steiner
Christian Thalinger
- $Id: loader.c 3842 2005-12-02 15:26:16Z twisti $
+ $Id: loader.c 3888 2005-12-05 22:08:45Z twisti $
*/
LOADER_ASSERT(class_java_lang_Object);
LOADER_ASSERT(class_java_lang_ClassLoader);
- LOADER_ASSERT(class_java_lang_ClassLoader->linked);
+ LOADER_ASSERT(class_java_lang_ClassLoader->state & CLASS_LINKED);
m = class_resolveclassmethod(class_java_lang_ClassLoader,
utf_getSystemClassLoader,
if (tmpc == NULL) {
/* exception, free the loaded class */
- c->loaded = false;
+ c->state &= ~CLASS_LOADING;
class_free(c);
}
if (tmpc == NULL) {
/* exception, free the loaded class */
- c->loaded = false;
+ c->state &= ~CLASS_LOADING;
class_free(c);
}
if (tmpc == NULL) {
/* exception, free the loaded class */
- c->loaded = false;
+ c->state &= ~CLASS_LOADING;
class_free(c);
}
c = load_newly_created_array(c, NULL);
if (c == NULL)
return NULL;
- LOADER_ASSERT(c->loaded);
+ LOADER_ASSERT(c->state & CLASS_LOADED);
return c;
}
c = cb->class;
- /* maybe the class is already loaded */
+ /* the class is already loaded */
- if (c->loaded)
+ if (c->state & CLASS_LOADED)
return c;
#if defined(STATISTICS)
dumpsize = dump_size();
- /* class is somewhat loaded */
+ /* class is currently loading */
- c->loaded = true;
+ c->state |= CLASS_LOADING;
if (!suck_check_classbuffer_size(cb, 4 + 2 + 2))
goto return_exception;
/* release dump area */
dump_release(dumpsize);
-
+
+ /* revert loading state and class is loaded */
+
+ c->state = (c->state & ~CLASS_LOADING) | CLASS_LOADED;
+
if (loadverbose)
log_message_class("Loading done class: ", c);
if (!(comp = load_class_from_classloader(u, loader)))
return NULL;
- LOADER_ASSERT(comp->loaded);
+ LOADER_ASSERT(comp->state & CLASS_LOADED);
if (opt_eager)
if (!link_class(c))
if (!(comp = load_class_from_classloader(u, loader)))
return NULL;
- LOADER_ASSERT(comp->loaded);
+ LOADER_ASSERT(comp->state & CLASS_LOADED);
if (opt_eager)
if (!link_class(c))
classinfo *tc;
tc = class_java_lang_Cloneable;
- LOADER_ASSERT(tc->loaded);
+ LOADER_ASSERT(tc->state & CLASS_LOADED);
list_addfirst(&unlinkedclasses, tc);
c->interfaces[0].cls = tc;
tc = class_java_io_Serializable;
- LOADER_ASSERT(tc->loaded);
+ LOADER_ASSERT(tc->state & CLASS_LOADED);
list_addfirst(&unlinkedclasses, tc);
c->interfaces[1].cls = tc;
/* array classes are not loaded from class files */
- c->loaded = true;
+ c->state |= CLASS_LOADED;
c->parseddescs = (u1 *) clonedesc;
c->parseddescsize = sizeof(methodinfo);
c->classrefs = classrefs;
Changes: Christan Thalinger
- $Id: resolve.c 3811 2005-11-28 16:23:40Z edwin $
+ $Id: resolve.c 3888 2005-12-05 22:08:45Z twisti $
*/
/* the class is now loaded */
assert(cls);
- assert(cls->loaded);
+ assert(cls->state & CLASS_LOADED);
#ifdef RESOLVE_VERBOSE
fprintf(stderr," checking access rights...\n");
/* link the class if necessary */
if (link) {
- if (!cls->linked)
+ if (!(cls->state & CLASS_LINKED))
if (!link_class(cls))
return false; /* exception */
- assert(cls->linked);
+
+ assert(cls->state & CLASS_LINKED);
}
/* resolution succeeds */
} else {
/* cls has already been resolved */
c = cls.cls;
- assert(c->loaded);
+ assert(c->state & CLASS_LOADED);
}
assert(c || (mode == resolveLazy));
return true; /* be lazy */
assert(c);
- assert(c->loaded);
+ assert(c->state & CLASS_LOADED);
if (link) {
- if (!c->linked)
+ if (!(c->state & CLASS_LINKED))
if (!link_class(c))
goto return_exception;
- assert(c->linked);
+ assert(c->state & CLASS_LINKED);
}
/* succeeded */
else {
/* a primitive type */
cls = primitivetype_table[d->decltype].class_primitive;
- assert(cls->loaded);
- if (!cls->linked)
+ assert(cls->state & CLASS_LOADED);
+ if (!(cls->state & CLASS_LINKED))
if (!link_class(cls))
return false; /* exception */
}
assert(cls);
- assert(cls->loaded);
- assert(!link || cls->linked);
+ assert(cls->state & CLASS_LOADED);
+ assert(!link || (cls->state & CLASS_LINKED));
#ifdef RESOLVE_VERBOSE
fprintf(stderr," result = ");utf_fprint(stderr,cls->name);fprintf(stderr,"\n");
return true; /* be lazy */
assert(type);
- assert(type->loaded);
- assert(type->linked);
+ assert(type->state & CLASS_LOADED);
+ assert(type->state & CLASS_LINKED);
typeinfo_init_classinfo(&typeti,type);
for (; setp->any; ++setp) {
return true; /* be lazy */
assert(result);
- assert(result->loaded);
- assert(result->linked);
+ assert(result->state & CLASS_LOADED);
+ assert(result->state & CLASS_LINKED);
/* do not check access to protected members of arrays */
return true; /* be lazy */
assert(cls);
- assert(cls->loaded && cls->linked);
+ assert((cls->state & CLASS_LOADED) && (cls->state & CLASS_LINKED));
/* now we check the subtype constraints */
if (!resolve_and_check_subtype_set(ref->classref->referer,ref->referermethod,
return true; /* be lazy */
assert(container);
- assert(container->loaded && container->linked);
+ assert(container->state & CLASS_LOADED);
+ assert(container->state & CLASS_LINKED);
/* now we must find the declaration of the field in `container`
* or one of its superclasses */
/* { the field reference has been resolved } */
declarer = fi->class;
assert(declarer);
- assert(declarer->loaded && declarer->linked);
+ assert(declarer->state & CLASS_LOADED);
+ assert(declarer->state & CLASS_LINKED);
#ifdef RESOLVE_VERBOSE
fprintf(stderr," checking static...\n");
return true; /* be lazy */
assert(container);
- assert(container->linked);
+ assert(container->state & CLASS_LINKED);
/* now we must find the declaration of the method in `container`
* or one of its superclasses */
declarer = mi->class;
assert(declarer);
- assert(referer->linked);
+ assert(referer->state & CLASS_LINKED);
/* checks for INVOKESPECIAL: */
/* for <init> and methods of the current class we don't need any */
}
/* XXX check that class of field == refmethod->class */
initclass = refmethod->class; /* XXX classrefs */
- assert(initclass->loaded && initclass->linked);
+ assert(initclass->state & CLASS_LOADED);
+ assert(initclass->state & CLASS_LINKED);
+
typeinfo_init_classinfo(&tinfo,initclass);
insttip = &tinfo;
}
tip = &tinfo;
if (INSTRUCTION_PUTCONST_VALUE_ADR(iptr)) {
assert(class_java_lang_String);
- assert(class_java_lang_String->loaded);
- assert(class_java_lang_String->linked);
+ assert(class_java_lang_String->state & CLASS_LOADED);
+ assert(class_java_lang_String->state & CLASS_LINKED);
typeinfo_init_classinfo(&tinfo,class_java_lang_String);
}
else
Changes: Christian Thalinger
- $Id: string.c 3832 2005-12-01 23:19:29Z twisti $
+ $Id: string.c 3888 2005-12-05 22:08:45Z twisti $
*/
class_java_lang_String = load_class_bootstrap(utf_java_lang_String);
assert(class_java_lang_String);
- assert(class_java_lang_String->loaded);
+ assert(class_java_lang_String->state & CLASS_LOADED);
/* if we use eager loading, we have to check loaded String class */