[vmkit-commits] [vmkit] r55369 - in /vmkit/branches/isolate/lib/JnJVM: Classpath/ Isolate/ VMCore/

Nicolas Geoffray nicolas.geoffray at lip6.fr
Tue Aug 26 08:45:08 PDT 2008


Author: geoffray
Date: Tue Aug 26 10:45:03 2008
New Revision: 55369

URL: http://llvm.org/viewvc/llvm-project?rev=55369&view=rev
Log:
New reorganization. SingleVM still compiles and runs normally,
MultiVM compiles.


Modified:
    vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp.inc
    vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathVMSystem.cpp.inc
    vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.h
    vmkit/branches/isolate/lib/JnJVM/VMCore/JavaBacktrace.cpp
    vmkit/branches/isolate/lib/JnJVM/VMCore/JavaCache.h
    vmkit/branches/isolate/lib/JnJVM/VMCore/JavaClass.cpp
    vmkit/branches/isolate/lib/JnJVM/VMCore/JavaClass.h
    vmkit/branches/isolate/lib/JnJVM/VMCore/JavaConstantPool.cpp
    vmkit/branches/isolate/lib/JnJVM/VMCore/JavaConstantPool.h
    vmkit/branches/isolate/lib/JnJVM/VMCore/JavaInitialise.cpp
    vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJIT.cpp
    vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJIT.h
    vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJITOpcodes.cpp
    vmkit/branches/isolate/lib/JnJVM/VMCore/JavaMetaJIT.cpp
    vmkit/branches/isolate/lib/JnJVM/VMCore/JavaObject.cpp
    vmkit/branches/isolate/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp
    vmkit/branches/isolate/lib/JnJVM/VMCore/JavaString.cpp
    vmkit/branches/isolate/lib/JnJVM/VMCore/JavaTypes.cpp
    vmkit/branches/isolate/lib/JnJVM/VMCore/JavaTypes.h
    vmkit/branches/isolate/lib/JnJVM/VMCore/JavaUpcalls.cpp
    vmkit/branches/isolate/lib/JnJVM/VMCore/JavaUpcalls.h
    vmkit/branches/isolate/lib/JnJVM/VMCore/Jni.cpp
    vmkit/branches/isolate/lib/JnJVM/VMCore/Jnjvm.cpp
    vmkit/branches/isolate/lib/JnJVM/VMCore/Jnjvm.h
    vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
    vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmClassLoader.h
    vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmModule.cpp
    vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp
    vmkit/branches/isolate/lib/JnJVM/VMCore/LockedMap.h
    vmkit/branches/isolate/lib/JnJVM/VMCore/NativeUtil.cpp
    vmkit/branches/isolate/lib/JnJVM/VMCore/Reader.cpp
    vmkit/branches/isolate/lib/JnJVM/VMCore/VirtualTables.cpp

Modified: vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp.inc?rev=55369&r1=55368&r2=55369&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp.inc (original)
+++ vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp.inc Tue Aug 26 10:45:03 2008
@@ -37,7 +37,7 @@
   if (!ass)
     vm->unknownError("unknown byte primitive %c", byteId);
   
-  return (jobject)ass->classType->getClassDelegatee(vm);
+  return (jobject)ass->getPrimitiveClass()->getClassDelegatee(vm);
   
 }
 

Modified: vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathVMSystem.cpp.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathVMSystem.cpp.inc?rev=55369&r1=55368&r2=55369&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathVMSystem.cpp.inc (original)
+++ vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathVMSystem.cpp.inc Tue Aug 26 10:45:03 2008
@@ -49,8 +49,8 @@
   UserCommonClass* dstType = td->baseClass();
   AssessorDesc* dstFuncs = td->funcs();
   AssessorDesc* srcFuncs = ts->funcs();
-  UserCommonClass* srcPrim = vm->getPrimitiveClass(srcFuncs);
-  UserCommonClass* dstPrim = vm->getPrimitiveClass(dstFuncs);
+  UserCommonClass* srcPrim = srcFuncs->getPrimitiveClass();
+  UserCommonClass* dstPrim = dstFuncs->getPrimitiveClass();
 
   if (len > src->size) {
     vm->indexOutOfBounds(src, len);

Modified: vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.h?rev=55369&r1=55368&r2=55369&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.h (original)
+++ vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.h Tue Aug 26 10:45:03 2008
@@ -20,12 +20,14 @@
 class Class;
 class ClassArray;
 class ClassPrimitive;
+class JavaConstantPool;
 class JavaField;
 class JavaMethod;
 class JavaObject;
 class Jnjvm;
 class JnjvmClassLoader;
 class UserClass;
+class UserClassArray;
 class UTF8;
 
 class UserCommonClass : public mvm::Object {
@@ -48,6 +50,7 @@
   bool isArray();
   bool isPrimitive();
   bool isInterface();
+  bool isReady();
   uint8 getAccess();
   const UTF8* getName();
 
@@ -67,8 +70,28 @@
                                     bool isStatic, bool recurse);
   JavaMethod* lookupMethod(const UTF8* name, const UTF8* type,
                            bool isStatic, bool recurse);
+  JavaField* lookupField(const UTF8* name, const UTF8* type,
+                         bool isStatic, bool recurse,
+                         UserCommonClass*& fieldCl);
   
   uint64 getVirtualSize();
+  VirtualTable* getVirtualVT();
+
+  void setInterfaces(std::vector<UserClass*> Is);
+  void setSuper(UserClass* S);
+
+  bool instantiationOfArray(UserClassArray* cl);
+  bool implements(UserCommonClass* cl);
+
+  /// constructMethod - Add a new method in this class method map.
+  ///
+  JavaMethod* constructMethod(const UTF8* name, const UTF8* type,
+                              uint32 access);
+  
+  /// constructField - Add a new field in this class field map.
+  ///
+  JavaField* constructField(const UTF8* name, const UTF8* type,
+                            uint32 access);
 };
 
 class UserClass : public UserCommonClass {
@@ -86,7 +109,13 @@
   UserClass* getOuterClass();
   void resolveInnerOuterClasses();
   JavaObject* getStaticInstance();
+  JavaConstantPool* getConstantPool();
+
+  void setStaticSize(uint64 size);
+  void setStaticVT(VirtualTable* VT);
   
+  uint64 getStaticSize();
+  VirtualTable* getStaticVT();
 };
 
 class UserClassArray : public UserCommonClass {
@@ -107,7 +136,7 @@
 public:
   
   virtual void TRACER;
-  UserClassPrimitive(JnjvmClassLoader* JCL, const UTF8* name);
+  UserClassPrimitive(JnjvmClassLoader* JCL, const UTF8* name, uint32 nb);
 };
 
 } // end namespace jnjvm

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaBacktrace.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaBacktrace.cpp?rev=55369&r1=55368&r2=55369&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaBacktrace.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaBacktrace.cpp Tue Aug 26 10:45:03 2008
@@ -61,7 +61,8 @@
 
 
 
