[vmkit-commits] [vmkit] r55308 - in /vmkit/trunk/lib/JnJVM/VMCore: JavaClass.cpp JavaClass.h JavaInitialise.cpp JavaUpcalls.h JnjvmClassLoader.cpp JnjvmClassLoader.h

Nicolas Geoffray nicolas.geoffray at lip6.fr
Mon Aug 25 01:40:11 PDT 2008


Author: geoffray
Date: Mon Aug 25 03:40:11 2008
New Revision: 55308

URL: http://llvm.org/viewvc/llvm-project?rev=55308&view=rev
Log:
Simplify things: a class can not be hashed without its bytes.


Modified:
    vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
    vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.h
    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=55308&r1=55307&r2=55308&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp Mon Aug 25 03:40:11 2008
@@ -210,7 +210,7 @@
   name = n;
   this->lockVar = mvm::Lock::allocRecursive();
   this->condVar = mvm::Cond::allocCond();
-  this->status = hashed;
+  this->status = loaded;
   this->classLoader = loader;
   this->isArray = isArray;
   this->isPrimitive = false;
@@ -229,8 +229,9 @@
   access = ACC_ABSTRACT | ACC_FINAL | ACC_PUBLIC;
 }
 
-Class::Class(JnjvmClassLoader* loader, const UTF8* n) : CommonClass(loader, n, false) {
-  bytes = 0;
+Class::Class(JnjvmClassLoader* loader, const UTF8* n, ArrayUInt8* B) : 
+    CommonClass(loader, n, false) {
+  bytes = B;
   super = 0;
   ctpInfo = 0;
 #ifndef MULTIPLE_VM
@@ -248,7 +249,6 @@
   display[0] = ClassArray::SuperArray;
   display[1] = this;
   access = ACC_FINAL | ACC_ABSTRACT;
-  status = loaded;
 }
 
 void Class::print(mvm::PrintBuffer* buf) const {

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h?rev=55308&r1=55307&r2=55308&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h Mon Aug 25 03:40:11 2008
@@ -46,8 +46,7 @@
 /// and accessing static fields of the class) when it is in the ready state.
 ///
 typedef enum JavaState {
-  hashed = 0,   /// The class is hashed in a class loader table.
-  loaded,       /// The .class file has been found.
+  loaded = 0,       /// The .class file has been found.
   classRead,    /// The .class file has been read.
   prepared,     /// The parents of this class has been resolved.
   resolved,     /// The class has been resolved.
@@ -550,7 +549,7 @@
   
   /// Class - Create a class in the given virtual machine and with the given
   /// name.
-  Class(JnjvmClassLoader* loader, const UTF8* name);
+  Class(JnjvmClassLoader* loader, const UTF8* name, ArrayUInt8* bytes);
   
   /// readParents - Reads the parents, i.e. super and interfaces, of the class.
   ///
@@ -586,11 +585,6 @@
     return bytes;
   }
   
-  void setBytes(ArrayUInt8* B) {
-    bytes = B;
-    status = loaded;
-  }
-
   void resolveInnerOuterClasses();
 
   Class* getOuterClass() {

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp?rev=55308&r1=55307&r2=55308&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp Mon Aug 25 03:40:11 2008
@@ -79,17 +79,18 @@
   const UTF8* utf8OfChar = JCL->asciizConstructUTF8("[C");
   JavaArray::ofChar = JCL->constructArray(utf8OfChar);
   ((UTF8*)utf8OfChar)->classOf = JavaArray::ofChar;
-  
-
- 
+   
   ClassArray::InterfacesArray.push_back(
-    JCL->constructClass(JCL->asciizConstructUTF8("java/lang/Cloneable")));
+    JCL->loadName(JCL->asciizConstructUTF8("java/lang/Cloneable"), false,
+                  false));
   
   ClassArray::InterfacesArray.push_back(
-    JCL->constructClass(JCL->asciizConstructUTF8("java/io/Serializable")));
+    JCL->loadName(JCL->asciizConstructUTF8("java/io/Serializable"), false,
+                  false));
   
   ClassArray::SuperArray = 
-    JCL->constructClass(JCL->asciizConstructUTF8("java/lang/Object"));
+    JCL->loadName(JCL->asciizConstructUTF8("java/lang/Object"), false,
+                  false);
   
   JavaArray::ofChar->interfaces = ClassArray::InterfacesArray;
   JavaArray::ofChar->super = ClassArray::SuperArray;

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.h?rev=55308&r1=55307&r2=55308&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.h Mon Aug 25 03:40:11 2008
@@ -12,7 +12,7 @@
 
 
 #define UPCALL_CLASS(vm, name)                                             \
-  vm->constructClass(vm->asciizConstructUTF8(name))                        
+  vm->loadName(vm->asciizConstructUTF8(name), false, false)                        
 
 #define UPCALL_FIELD(vm, cl, name, type, acc)                              \
   UPCALL_CLASS(vm, cl)->constructField(vm->asciizConstructUTF8(name),      \

Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp?rev=55308&r1=55307&r2=55308&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp Mon Aug 25 03:40:11 2008
@@ -129,7 +129,7 @@
 }
 
 
-CommonClass* JnjvmBootstrapLoader::internalLoad(const UTF8* name) {
+Class* JnjvmBootstrapLoader::internalLoad(const UTF8* name) {
   
   CommonClass* cl = lookupClass(name);
   
@@ -138,28 +138,16 @@
     if (bytes) {
       cl = constructClass(name, bytes);
     }
-  } else if (cl->status == hashed) {
-    ArrayUInt8* bytes = openName(name);
-    if (bytes) {
-      if (cl->status == hashed) {
-        cl->acquire();
-        if (cl->status == hashed) {
-          ((Class*)cl)->setBytes(bytes);
-        }
-        cl->release();
-      }
-    } else {
-      cl = 0;
-    }
   }
-
-  return cl;
+  
+  if (cl) assert(!cl->isArray);
+  return (Class*)cl;
 }
 
-CommonClass* JnjvmClassLoader::internalLoad(const UTF8* name) {
+Class* JnjvmClassLoader::internalLoad(const UTF8* name) {
   CommonClass* cl = lookupClass(name);
   
-  if (!cl || cl->status == hashed) {
+  if (!cl) {
     const UTF8* javaName = name->internalToJava(hashUTF8, 0, name->size);
     JavaString* str = isolate->UTF8ToStr(javaName);
     JavaObject* obj = (JavaObject*)
@@ -168,14 +156,15 @@
     cl = (CommonClass*)(Classpath::vmdataClass->getVirtualObjectField(obj));
   }
   
-  return cl;
+  if (cl) assert(!cl->isArray);
+  return (Class*)cl;
 }
 
-CommonClass* JnjvmClassLoader::loadName(const UTF8* name, bool doResolve,
+Class* JnjvmClassLoader::loadName(const UTF8* name, bool doResolve,
                                         bool doThrow) {
  
 
-  CommonClass* cl = internalLoad(name);
+  Class* cl = internalLoad(name);
 
   if (!cl && doThrow) {
     if (!(name->equals(Jnjvm::NoClassDefFoundError))) {
@@ -288,6 +277,7 @@
 
 
 Class* JnjvmClassLoader::constructClass(const UTF8* name, ArrayUInt8* bytes) {
+  assert(bytes && "constructing a class without bytes");
 #ifdef MULTIPLE_VM
   if (this != bootstrapLoader && this != sharedLoader && bytes) {
     Class* cl = sharedLoader->constructSharedClass(name, bytes);
@@ -299,16 +289,10 @@
   ClassMap::iterator I = classes->map.find(name);
   Class* res = 0;
   if (I == End) {
-    res = allocator_new(allocator, Class)(this, name);
-    if (bytes) {
-      res->setBytes(bytes);
-    }
+    res = allocator_new(allocator, Class)(this, name, bytes);
     classes->map.insert(std::make_pair(name, res));
   } else {
     res = ((Class*)(I->second));
-    if (res->status == hashed && bytes) {
-      res->setBytes(bytes);
-    }
   }
   classes->lock->unlock();
   return res;

Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h?rev=55308&r1=55307&r2=55308&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h Mon Aug 25 03:40:11 2008
@@ -64,7 +64,7 @@
    
   /// internalLoad - Load the class with the given name.
   ///
-  virtual CommonClass* internalLoad(const UTF8* utf8);
+  virtual Class* internalLoad(const UTF8* utf8);
   
   /// JnjvmClassLoader - Allocate a user-defined class loader. Called on
   /// first use of a Java class loader.
@@ -136,7 +136,7 @@
   
   /// loadName - Loads the class of the given name.
   ///
-  CommonClass* loadName(const UTF8* name, bool doResolve, bool doThrow);
+  Class* loadName(const UTF8* name, bool doResolve, bool doThrow);
   
   /// lookupClassFromUTF8 - Lookup a class from an UTF8 name and load it.
   ///
@@ -162,7 +162,7 @@
   /// constructClass - Hashes a runtime representation of a class with
   /// the given name.
   ///
-  Class* constructClass(const UTF8* name, ArrayUInt8* bytes = 0);
+  Class* constructClass(const UTF8* name, ArrayUInt8* bytes);
   
   /// constructType - Hashes a Typedef, an internal representation of a class
   /// still not loaded.
@@ -217,7 +217,7 @@
   
   /// internalLoad - Load the class with the given name.
   ///
-  virtual CommonClass* internalLoad(const UTF8* utf8) {
+  virtual Class* internalLoad(const UTF8* utf8) {
     fprintf(stderr, "Don't use me");
     exit(1);
   }
@@ -246,7 +246,7 @@
 private:
   /// internalLoad - Load the class with the given name.
   ///
-  virtual CommonClass* internalLoad(const UTF8* utf8);
+  virtual Class* internalLoad(const UTF8* utf8);
      
   /// bootClasspath - List of paths for the base classes.
   ///





More information about the vmkit-commits mailing list