[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