-Class* JavaJIT::getCallingClass() {
+#ifndef MULTIPLE_VM
+UserClass* JavaJIT::getCallingClass() {
   int* ips[10];
   int real_size = mvm::jit::getBacktrace((void**)(void*)ips, 10);
   int n = 0;
@@ -82,7 +83,7 @@
   return 0;
 }
 
-Class* JavaJIT::getCallingClassWalker() {
+UserClass* JavaJIT::getCallingClassWalker() {
   int* ips[10];
   int real_size = mvm::jit::getBacktrace((void**)(void*)ips, 10);
   int n = 0;
@@ -102,9 +103,19 @@
   }
   return 0;
 }
+#else
+UserClass* JavaJIT::getCallingClassWalker() {
+  fprintf(stderr, "implement me");
+  abort();
+}
+UserClass* JavaJIT::getCallingClass() {
+  fprintf(stderr, "implement me");
+  abort();
+}
+#endif
 
 JavaObject* JavaJIT::getCallingClassLoader() {
-  Class* cl = getCallingClassWalker();
+  UserClass* cl = getCallingClassWalker();
   if (!cl) return 0;
   else return cl->classLoader->getJavaClassLoader();
 }

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaCache.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaCache.h?rev=55369&r1=55368&r2=55369&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaCache.h (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaCache.h Tue Aug 26 10:45:03 2008
@@ -29,9 +29,9 @@
 
 namespace jnjvm {
 
-class Class;
 class Enveloppe;
 class JavaConstantPool;
+class UserClass;
 
 /// CacheNode - A {class, method pointer} pair.
 class CacheNode {
@@ -41,7 +41,7 @@
   void* methPtr;
 
   /// lastCible - The class of this cache.
-  Class* lastCible;
+  UserClass* lastCible;
 
   /// next - The next cache.
   CacheNode* next;

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaClass.cpp?rev=55369&r1=55368&r2=55369&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaClass.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaClass.cpp Tue Aug 26 10:45:03 2008
@@ -39,10 +39,6 @@
 const UTF8* Attribut::innerClassesAttribut = 0;
 const UTF8* Attribut::sourceFileAttribut = 0;
 
-CommonClass* ClassArray::SuperArray = 0;
-std::vector<Class*> ClassArray::InterfacesArray;
-
-
 Attribut::Attribut(const UTF8* name, uint32 length,
                    uint32 offset) {
   
@@ -219,7 +215,9 @@
 #endif
 }
 
-ClassPrimitive::ClassPrimitive(JnjvmClassLoader* loader, const UTF8* n) : 
+#ifndef MULTIPLE_VM
+ClassPrimitive::ClassPrimitive(JnjvmClassLoader* loader, const UTF8* n,
+                               uint32 nb) : 
   CommonClass(loader, n, false) {
   
   display = (CommonClass**)malloc(sizeof(CommonClass*));
@@ -227,6 +225,7 @@
   primitive = true;
   status = ready;
   access = ACC_ABSTRACT | ACC_FINAL | ACC_PUBLIC;
+  virtualSize = nb;
 }
 
 Class::Class(JnjvmClassLoader* loader, const UTF8* n, ArrayUInt8* B) : 
@@ -234,22 +233,21 @@
   bytes = B;
   super = 0;
   ctpInfo = 0;
-#ifndef MULTIPLE_VM
   _staticInstance = 0;
-#endif
 }
 
 ClassArray::ClassArray(JnjvmClassLoader* loader, const UTF8* n) : CommonClass(loader, n, true) {
   _funcs = 0;
   _baseClass = 0;
-  super = ClassArray::SuperArray;
-  interfaces = ClassArray::InterfacesArray;
+  super = JnjvmBootstrapLoader::SuperArray;
+  interfaces = JnjvmBootstrapLoader::InterfacesArray;
   depth = 1;
   display = (CommonClass**)malloc(2 * sizeof(CommonClass*));
-  display[0] = ClassArray::SuperArray;
+  display[0] = JnjvmBootstrapLoader::SuperArray;
   display[1] = this;
   access = ACC_FINAL | ACC_ABSTRACT;
 }
+#endif
 
 void Class::print(mvm::PrintBuffer* buf) const {
   buf->write("Class<");
@@ -263,10 +261,12 @@
   buf->write(">");
 }
 
+#ifndef MULTIPLE_VM
 void ClassArray::resolveComponent() {
   AssessorDesc::introspectArray(classLoader, name, 0, _funcs,
                                 _baseClass);
 }
+#endif
 
 JnjvmClassLoader* ClassArray::arrayLoader(const UTF8* name,
                                           JnjvmClassLoader* loader,
@@ -278,7 +278,7 @@
   } else if (name->elements[start] == AssessorDesc::I_REF) {
     const UTF8* componentName = name->javaToInternal(loader->hashUTF8, start + 1,
                                                      len - 2);
-    CommonClass* cl = loader->loadName(componentName, false, true);
+    UserCommonClass* cl = loader->loadName(componentName, false, true);
     return cl->classLoader;
   } else {
     return JnjvmClassLoader::bootstrapLoader;
@@ -361,25 +361,36 @@
 
 JavaField* CommonClass::lookupFieldDontThrow(const UTF8* name,
                                              const UTF8* type, bool isStatic,
-                                             bool recurse) {
+                                             bool recurse,
+                                             CommonClass*& definingClass) {
 
   FieldCmp CC(name, type);
   field_map& map = isStatic ? staticFields : virtualFields;
   field_iterator End = map.end();
   field_iterator I = map.find(CC);
-  if (I != End) return I->second;
+  if (I != End) {
+    definingClass = this;
+    return I->second;
+  }
   
   JavaField *cur = 0;
 
   if (recurse) {
     if (super) cur = super->lookupFieldDontThrow(name, type, isStatic,
-                                                 recurse);
-    if (cur) return cur;
+                                                 recurse, definingClass);
+    if (cur) {
+      definingClass = (Class*)super;
+      return cur;
+    }
     if (isStatic) {
       for (std::vector<Class*>::iterator i = interfaces.begin(),
            e = interfaces.end(); i!= e; i++) {
-        cur = (*i)->lookupFieldDontThrow(name, type, isStatic, recurse);
-        if (cur) return cur;
+        cur = (*i)->lookupFieldDontThrow(name, type, isStatic, recurse,
+                                         definingClass);
+        if (cur) {
+          definingClass = *i;
+          return cur;
+        }
       }
     }
   }
@@ -388,21 +399,25 @@
 }
 
 JavaField* CommonClass::lookupField(const UTF8* name, const UTF8* type,
-                                    bool isStatic, bool recurse) {
+                                    bool isStatic, bool recurse,
+                                    CommonClass*& definingClass) {
   
-  JavaField* res = lookupFieldDontThrow(name, type, isStatic, recurse);
+  JavaField* res = lookupFieldDontThrow(name, type, isStatic, recurse,
+                                        definingClass);
   if (!res) {
     JavaThread::get()->isolate->noSuchFieldError(this, name);
   }
   return res;
 }
 
+#ifndef MULTIPLE_VM
 JavaObject* Class::doNew(Jnjvm* vm) {
   assert(this->isReady() && "Uninitialized class when allocating.");
   JavaObject* res = (JavaObject*)vm->allocator.allocateObject(virtualSize, virtualVT);
   res->classOf = this;
   return res;
 }
+#endif
 
 bool CommonClass::inheritName(const UTF8* Tname) {
   if (name->equals(Tname)) {
@@ -585,6 +600,7 @@
 
 }
 
+#ifndef MULTIPLE_VM
 void Class::loadParents() {
   int nbI = interfacesUTF8.size();
   if (superUTF8 == 0) {
@@ -605,6 +621,7 @@
     interfaces.push_back((Class*)classLoader->loadName(interfacesUTF8[i],
                                                        true, true));
 }
+#endif
 
 void Class::readAttributs(Reader& reader, std::vector<Attribut*>& attr) {
   unsigned short int nba = reader.readU2();
@@ -712,7 +729,8 @@
   }
 }
 
-void Class::resolveInnerOuterClasses() {
+#ifndef MULTIPLE_VM
+void UserClass::resolveInnerOuterClasses() {
   if (!innerOuterResolved) {
     Attribut* attribut = lookupAttribut(Attribut::innerClassesAttribut);
     if (attribut != 0) {
@@ -739,6 +757,7 @@
     innerOuterResolved = true;
   }
 }
+#endif
 
 void CommonClass::getDeclaredConstructors(std::vector<JavaMethod*>& res,
                                           bool publicOnly) {

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaClass.h?rev=55369&r1=55368&r2=55369&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaClass.h (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaClass.h Tue Aug 26 10:45:03 2008
@@ -182,6 +182,10 @@
   uint32 getVirtualSize() {
     return virtualSize;
   }
+  
+  VirtualTable* getVirtualVT() {
+    return virtualVT;
+  }
 
   /// virtualTableSize - The size of the virtual table of this class.
   ///
@@ -215,9 +219,11 @@
     return jnjvm::isInterface(access);
   }
 
+#ifndef MULTIPLE_VM
   std::vector<Class*> * getInterfaces() {
     return &interfaces;
   }
+#endif
   
   /// name - The name of the class.
   ///
@@ -230,7 +236,7 @@
   /// status - The loading/resolve/initialization state of the class.
   ///
   JavaState status;
-  
+ 
   /// super - The parent of this class.
   ///
   CommonClass * super;
@@ -242,7 +248,7 @@
   /// superUTF8 - The name of the parent of this class.
   ///
   const UTF8* superUTF8;
-  
+
   /// interfaces - The interfaces this class implements.
   ///
   std::vector<Class*> interfaces;
@@ -360,12 +366,13 @@
   /// not throw if the field is not found.
   ///
   JavaField* lookupFieldDontThrow(const UTF8* name, const UTF8* type,
-                                  bool isStatic, bool recurse);
+                                  bool isStatic, bool recurse,
+                                  CommonClass*& definingClass);
   
   /// lookupField - Lookup a field and throw an exception if not found.
   ///
   JavaField* lookupField(const UTF8* name, const UTF8* type, bool isStatic,
-                         bool recurse);
+                         bool recurse, CommonClass*& definingClass);
 
   /// print - Print the class for debugging purposes.
   ///
@@ -465,7 +472,12 @@
   void getDeclaredConstructors(std::vector<JavaMethod*>& res, bool publicOnly);
   void getDeclaredMethods(std::vector<JavaMethod*>& res, bool publicOnly);
   void getDeclaredFields(std::vector<JavaField*>& res, bool publicOnly);
-  
+  void setInterfaces(std::vector<Class*> I) {
+    interfaces = I;
+  }
+  void setSuper(CommonClass* S) {
+    super = S;
+  }
 };
 
 /// ClassPrimitive - This class represents internal classes for primitive
@@ -473,7 +485,7 @@
 ///
 class ClassPrimitive : public CommonClass {
 public:
-  ClassPrimitive(JnjvmClassLoader* loader, const UTF8* name);
+  ClassPrimitive(JnjvmClassLoader* loader, const UTF8* name, uint32 nb);
 };
 
 
@@ -506,7 +518,8 @@
   /// attributs - JVM attributes of this class.
   ///
   std::vector<Attribut*> attributs;
-  
+ 
+#ifndef MULTIPLE_VM
   /// innerClasses - The inner classes of this class.
   ///
   std::vector<Class*> innerClasses;
@@ -514,6 +527,7 @@
   /// outerClass - The outer class, if this class is an inner class.
   ///
   Class* outerClass;
+#endif
 
   /// innerAccess - The access of this class, if this class is an inner class.
   ///
@@ -531,9 +545,11 @@
   ///
   VirtualTable* staticVT;
 
+#ifndef MULTIPLE_VM
   /// doNew - Allocates a Java object whose class is this class.
   ///
   JavaObject* doNew(Jnjvm* vm);
+#endif
 
   /// print - Prints a string representation of this class in the buffer.
   ///
@@ -602,6 +618,7 @@
   
   void resolveInnerOuterClasses();
 
+#ifndef MULTIPLE_VM
   Class* getOuterClass() {
     return outerClass;
   }
@@ -609,6 +626,9 @@
   std::vector<Class*>* getInnerClasses() {
     return &innerClasses;
   }
+#endif
+
+   
 };
 
 /// ClassArray - This class represents Java array classes.
@@ -676,14 +696,6 @@
   /// tracer - Tracer of array classes.
   ///
   virtual void TRACER;
-
-  /// SuperArray - The super class of array classes.
-  ///
-  static CommonClass* SuperArray;
-
-  /// InterfacesArray - The interfaces that array classes implement.
-  ///
-  static std::vector<Class*> InterfacesArray;
 };
 
 /// JavaMethod - This class represents Java methods.

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaConstantPool.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaConstantPool.cpp?rev=55369&r1=55368&r2=55369&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaConstantPool.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaConstantPool.cpp Tue Aug 26 10:45:03 2008
@@ -265,6 +265,7 @@
   else return UTF8At(ctpDef[index]);
 }
 
+#ifndef MULTIPLE_VM
 CommonClass* JavaConstantPool::loadClass(uint32 index) {
   CommonClass* temp = isClassLoaded(index);
   if (!temp) {
@@ -293,6 +294,7 @@
   }
   return temp;
 }
+#endif
 
 Typedef* JavaConstantPool::resolveNameAndType(uint32 index) {
   void* res = ctpRes[index];
@@ -421,7 +423,7 @@
   return sign;
 }
 
-void JavaConstantPool::resolveMethod(uint32 index, CommonClass*& cl,
+void JavaConstantPool::resolveMethod(uint32 index, UserCommonClass*& cl,
                                      const UTF8*& utf8, Signdef*& sign) {
   sint32 entry = ctpDef[index];
   sint32 ntIndex = entry & 0xFFFF;
@@ -432,7 +434,7 @@
   cl->resolveClass();
 }
   
-void JavaConstantPool::resolveField(uint32 index, CommonClass*& cl,
+void JavaConstantPool::resolveField(uint32 index, UserCommonClass*& cl,
                                     const UTF8*& utf8, Typedef*& sign) {
   sint32 entry = ctpDef[index];
   sint32 ntIndex = entry & 0xFFFF;
@@ -450,8 +452,9 @@
   const UTF8* utf8 = UTF8At(ctpDef[ntIndex] >> 16);
   CommonClass* cl = getMethodClassIfLoaded(entry >> 16);
   if (cl && cl->status >= resolved) {
+    CommonClass* fieldCl = 0; 
     JavaField* field = cl->lookupFieldDontThrow(utf8, sign->keyName, stat, 
-                                                true);
+                                                true, fieldCl);
     // don't throw if no field, the exception will be thrown just in time  
     if (field) {
       if (!stat) {

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaConstantPool.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaConstantPool.h?rev=55369&r1=55368&r2=55369&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaConstantPool.h (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaConstantPool.h Tue Aug 26 10:45:03 2008
@@ -27,6 +27,7 @@
 class Reader;
 class Signdef;
 class Typedef;
+class UserCommonClass;
 class UTF8;
 
 
@@ -228,14 +229,14 @@
   /// perform class loading. This function is called just in time, ie when
   /// the method call is actually made and not yet resolved.
   ///
-  void resolveMethod(uint32 index, CommonClass*& cl,
+  void resolveMethod(uint32 index, UserCommonClass*& cl,
                      const UTF8*& utf8, Signdef*& sign);
   
   /// resolveField - Resolve the class and signature of the field. May
   /// perform class loading. This function is called just in time, ie when
   /// the field is accessed and not yet resolved.
   ///
-  void resolveField(uint32 index, CommonClass*& cl, const UTF8*& utf8,
+  void resolveField(uint32 index, UserCommonClass*& cl, const UTF8*& utf8,
                     Typedef*& sign);
   
   /// loadClass - Loads the class and returns it. This is called just in time, 
@@ -244,7 +245,7 @@
   /// MULTIANEWARRAY. This function is also called by the classpath for
   /// loading exception classes referenced by a method.
   ///
-  CommonClass* loadClass(uint32 index);
+  UserCommonClass* loadClass(uint32 index);
 
   /// JavaConstantPool - Default constructor.
   ///

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaInitialise.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaInitialise.cpp?rev=55369&r1=55368&r2=55369&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaInitialise.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaInitialise.cpp Tue Aug 26 10:45:03 2008
@@ -47,9 +47,6 @@
   INIT(ClassMap);
   INIT(JnjvmBootstrapLoader);
   INIT(JnjvmClassLoader);
-#ifdef MULTIPLE_VM
-  INIT(JnjvmSharedLoader);
-#endif
 #ifdef SERVICE_VM
   INIT(ServiceDomain);
 #endif
@@ -79,20 +76,20 @@
   ((UTF8*)utf8OfChar)->classOf = JCL->upcalls->ArrayOfChar;
   JCL->hashUTF8->array = JCL->upcalls->ArrayOfChar;
 
-  ClassArray::InterfacesArray.push_back(
+  JCL->InterfacesArray.push_back(
     JCL->loadName(JCL->asciizConstructUTF8("java/lang/Cloneable"), false,
                   false));
   
-  ClassArray::InterfacesArray.push_back(
+  JCL->InterfacesArray.push_back(
     JCL->loadName(JCL->asciizConstructUTF8("java/io/Serializable"), false,
                   false));
   
-  ClassArray::SuperArray = 
+  JCL->SuperArray = 
     JCL->loadName(JCL->asciizConstructUTF8("java/lang/Object"), false,
                   false);
   
-  JCL->upcalls->ArrayOfChar->interfaces = ClassArray::InterfacesArray;
-  JCL->upcalls->ArrayOfChar->super = ClassArray::SuperArray;
+  JCL->upcalls->ArrayOfChar->setInterfaces(JCL->InterfacesArray);
+  JCL->upcalls->ArrayOfChar->setSuper(JCL->SuperArray);
   
   JCL->upcalls->ArrayOfByte = JCL->constructArray(JCL->asciizConstructUTF8("[B"));
   JCL->upcalls->ArrayOfString = 
@@ -169,7 +166,7 @@
 
 #undef DEF_UTF8
  
-  Classpath::initialiseClasspath(JCL);
+  JCL->upcalls->initialiseClasspath(JCL);
 }
 
 void mvm::VirtualMachine::initialiseJVM() {

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJIT.cpp?rev=55369&r1=55368&r2=55369&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJIT.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJIT.cpp Tue Aug 26 10:45:03 2008
@@ -914,9 +914,9 @@
 
     if (ex->catche) {
       JavaObject* exc = 0;
-      Class* cl = 0; 
+      UserClass* cl = 0; 
       try {
-        cl = (Class*)(ctpInfo->loadClass(ex->catche));
+        cl = (UserClass*)(ctpInfo->loadClass(ex->catche));
       } catch(...) {
         compilingClass->release();
         exc = JavaThread::getJavaException();
@@ -931,7 +931,12 @@
 
       ex->catchClass = cl;
     } else {
+#ifdef MULTIPLE_VM
+      fprintf(stderr, "implement me");
+      abort();
+#else
       ex->catchClass = Classpath::newThrowable;
+#endif
     }
     
     ex->test = createBasicBlock("testException");
@@ -1024,8 +1029,13 @@
     Value* cl = 0;
     currentBlock = cur->realTest;
     assert(cur->catchClass);
+#ifdef MULTIPLE_VM
+    fprintf(stderr, "implement me");
+    abort();
+#else
     LLVMClassInfo* LCI = (LLVMClassInfo*)module->getClassInfo(cur->catchClass);
     cl = LCI->getVar(this);
+#endif
     Value* cmp = llvm::CallInst::Create(JnjvmModule::CompareExceptionFunction, cl, "",
                                         currentBlock);
     llvm::BranchInst::Create(cur->handler, bbNext, cmp, currentBlock);

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJIT.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJIT.h?rev=55369&r1=55368&r2=55369&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJIT.h (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJIT.h Tue Aug 26 10:45:03 2008
@@ -41,7 +41,7 @@
   uint32 endpc;
   uint32 handlerpc;
   uint16 catche;
-  Class* catchClass;
+  UserClass* catchClass;
   llvm::BasicBlock* test;
   llvm::BasicBlock* realTest;
   llvm::BasicBlock* handler;

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJITOpcodes.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJITOpcodes.cpp?rev=55369&r1=55368&r2=55369&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJITOpcodes.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJITOpcodes.cpp Tue Aug 26 10:45:03 2008
@@ -1820,7 +1820,7 @@
       case NEWARRAY :
       case ANEWARRAY : {
         
-        ClassArray* dcl = 0;
+        UserClassArray* dcl = 0;
         ConstantInt* sizeElement = 0;
         GlobalVariable* TheVT = 0;
         JnjvmClassLoader* JCL = compilingClass->classLoader;
@@ -1828,7 +1828,7 @@
         if (bytecodes[i] == NEWARRAY) {
           uint8 id = bytecodes[++i];
           AssessorDesc* ass = AssessorDesc::arrayType(id);
-          dcl = ass->arrayClass;
+          dcl = ass->getArrayClass();
           TheVT = JnjvmModule::JavaObjectVirtualTableGV;
           LLVMAssessorInfo& LAI = LLVMAssessorInfo::AssessorInfo[ass->numId];
           sizeElement = LAI.sizeInBytesConstant;
@@ -1844,10 +1844,14 @@
           TheVT = JnjvmModule::ArrayObjectVirtualTableGV;
           sizeElement = mvm::jit::constantPtrSize;
         }
-        
+#ifdef MULTIPLE_VM
+        llvm::Value* valCl = 0;
+        fprintf(stderr, "implement me");
+        abort();
+#else
         LLVMCommonClassInfo* LCI = module->getClassInfo(dcl);
         llvm::Value* valCl = LCI->getVar(this);
-        
+#endif   
         llvm::Value* arg1 = popAsInt();
 
         Value* cmp = new ICmpInst(ICmpInst::ICMP_SLT, arg1,
@@ -2069,12 +2073,18 @@
         const UTF8* className = 
           compilingClass->ctpInfo->resolveClassName(index);
 
-        ClassArray* dcl = JCL->constructArray(className);
+        UserClassArray* dcl = JCL->constructArray(className);
         
         compilingClass->ctpInfo->loadClass(index);
         
+#ifdef MULTIPLE_VM
+        llvm::Value* valCl = 0;
+        fprintf(stderr, "implement me %s", dcl->printString());
+        abort();
+#else
         LLVMCommonClassInfo* LCI = module->getClassInfo(dcl);
         Value* valCl = LCI->getVar(this);
+#endif
         Value** args = (Value**)alloca(sizeof(Value*) * (dim + 2));
         args[0] = valCl;
         args[1] = ConstantInt::get(Type::Int32Ty, dim);

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaMetaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaMetaJIT.cpp?rev=55369&r1=55368&r2=55369&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaMetaJIT.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaMetaJIT.cpp Tue Aug 26 10:45:03 2008
@@ -29,8 +29,8 @@
                              char const* className, char const* func,
                              char const* sign, int access, ...) {
   
-  CommonClass* cl = loader->loadName(loader->asciizConstructUTF8(className),
-                                     true, true);
+  UserCommonClass* cl = loader->loadName(loader->asciizConstructUTF8(className),
+                                         true, true);
   
   cl->initialiseClass(vm);
   bool stat = access == ACC_STATIC ? true : false;

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaObject.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaObject.cpp?rev=55369&r1=55368&r2=55369&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaObject.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaObject.cpp Tue Aug 26 10:45:03 2008
@@ -159,7 +159,7 @@
 
 void JavaObject::print(mvm::PrintBuffer* buf) const {
   buf->write("JavaObject<");
-  CommonClass::printClassName(classOf->name, buf);
+  CommonClass::printClassName(classOf->getName(), buf);
   buf->write(">");
 }
 

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp?rev=55369&r1=55368&r2=55369&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp Tue Aug 26 10:45:03 2008
@@ -101,21 +101,19 @@
   }
   
   UserCommonClass* cl = 0;
+  UserCommonClass* fieldCl = 0;
   const UTF8* utf8 = 0;
   Typedef* sign = 0;
   
   ctpInfo->resolveField(index, cl, utf8, sign);
   
-  JavaField* field = cl->lookupField(utf8, sign->keyName, stat, true);
+  JavaField* field = cl->lookupField(utf8, sign->keyName, stat, true, fieldCl);
   
   void* ptr = 0;
   if (stat) {
-    UserClass* fieldCl = field->classDef;
     fieldCl->initialiseClass(JavaThread::get()->isolate);
-    ptr = (void*)((uint64)(fieldCl->getStaticInstance()) + field->ptrOffset);
-#ifndef MULTIPLE_VM
+    ptr = (void*)((uint64)(((UserClass*)fieldCl)->getStaticInstance()) + field->ptrOffset);
     ctpInfo->ctpRes[index] = ptr;
-#endif
   } else {
     ptr = (void*)((uint64)obj + field->ptrOffset);
     ctpInfo->ctpRes[index] = (void*)field->ptrOffset;
@@ -177,18 +175,7 @@
   JavaThread::get()->isolate->indexOutOfBounds(obj, index);
 }
 
-#ifdef MULTIPLE_VM
-extern "C" JavaObject* getStaticInstance(UserClass* cl, Jnjvm* vm) {
-  std::pair<JavaState, JavaObject*>* val = vm->statics->lookup(cl);
-  if (!val || !(val->second)) {
-    vm->initialiseClass(cl);
-    val = vm->statics->lookup(cl);
-  }
-  return val->second;
-}
-#endif
-
-extern "C" CommonClass* initialisationCheck(UserCommonClass* cl) {
+extern "C" UserCommonClass* initialisationCheck(UserCommonClass* cl) {
   cl->initialiseClass(JavaThread::get()->isolate);
   return cl;
 }
@@ -198,7 +185,7 @@
   return cl->getClassDelegatee(vm);
 }
 
-extern "C" Class* newLookup(UserClass* caller, uint32 index) { 
+extern "C" UserClass* newLookup(UserClass* caller, uint32 index) { 
   JavaConstantPool* ctpInfo = caller->getConstantPool();
   UserClass* cl = (UserClass*)ctpInfo->loadClass(index);
   return cl;

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaString.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaString.cpp?rev=55369&r1=55368&r2=55369&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaString.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaString.cpp Tue Aug 26 10:45:03 2008
@@ -17,9 +17,9 @@
 
 
 JavaString* JavaString::stringDup(const UTF8*& utf8, Jnjvm* vm) {
-  Class* cl = vm->upcalls->newString;
-  JavaString* res = (JavaString*)malloc(cl->virtualSize);
-  ((void**)res)[0] = cl->virtualVT;
+  UserClass* cl = vm->upcalls->newString;
+  JavaString* res = (JavaString*)malloc(cl->getVirtualSize());
+  ((void**)res)[0] = cl->getVirtualVT();
   res->classOf = cl;
 
   // No need to call the Java function: both the Java function and

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaTypes.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaTypes.cpp?rev=55369&r1=55368&r2=55369&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaTypes.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaTypes.cpp Tue Aug 26 10:45:03 2008
@@ -56,7 +56,7 @@
 AssessorDesc::AssessorDesc(bool dt, char bid, uint32 nb, uint32 nw,
                            const char* name,
                            JnjvmClassLoader* loader, uint8 nid,
-                           const char* assocName, ClassArray* cl,
+                           const char* assocName, UserClassArray* cl,
                            arrayCtor_t ctor) {
   AssessorDesc* res = this;
   res->numId = nid;
@@ -75,10 +75,9 @@
     res->assocClassName = 0;
   
   if (bid != I_PARG && bid != I_PARD && bid != I_REF && bid != I_TAB) {
-    res->classType = new ClassPrimitive(loader, res->UTF8Name);
-    res->classType->virtualSize = nb;
+    res->primitiveClass = new UserClassPrimitive(loader, res->UTF8Name, nb);
   } else {
-    res->classType = 0;
+    res->primitiveClass = 0;
   }
 }
 
@@ -265,37 +264,9 @@
   }
 }
 
-/*
-void AssessorDesc::introspectArrayName(Jnjvm *vm, const UTF8* utf8,
-                                       uint32 start, AssessorDesc*& ass,
-                                       const UTF8*& res) {
-  uint32 pos = 0;
-  uint32 intern = 0;
-  AssessorDesc* funcs = 0;
-
-  analyseIntern(utf8, start, 1, funcs, intern);
-
-  if (funcs != dTab) {
-    vm->unknownError("%s isn't an array", utf8->printString());
-  }
-
-  analyseIntern(utf8, intern, 0, funcs, pos);
-
-  if (funcs == dRef) {
-    ass = dRef;
-    res = utf8->extract(vm, intern + 1, pos - 1);
-  } else if (funcs == dTab) {
-    ass = dTab;
-    res = utf8->extract(vm, intern, pos);
-  } else {
-    ass = funcs;
-    res = 0;
-  }
-}
-*/
 void AssessorDesc::introspectArray(JnjvmClassLoader* loader,
                                    const UTF8* utf8, uint32 start,
-                                   AssessorDesc*& ass, CommonClass*& res) {
+                                   AssessorDesc*& ass, UserCommonClass*& res) {
   uint32 pos = 0;
   uint32 intern = 0;
   AssessorDesc* funcs = 0;
@@ -318,7 +289,7 @@
     res = loader->constructArray(utf8->extract(loader->hashUTF8, intern, pos));
   } else {
     ass = funcs;
-    res = funcs->classType;
+    res = funcs->getPrimitiveClass();
   }
 }
 
@@ -377,8 +348,7 @@
   }
 }
 
-AssessorDesc* AssessorDesc::classToPrimitive(CommonClass* cl) {
-  const UTF8* name = cl->name;
+AssessorDesc* AssessorDesc::classNameToPrimitive(const UTF8* name) {
   if (name->equals(dFloat->assocClassName)) {
     return dFloat;
   } else if (name->equals(dInt->assocClassName)) {
@@ -410,9 +380,9 @@
   return buf->contents()->cString();
 }
 
-CommonClass* Typedef::assocClass(JnjvmClassLoader* loader) {
+UserCommonClass* Typedef::assocClass(JnjvmClassLoader* loader) {
   if (pseudoAssocClassName == 0) {
-    return funcs->classType;
+    return funcs->getPrimitiveClass();
   } else if (funcs == AssessorDesc::dRef) {
     return loader->loadName(pseudoAssocClassName, false, true);
   } else {

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaTypes.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaTypes.h?rev=55369&r1=55368&r2=55369&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaTypes.h (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaTypes.h Tue Aug 26 10:45:03 2008
@@ -19,13 +19,15 @@
 
 class ClassArray;
 class CommonClass;
-class UserCommonClass;
 class JavaArray;
 class JavaJIT;
 class JavaObject;
 class Jnjvm;
 class JnjvmBootstrapLoader;
 class JnjvmClassLoader;
+class UserClassArray;
+class UserClassPrimitive;
+class UserCommonClass;
 class UTF8;
 
 #define VOID_ID 0
@@ -41,7 +43,7 @@
 #define OBJECT_ID 10
 #define NUM_ASSESSORS 11
 
-typedef JavaArray* (*arrayCtor_t)(uint32 len, CommonClass* cl, Jnjvm* vm);
+typedef JavaArray* (*arrayCtor_t)(uint32 len, UserClassArray* cl, Jnjvm* vm);
 
 
 /// AssessorDesc - Description of a Java assessor: these are the letters found
@@ -95,10 +97,10 @@
   ///
   const UTF8* UTF8Name;
 
-  /// classType - The primitive Java class of this assessor. This class
+  /// primitiveClass - The primitive Java class of this assessor. This class
   /// is internal to the JVM.
   ///
-  CommonClass* classType;
+  UserClassPrimitive* primitiveClass;
 
   /// assocClassName - The associated class name, e.g. "java/lang/Integer" for
   /// "I".
@@ -107,7 +109,7 @@
   
   /// arrayClass - The primitive array class of the assessor, e.g. I[] for "I".
   ///
-  ClassArray* arrayClass;
+  UserClassArray* arrayClass;
 
   /// arrayCtor - The constructor of an array of this assessor.
   ///
@@ -184,7 +186,7 @@
   AssessorDesc(bool dt, char bid, uint32 nb, uint32 nw,
                const char* name,
                JnjvmClassLoader* loader, uint8 nid,
-               const char* assocName, ClassArray* cl,
+               const char* assocName, UserClassArray* cl,
                arrayCtor_t ctor);
 
 
@@ -204,19 +206,26 @@
   static const UTF8* constructArrayName(JnjvmClassLoader* loader, AssessorDesc* ass,
                                         uint32 steps, const UTF8* className);
   
-  /*
-  static void introspectArrayName(const UTF8* utf8, uint32 start,
-                                  AssessorDesc*& ass, const UTF8*& res);
-  */
   static void introspectArray(JnjvmClassLoader* loader, const UTF8* utf8,
                               uint32 start, AssessorDesc*& ass,
-                              CommonClass*& res);
+                              UserCommonClass*& res);
 
   static AssessorDesc* arrayType(unsigned int t);
   
   static AssessorDesc* byteIdToPrimitive(const char id);
-  static AssessorDesc* classToPrimitive(CommonClass* cl);
-
+  static AssessorDesc* classNameToPrimitive(const UTF8* name);
+ 
+#ifdef MULTIPLE_VM
+  UserClassArray* getArrayClass() const;
+  UserClassPrimitive* getPrimitiveClass() const;
+#else
+  UserClassArray* getArrayClass() const {
+    return arrayClass;
+  }
+  UserClassPrimitive* getPrimitiveClass() const {
+    return primitiveClass;
+  }
+#endif
 };
 
 

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaUpcalls.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaUpcalls.cpp?rev=55369&r1=55368&r2=55369&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaUpcalls.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaUpcalls.cpp Tue Aug 26 10:45:03 2008
@@ -49,6 +49,7 @@
 JavaField*  Classpath::daemon;
 JavaField*  Classpath::group;
 JavaField*  Classpath::running;
+Class*      Classpath::threadGroup;
 JavaField*  Classpath::rootGroup;
 JavaField*  Classpath::vmThread;
 JavaMethod* Classpath::uncaughtException;
@@ -197,7 +198,7 @@
 
 void Classpath::createInitialThread(Jnjvm* vm, JavaObject* th) {
   JnjvmClassLoader* JCL = JnjvmClassLoader::bootstrapLoader;
-  JCL->loadName(newVMThread->name, true, true);
+  JCL->loadName(newVMThread->getName(), true, true);
   newVMThread->initialiseClass(vm);
 
   JavaObject* vmth = newVMThread->doNew(vm);
@@ -208,9 +209,9 @@
   assocThread->setObjectField(vmth, th);
   running->setInt8Field(vmth, (uint32)1);
   
-  JCL->loadName(rootGroup->classDef->name, true, true);
-  rootGroup->classDef->initialiseClass(vm);
-  JavaObject* Stat = rootGroup->classDef->getStaticInstance();
+  JCL->loadName(threadGroup->getName(), true, true);
+  threadGroup->initialiseClass(vm);
+  JavaObject* Stat = threadGroup->getStaticInstance();
   JavaObject* RG = rootGroup->getObjectField(Stat);
   group->setObjectField(th, RG);
   groupAddThread->invokeIntSpecial(vm, RG, th);
@@ -218,7 +219,7 @@
 
 void Classpath::mapInitialThread(Jnjvm* vm) {
   JnjvmClassLoader* JCL = JnjvmClassLoader::bootstrapLoader;
-  JCL->loadName(newThread->name, true, true);
+  JCL->loadName(newThread->getName(), true, true);
   newThread->initialiseClass(vm);
   JavaObject* th = newThread->doNew(vm);
   createInitialThread(vm, th);
@@ -527,6 +528,9 @@
   running = 
     UPCALL_FIELD(loader, "java/lang/VMThread", "running", "Z", ACC_VIRTUAL);
   
+  threadGroup = 
+    UPCALL_CLASS(loader, "java/lang/ThreadGroup");
+  
   rootGroup =
     UPCALL_FIELD(loader, "java/lang/ThreadGroup", "root",
                  "Ljava/lang/ThreadGroup;", ACC_STATIC);
@@ -584,8 +588,9 @@
 }
 
 extern "C" uint8 isArray(JavaObject* klass) {
+  Jnjvm* vm = JavaThread::get()->isolate;
   CommonClass* cl = 
-    (CommonClass*)((Classpath::vmdataClass->getObjectField(klass)));
+    (CommonClass*)((vm->upcalls->vmdataClass->getObjectField(klass)));
 
   return (uint8)cl->isArray();
 }

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaUpcalls.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaUpcalls.h?rev=55369&r1=55368&r2=55369&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaUpcalls.h (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaUpcalls.h Tue Aug 26 10:45:03 2008
@@ -127,6 +127,7 @@
   ISOLATE_STATIC JavaField* daemon;
   ISOLATE_STATIC JavaField* group;
   ISOLATE_STATIC JavaField* running;
+  ISOLATE_STATIC UserClass* threadGroup;
   ISOLATE_STATIC JavaField* rootGroup;
   ISOLATE_STATIC JavaField* vmThread;
   ISOLATE_STATIC JavaMethod* uncaughtException;

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/Jni.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/Jni.cpp?rev=55369&r1=55368&r2=55369&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/Jni.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/Jni.cpp Tue Aug 26 10:45:03 2008
@@ -834,9 +834,10 @@
 
   // TODO: find a better place to store the UTF8
   UserCommonClass* cl = NativeUtil::resolvedImplClass(clazz, true);
+  UserCommonClass* realCl = 0;
   return (jfieldID) 
     cl->lookupField(cl->classLoader->asciizConstructUTF8(name),
-                    cl->classLoader->asciizConstructUTF8(sig), 0, 1);
+                    cl->classLoader->asciizConstructUTF8(sig), 0, 1, realCl);
   
   END_EXCEPTION
   return 0;
@@ -1327,9 +1328,11 @@
   
   // TODO: find a better place to store the UTF8
   UserCommonClass* cl = NativeUtil::resolvedImplClass(clazz, true);
+  UserCommonClass* realCl = 0;
   return (jfieldID)
     cl->lookupField(cl->classLoader->asciizConstructUTF8(name),
-                    cl->classLoader->asciizConstructUTF8(sig), true, true);
+                    cl->classLoader->asciizConstructUTF8(sig), true, true,
+                    realCl);
 
   END_EXCEPTION
   return 0;
@@ -1665,7 +1668,7 @@
   
   UserCommonClass* base = NativeUtil::resolvedImplClass(elementClass, true);
   JnjvmClassLoader* loader = base->classLoader;
-  const UTF8* name = base->name;
+  const UTF8* name = base->getName();
   const UTF8* arrayName = AssessorDesc::constructArrayName(loader, 0, 1, name);
   UserClassArray* array = loader->constructArray(arrayName);
   ArrayObject* res = ArrayObject::acons(length, array, &(vm->allocator));

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/Jnjvm.cpp?rev=55369&r1=55368&r2=55369&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/Jnjvm.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/Jnjvm.cpp Tue Aug 26 10:45:03 2008
@@ -87,6 +87,7 @@
 
 typedef void (*clinit_t)(Jnjvm* vm);
 
+#ifndef MULTIPLE_VM
 void CommonClass::initialiseClass(Jnjvm* vm) {
   // Primitives are initialized at boot time
   if (isArray()) {
@@ -97,6 +98,7 @@
       release();
     } else if (status >= resolved && status != clinitParent &&
                status != inClinit) {
+      Class* cl = (Class*)this;
       status = clinitParent;
       release();
       if (super) {
@@ -114,6 +116,16 @@
       PRINT_DEBUG(JNJVM_LOAD, 0, LIGHT_GREEN, "clinit ", 0);
       PRINT_DEBUG(JNJVM_LOAD, 0, COLOR_NORMAL, "%s\n", printString());
       
+      JavaObject* val = 
+        (JavaObject*)vm->allocator.allocateObject(cl->staticSize, cl->staticVT);
+      val->initialise(cl);
+      for (CommonClass::field_iterator i = cl->staticFields.begin(),
+         e = cl->staticFields.end(); i!= e; ++i) { 
+        i->second->initField(val);
+      }
+  
+      cl->_staticInstance = val;
+
       if (meth) {
         JavaObject* exc = 0;
         try{
@@ -148,15 +160,16 @@
     }
   }
 }
+#endif
 
 
-void Jnjvm::errorWithExcp(Class* cl, JavaMethod* init, const JavaObject* excp) {
+void Jnjvm::errorWithExcp(UserClass* cl, JavaMethod* init, const JavaObject* excp) {
   JavaObject* obj = cl->doNew(this);
   init->invokeIntSpecial(this, obj, excp);
   JavaThread::throwException(obj);
 }
 
-void Jnjvm::error(Class* cl, JavaMethod* init, const char* fmt, ...) {
+void Jnjvm::error(UserClass* cl, JavaMethod* init, const char* fmt, ...) {
   char* tmp = (char*)alloca(4096);
   va_list ap;
   va_start(ap, fmt);
@@ -316,6 +329,7 @@
   postProperties.push_back(std::make_pair(key, value));
 }
 
+#ifndef MULTIPLE_VM
 JavaObject* CommonClass::getClassDelegatee(Jnjvm* vm, JavaObject* pd) {
   acquire();
   if (!(delegatee)) {
@@ -332,6 +346,7 @@
   release();
   return delegatee;
 }
+#endif
 
 Jnjvm::~Jnjvm() {
 #ifdef MULTIPLE_GC
@@ -431,7 +446,7 @@
   if (archive.getOfscd() != -1) {
     ZipFile* file = archive.getFile(PATH_MANIFEST);
     if (file) {
-      ClassArray* array = vm->bootstrapLoader->upcalls->ArrayOfByte;
+      UserClassArray* array = vm->bootstrapLoader->upcalls->ArrayOfByte;
       ArrayUInt8* res = ArrayUInt8::acons(file->ucsize, array, &vm->allocator);
       int ok = archive.readFile(res, file);
       if (ok) {
@@ -693,7 +708,7 @@
                                         appClassLoader->getJavaClassLoader());
   // load and initialise math since it is responsible for dlopen'ing 
   // libjavalang.so and we are optimizing some math operations
-  CommonClass* math = 
+  UserCommonClass* math = 
     loader->loadName(loader->asciizConstructUTF8("java/lang/Math"), true, true);
   math->initialiseClass(this);
 }
@@ -767,7 +782,7 @@
       }
     }
     
-    ClassArray* array = bootstrapLoader->upcalls->ArrayOfString;
+    UserClassArray* array = bootstrapLoader->upcalls->ArrayOfString;
     ArrayObject* args = ArrayObject::acons(argc - 2, array, &allocator);
     for (int i = 2; i < argc; ++i) {
       args->elements[i - 2] = (JavaObject*)asciizToStr(argv[i]);

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/Jnjvm.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/Jnjvm.h?rev=55369&r1=55368&r2=55369&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/Jnjvm.h (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/Jnjvm.h Tue Aug 26 10:45:03 2008
@@ -26,13 +26,8 @@
 namespace jnjvm {
 
 class ArrayObject;
-class ArrayUInt8;
-class Attribut;
-class UserClass;
-class UserClassArray;
 class Classpath;
-class UserCommonClass;
-class UserClassPrimitive;
+class CommonClass;
 class JavaField;
 class JavaMethod;
 class JavaObject;
@@ -40,26 +35,12 @@
 class JavaThread;
 class JnjvmBootstrapLoader;
 class JnjvmClassLoader;
-class JnjvmModule;
-class JnjvmModuleProvider;
-class Reader;
-class Typedef;
-class UTF8;
-class UTF8Map;
-class ClassMap;
-class DelegateeMap;
-class FieldMap;
-class MethodMap;
-class Signdef;
-class SignMap;
-class StaticInstanceMap;
 class StringMap;
-class TypeMap;
-class FunctionMap;
-class FunctionDefMap;
-class FunctionDefMap;
-class AllocationMap;
-class ZipArchive;
+class UserClass;
+class UserClassArray;
+class UserClassPrimitive;
+class UserCommonClass;
+class UTF8;
 
 /// ThreadSystem - Thread management of a JVM. Each JVM has one thread
 /// management system to count the number of non-daemon threads it owns.
@@ -307,8 +288,8 @@
   void illegalArgumentException(const char* msg);
   void classCastException(const char* msg);
   void unknownError(const char* fmt, ...); 
-  void noSuchFieldError(UserCommonClass* cl, const UTF8* name);
-  void noSuchMethodError(UserCommonClass* cl, const UTF8* name);
+  void noSuchFieldError(CommonClass* cl, const UTF8* name);
+  void noSuchMethodError(CommonClass* cl, const UTF8* name);
   void classFormatError(const char* fmt, ...);
   void noClassDefFoundError(JavaObject* obj);
   void noClassDefFoundError(const char* fmt, ...);
@@ -355,13 +336,6 @@
   ///
   virtual void runApplication(int argc, char** argv);
 
-#ifdef MULTIPLE_VM
-  UserClassPrimitive* getPrimitiveClass(const AssessorDesc* ass);
-#else
-  UserClassPrimitive* getPrimitiveClass(const AssessorDesc* ass) {
-    return (UserClassPrimitive*)ass->classType;
-  }
-#endif
 };
 
 } // end namespace jnjvm

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmClassLoader.cpp?rev=55369&r1=55368&r2=55369&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmClassLoader.cpp Tue Aug 26 10:45:03 2008
@@ -27,7 +27,12 @@
 
 using namespace jnjvm;
 
+#ifndef MULTIPLE_VM
 JnjvmBootstrapLoader* JnjvmClassLoader::bootstrapLoader = 0;
+UserClass* JnjvmBootstrapLoader::SuperArray = 0;
+std::vector<UserClass*> JnjvmBootstrapLoader::InterfacesArray;
+#endif
+
 
 extern const char* GNUClasspathGlibj;
 extern const char* GNUClasspathLibs;
@@ -241,7 +246,7 @@
     JnjvmClassLoader * ld = 
       ClassArray::arrayLoader(name, this, 1, name->size - 1);
     UserClassArray* res = 
-      (ClassArray*)ld->classes->lookupOrCreate(name, this, arrayDup);
+      (UserClassArray*)ld->classes->lookupOrCreate(name, this, arrayDup);
     return res;
   } else {
     return (UserClassArray*)classes->lookupOrCreate(name, this, arrayDup);

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmClassLoader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmClassLoader.h?rev=55369&r1=55368&r2=55369&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmClassLoader.h (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmClassLoader.h Tue Aug 26 10:45:03 2008
@@ -266,6 +266,9 @@
   /// Java code.
   ///
   Classpath* upcalls;
+
+  ISOLATE_STATIC std::vector<UserClass*> InterfacesArray;
+  ISOLATE_STATIC UserClass* SuperArray;
 };
 
 } // end namespace jnjvm

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmModule.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmModule.cpp?rev=55369&r1=55368&r2=55369&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmModule.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmModule.cpp Tue Aug 26 10:45:03 2008
@@ -408,7 +408,7 @@
 const Type* LLVMClassInfo::getStaticType() {
   
   if (!staticType) {
-    UserClass* cl = (UserClass*)classDef;
+    Class* cl = (Class*)classDef;
     std::vector<const llvm::Type*> fields;
     JavaField** array = (JavaField**)
       alloca(sizeof(JavaField*) * (classDef->staticFields.size() + 1));
@@ -444,18 +444,6 @@
     uint64 size = mvm::jit::getTypeSize(structType);
     cl->staticSize = size;
     cl->staticVT = VT;
-
-    JavaObject* val = 
-      (JavaObject*)JavaThread::get()->isolate->allocator.allocateObject(cl->staticSize,
-                                                                        cl->staticVT);
-    val->initialise(classDef);
-    for (CommonClass::field_iterator i = cl->staticFields.begin(),
-         e = cl->staticFields.end(); i!= e; ++i) {
-    
-      i->second->initField(val);
-    }
-  
-    cl->_staticInstance = val;
   }
   return staticType;
 }

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp?rev=55369&r1=55368&r2=55369&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp Tue Aug 26 10:45:03 2008
@@ -31,7 +31,7 @@
 
   bool isStatic = ctpInfo->isAStaticCall(index);
 
-  CommonClass* cl = 0;
+  UserCommonClass* cl = 0;
   const UTF8* utf8 = 0;
   Signdef* sign = 0;
 

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/LockedMap.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/LockedMap.h?rev=55369&r1=55368&r2=55369&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/LockedMap.h (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/LockedMap.h Tue Aug 26 10:45:03 2008
@@ -97,14 +97,14 @@
   
   mvm::Lock* lock;
   JavaAllocator* allocator;
-  ClassArray* array;
+  UserClassArray* array;
   std::multimap<const uint32, const UTF8*> map;
   const UTF8* lookupOrCreateAsciiz(const char* asciiz); 
   const UTF8* lookupOrCreateReader(const uint16* buf, uint32 size);
   const UTF8* lookupAsciiz(const char* asciiz); 
   const UTF8* lookupReader(const uint16* buf, uint32 size);
   
-  UTF8Map(JavaAllocator* A, ClassArray* cl) {
+  UTF8Map(JavaAllocator* A, UserClassArray* cl) {
     lock = mvm::Lock::allocNormal();
     allocator = A;
     array = cl;

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/NativeUtil.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/NativeUtil.cpp?rev=55369&r1=55368&r2=55369&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/NativeUtil.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/NativeUtil.cpp Tue Aug 26 10:45:03 2008
@@ -230,7 +230,7 @@
   Jnjvm* vm = JavaThread::get()->isolate;
   JavaObject *Cl = (JavaObject*)clazz;
   UserCommonClass* cl = 
-    (CommonClass*)vm->upcalls->vmdataClass->getObjectField(Cl);
+    (UserCommonClass*)vm->upcalls->vmdataClass->getObjectField(Cl);
   cl->resolveClass();
   if (doClinit) cl->initialiseClass(vm);
   return cl;
@@ -251,8 +251,8 @@
   } else if (obj == 0) {
     vm->illegalArgumentException("");
   } else {
-    CommonClass* cl = obj->classOf;
-    AssessorDesc* value = AssessorDesc::classToPrimitive(cl);
+    UserCommonClass* cl = obj->classOf;
+    AssessorDesc* value = AssessorDesc::classNameToPrimitive(cl->getName());
     
     if (value == 0) {
       vm->illegalArgumentException("");
@@ -381,7 +381,7 @@
 
 JavaObject* NativeUtil::getClassType(JnjvmClassLoader* loader, Typedef* type) {
   Jnjvm* vm = JavaThread::get()->isolate;
-  CommonClass* res = type->assocClass(loader);
+  UserCommonClass* res = type->assocClass(loader);
   return res->getClassDelegatee(vm);
 }
 
@@ -417,7 +417,7 @@
 
     for (uint16 i = 0; i < nbe; ++i) {
       uint16 idx = reader.readU2();
-      CommonClass* cl = ctp->loadClass(idx);
+      UserCommonClass* cl = ctp->loadClass(idx);
       cl->resolveClass();
       JavaObject* obj = cl->getClassDelegatee(vm);
       res->elements[i] = obj;

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/Reader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/Reader.cpp?rev=55369&r1=55368&r2=55369&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/Reader.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/Reader.cpp Tue Aug 26 10:45:03 2008
@@ -32,7 +32,7 @@
     fseek(fp, 0, SeekEnd);
     long nbb = ftell(fp);
     fseek(fp, 0, SeekSet);
-    ClassArray* array = loader->bootstrapLoader->upcalls->ArrayOfByte;
+    UserClassArray* array = loader->bootstrapLoader->upcalls->ArrayOfByte;
     res = ArrayUInt8::acons(nbb, array, loader->allocator);
     fread(res->elements, nbb, 1, fp);
     fclose(fp);
@@ -45,7 +45,7 @@
   ArrayUInt8* ret = 0;
   ZipFile* file = archive->getFile(filename);
   if (file != 0) {
-    ClassArray* array = loader->bootstrapLoader->upcalls->ArrayOfByte;
+    UserClassArray* array = loader->bootstrapLoader->upcalls->ArrayOfByte;
     ArrayUInt8* res = ArrayUInt8::acons(file->ucsize, array, loader->allocator);
     if (archive->readFile(res, file) != 0) {
       ret = res;

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/VirtualTables.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/VirtualTables.cpp?rev=55369&r1=55368&r2=55369&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/VirtualTables.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/VirtualTables.cpp Tue Aug 26 10:45:03 2008
@@ -35,9 +35,6 @@
   INIT(ClassMap);
   INIT(JnjvmBootstrapLoader);
   INIT(JnjvmClassLoader);
-#ifdef MULTIPLE_VM
-  INIT(JnjvmSharedLoader);
-#endif
 #ifdef SERVICE_VM
   INIT(ServiceDomain);
 #endif
@@ -100,10 +97,6 @@
 void Jnjvm::TRACER {
   appClassLoader->MARK_AND_TRACE;
   TRACE_VECTOR(JavaObject*, gc_allocator, globalRefs);
-#ifdef MULTIPLE_VM
-  statics->MARK_AND_TRACE;
-  delegatees->MARK_AND_TRACE;
-#endif
   bootstrapThread->MARK_AND_TRACE;
   JnjvmClassLoader::bootstrapLoader->MARK_AND_TRACE; 
 }
@@ -129,7 +122,7 @@
   }
 #ifndef MULTIPLE_VM
 #define TRACE_DELEGATEE(prim) \
-  prim->classType->delegatee->MARK_AND_TRACE
+  prim->primitiveClass->delegatee->MARK_AND_TRACE
 
   TRACE_DELEGATEE(AssessorDesc::dVoid);
   TRACE_DELEGATEE(AssessorDesc::dBool);





More information about the vmkit-commits mailing list