[vmkit-commits] [vmkit] r55195 - in /vmkit/trunk/lib/JnJVM/VMCore: JavaClass.cpp JavaConstantPool.cpp Jnjvm.cpp JnjvmClassLoader.cpp JnjvmClassLoader.h
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Fri Aug 22 12:34:01 PDT 2008
Author: geoffray
Date: Fri Aug 22 14:34:01 2008
New Revision: 55195
URL: http://llvm.org/viewvc/llvm-project?rev=55195&view=rev
Log:
Let the class also resolve itself.
Modified:
vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.cpp
vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp?rev=55195&r1=55194&r2=55195&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp Fri Aug 22 14:34:01 2008
@@ -431,7 +431,7 @@
while (res && Tname->elements[prof] == AssessorDesc::I_TAB) {
CommonClass* cl = ((ClassArray*)curS)->baseClass();
++prof;
- classLoader->resolveClass(cl);
+ cl->resolveClass();
res = curS->isArray && cl && (prof < len);
curS = cl;
}
@@ -531,10 +531,6 @@
return JavaThread::get()->isolate->getClassDelegatee(this, pd);
}
-void CommonClass::resolveClass() {
- classLoader->resolveClass(this);
-}
-
#ifdef MULTIPLE_VM
JavaObject* Class::staticInstance() {
std::pair<JavaState, JavaObject*>* val =
@@ -729,3 +725,40 @@
readMethods(reader);
readAttributs(reader, attributs);
}
+
+void CommonClass::resolveClass() {
+ if (status < resolved) {
+ acquire();
+ if (status >= resolved) {
+ release();
+ } else if (status < loaded) {
+ release();
+ JavaThread::get()->isolate->unknownError("try to resolve a not-read class");
+ } else if (status == loaded || ownerClass()) {
+ if (isArray) {
+ ClassArray* arrayCl = (ClassArray*)this;
+ CommonClass* baseClass = arrayCl->baseClass();
+ baseClass->resolveClass();
+ status = resolved;
+ // Primitives are resolved at boot time
+ } else {
+ Class* cl = (Class*)this;
+ cl->readClass();
+ cl->status = classRead;
+ cl->release();
+ cl->loadParents();
+ cl->acquire();
+ cl->status = prepared;
+ classLoader->TheModule->resolveVirtualClass(cl);
+ cl->status = resolved;
+ }
+ release();
+ broadcastClass();
+ } else {
+ while (status < resolved) {
+ waitClass();
+ }
+ release();
+ }
+ }
+}
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.cpp?rev=55195&r1=55194&r2=55195&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.cpp Fri Aug 22 14:34:01 2008
@@ -272,7 +272,7 @@
const UTF8* name = UTF8At(ctpDef[index]);
if (name->elements[0] == AssessorDesc::I_TAB) {
temp = loader->constructArray(name);
- loader->resolveClass(temp);
+ temp->resolveClass();
} else {
// Put into ctpRes because there is only one representation of the class
temp = loader->loadName(name, true, false);
Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp?rev=55195&r1=55194&r2=55195&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Fri Aug 22 14:34:01 2008
@@ -89,7 +89,8 @@
void Jnjvm::initialiseClass(CommonClass* cl) {
JavaState* status = cl->getStatus();
- if (cl->isArray || cl->isPrimitive) {
+ // Primitives are initialized at boot time
+ if (cl->isArray) {
*status = ready;
} else if (!(*status == ready)) {
cl->acquire();
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp?rev=55195&r1=55194&r2=55195&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp Fri Aug 22 14:34:01 2008
@@ -129,43 +129,6 @@
}
-void JnjvmClassLoader::resolveClass(CommonClass* cl) {
- if (cl->status < resolved) {
- cl->acquire();
- int status = cl->status;
- if (status >= resolved) {
- cl->release();
- } else if (status < loaded) {
- cl->release();
- JavaThread::get()->isolate->unknownError("try to resolve a not-read class");
- } else if (status == loaded || cl->ownerClass()) {
- if (cl->isArray) {
- ClassArray* arrayCl = (ClassArray*)cl;
- CommonClass* baseClass = arrayCl->baseClass();
- baseClass->resolveClass();
- cl->status = resolved;
- } else {
- Class* regCl = (Class*)cl;
- regCl->readClass();
- regCl->status = classRead;
- regCl->release();
- regCl->loadParents();
- regCl->acquire();
- regCl->status = prepared;
- TheModule->resolveVirtualClass(regCl);
- regCl->status = resolved;
- }
- cl->release();
- cl->broadcastClass();
- } else {
- while (status < resolved) {
- cl->waitClass();
- }
- cl->release();
- }
- }
-}
-
CommonClass* JnjvmBootstrapLoader::internalLoad(const UTF8* name) {
CommonClass* cl = lookupClass(name);
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h?rev=55195&r1=55194&r2=55195&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h Fri Aug 22 14:34:01 2008
@@ -149,10 +149,6 @@
CommonClass* lookupClassFromJavaString(JavaString* str, bool doResolve,
bool doThrow);
- /// resolveClass - Resolves the class.
- ///
- void resolveClass(CommonClass* cl);
-
/// lookupClass - Finds the class of th given name in the class loader's
/// table.
///
More information about the vmkit-commits
mailing list