[llvm-commits] [vmkit] r51702 - in /vmkit/trunk/lib/JnJVM: Classpath/ClasspathVMClass.cpp Classpath/ClasspathVMThrowable.cpp VMCore/JavaArray.cpp VMCore/JavaArray.h VMCore/JavaClass.cpp VMCore/JavaClass.h VMCore/JavaConstantPool.cpp VMCore/JavaConstantPool.h VMCore/JavaInitialise.cpp VMCore/JavaIsolate.cpp VMCore/JavaJIT.cpp VMCore/JavaJIT.h VMCore/JavaString.h VMCore/Jnjvm.cpp VMCore/Jnjvm.h VMCore/LockedMap.h VMCore/NativeUtil.cpp VMCore/Reader.cpp VMCore/Reader.h VMCore/VirtualTables.cpp VMCore/Zip.cpp VMCore/Zip.h

Nicolas Geoffray nicolas.geoffray at lip6.fr
Thu May 29 14:10:26 PDT 2008


Author: geoffray
Date: Thu May 29 16:10:25 2008
New Revision: 51702

URL: http://llvm.org/viewvc/llvm-project?rev=51702&view=rev
Log:
ZipArchive, ZipFile and Reader are not GC-allocated anymore.



Modified:
    vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClass.cpp
    vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThrowable.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaArray.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaArray.h
    vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
    vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.h
    vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaIsolate.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.h
    vmkit/trunk/lib/JnJVM/VMCore/JavaString.h
    vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
    vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h
    vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h
    vmkit/trunk/lib/JnJVM/VMCore/NativeUtil.cpp
    vmkit/trunk/lib/JnJVM/VMCore/Reader.cpp
    vmkit/trunk/lib/JnJVM/VMCore/Reader.h
    vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp
    vmkit/trunk/lib/JnJVM/VMCore/Zip.cpp
    vmkit/trunk/lib/JnJVM/VMCore/Zip.h

Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClass.cpp?rev=51702&r1=51701&r2=51702&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClass.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClass.cpp Thu May 29 16:10:25 2008
@@ -346,16 +346,15 @@
 static void resolveInnerOuterClasses(Class* cl) {
   Attribut* attribut = cl->lookupAttribut(Attribut::innerClassesAttribut);
   if (attribut != 0) {
-    Reader* reader = attribut->toReader(JavaThread::get()->isolate, cl->bytes,
-                                        attribut);
+    Reader reader(attribut, cl->bytes);
 
-    uint16 nbi = reader->readU2();
+    uint16 nbi = reader.readU2();
     for (uint16 i = 0; i < nbi; ++i) {
-      uint16 inner = reader->readU2();
-      uint16 outer = reader->readU2();
+      uint16 inner = reader.readU2();
+      uint16 outer = reader.readU2();
       //uint16 innerName = 
-      reader->readU2();
-      uint16 accessFlags = reader->readU2();
+      reader.readU2();
+      uint16 accessFlags = reader.readU2();
       Class* clInner = (Class*)cl->ctpInfo->loadClass(inner);
       Class* clOuter = (Class*)cl->ctpInfo->loadClass(outer);
 

Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThrowable.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThrowable.cpp?rev=51702&r1=51701&r2=51702&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThrowable.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThrowable.cpp Thu May 29 16:10:25 2008
@@ -55,9 +55,8 @@
   Attribut* sourceAtt = cl->lookupAttribut(Attribut::sourceFileAttribut);
   
   if (sourceAtt) {
-    Reader* reader = sourceAtt->toReader(JavaThread::get()->isolate, cl->bytes,
-                                         sourceAtt);
-    uint16 index = reader->readU2();
+    Reader reader(sourceAtt, cl->bytes);
+    uint16 index = reader.readU2();
     sourceName = vm->UTF8ToStr(cl->ctpInfo->UTF8At(index));
   }
 
@@ -113,8 +112,9 @@
       break;
     }
   }
+  jobject res = (jobject)recGetStackTrace((int**)(uint32**)stack, first, 0);
   free(stack);
-  return (jobject)recGetStackTrace((int**)(uint32**)stack, first, 0);
+  return res;
 }
 
 }

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaArray.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaArray.cpp Thu May 29 16:10:25 2008
@@ -104,10 +104,6 @@
 #undef ACONS
 #undef AT
 
-void JavaArray::print(mvm::PrintBuffer *buf) const {
-  assert(0 && "should not be here");
-}
-  
 void ArrayUInt8::print(mvm::PrintBuffer *buf) const {
   buf->write("Array<");
   for (int i = 0; i < size; i++) {

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaArray.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaArray.h Thu May 29 16:10:25 2008
@@ -25,7 +25,6 @@
 
 class JavaArray : public JavaObject {
 public:
-  static VirtualTable* VT;
   sint32 size;
   void* elements[0];
   static const sint32 MaxArraySize;
@@ -48,16 +47,13 @@
   static ClassArray* ofFloat;
   static ClassArray* ofDouble;
   static ClassArray* ofObject;
-
-  virtual void print(mvm::PrintBuffer* buf) const;
-  virtual void TRACER;
-
 };
 
 #define ARRAYCLASS(name, elmt)                                        \
-class name : public JavaArray {                                       \
+class name : public JavaObject {                                      \
 public:                                                               \
   static VirtualTable* VT;                                            \
+  sint32 size;                                                        \
   elmt elements[0];                                                   \
   static name *acons(sint32 n, ClassArray* cl, Jnjvm* vm);            \
   elmt at(sint32) const;                                              \

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp Thu May 29 16:10:25 2008
@@ -42,10 +42,11 @@
 CommonClass* ClassArray::SuperArray = 0;
 std::vector<Class*> ClassArray::InterfacesArray;
 
-void Attribut::derive(const UTF8* name, unsigned int length,
-                      const Reader* reader) {
+
+Attribut::Attribut(const UTF8* name, unsigned int length,
+                   const Reader& reader) {
   
-  this->start    = reader->cursor;
+  this->start    = reader.cursor;
   this->nbb      = length;
   this->name     = name;
 
@@ -138,11 +139,6 @@
   }
 }
 
-Reader* Attribut::toReader(Jnjvm* vm, ArrayUInt8* array, Attribut* attr) {
-  return vm_new(vm, Reader)(array, attr->start, attr->nbb);
-}
-
-
 static void printClassNameIntern(const UTF8* name, unsigned int start,
                                  unsigned int end,  mvm::PrintBuffer* buf) {
   
@@ -485,10 +481,9 @@
   if (!attribut) {
     JnjvmModule::InitField(this, obj);
   } else {
-    Reader* reader = attribut->toReader(classDef->isolate,
-                                        classDef->bytes, attribut);
+    Reader reader(attribut, classDef->bytes);
     JavaCtpInfo * ctpInfo = classDef->ctpInfo;
-    uint16 idx = reader->readU2();
+    uint16 idx = reader.readU2();
     if (funcs == AssessorDesc::dLong) {
       JnjvmModule::InitField(this, obj, (uint64)ctpInfo->LongAt(idx));
     } else if (funcs == AssessorDesc::dDouble) {

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h Thu May 29 16:10:25 2008
@@ -35,7 +35,6 @@
 class JavaJIT;
 class JavaMethod;
 class JavaObject;
-class Jnjvm;
 class Reader;
 class Signdef;
 class Typedef;
@@ -53,8 +52,7 @@
   unsigned int start;
   unsigned int  nbb;
 
-  void derive(const UTF8* name, unsigned int length, const Reader* reader);
-  Reader* toReader(Jnjvm *vm, ArrayUInt8* array, Attribut* attr);
+  Attribut(const UTF8* name, unsigned int length, const Reader& reader);
 
   static const UTF8* codeAttribut;
   static const UTF8* exceptionsAttribut;

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.cpp Thu May 29 16:10:25 2008
@@ -40,8 +40,8 @@
 const uint32 JavaCtpInfo::ConstantNameAndType = 12;
 
 
-static uint32 unimplemented(Jnjvm* vm, uint32 type, uint32 e, Reader* reader,
-                         sint32* ctpDef, void** ctpRes, uint8* ctpType) {
+static uint32 unimplemented(Jnjvm* vm, uint32 type, uint32 e, Reader& reader,
+                            sint32* ctpDef, void** ctpRes, uint8* ctpType) {
   JavaThread::get()->isolate->error(Jnjvm::ClassFormatError, 
                                     "unknown constant pool type %d", 
                                     type);
@@ -50,9 +50,9 @@
 
 
 uint32 JavaCtpInfo::CtpReaderClass(Jnjvm* vm, uint32 type, uint32 e,
-                                   Reader* reader, sint32* ctpDef,
+                                   Reader& reader, sint32* ctpDef,
                                    void** ctpRes, uint8* ctpType) {
-  uint16 entry = reader->readU2();
+  uint16 entry = reader.readU2();
   ctpDef[e] = entry;
   PRINT_DEBUG(JNJVM_LOAD, 3, COLOR_NORMAL, "; [%5d] <class>\t\tutf8 is at %d\n", e,
               entry);
@@ -60,18 +60,19 @@
 }
   
 uint32 JavaCtpInfo::CtpReaderInteger(Jnjvm* vm, uint32 type, uint32 e,
-                                     Reader* reader, sint32* ctpDef,
+                                     Reader& reader, sint32* ctpDef,
                                      void** ctpRes, uint8* ctpType) {
-  uint32 val = reader->readU4();
+  uint32 val = reader.readU4();
   ctpDef[e] = val;
   PRINT_DEBUG(JNJVM_LOAD, 3, COLOR_NORMAL, "; [%5d] <class>\tinteger: %d\n", e,
               val);
   return 1;
 }
   
-uint32 JavaCtpInfo::CtpReaderFloat(Jnjvm* vm, uint32 type, uint32 e, Reader* reader,
-                                sint32* ctpDef, void** ctpRes, uint8* ctpType) {
-  uint32 val = reader->readU4();
+uint32 JavaCtpInfo::CtpReaderFloat(Jnjvm* vm, uint32 type, uint32 e,
+                                   Reader& reader, sint32* ctpDef,
+                                   void** ctpRes, uint8* ctpType) {
+  uint32 val = reader.readU4();
   ctpDef[e] = val;
   PRINT_DEBUG(JNJVM_LOAD, 3, COLOR_NORMAL, "; [%5d] <class>\tfloat: %p\n", e,
               val);
@@ -79,19 +80,19 @@
 }
   
 uint32 JavaCtpInfo::CtpReaderUTF8(Jnjvm* vm, uint32 type, uint32 e,
-                                  Reader* reader, sint32* ctpDef, void** ctpRes,
+                                  Reader& reader, sint32* ctpDef, void** ctpRes,
                                   uint8* ctpType) {
-  uint16 len = reader->readU2();
+  uint16 len = reader.readU2();
   uint16* buf = (uint16*)alloca(len * sizeof(uint16));
   uint32 n = 0;
   uint32 i = 0;
   
   while (i < len) {
-    uint32 cur = reader->readU1();
+    uint32 cur = reader.readU1();
     if (cur & 0x80) {
-      uint32 y = reader->readU1();
+      uint32 y = reader.readU1();
       if (cur & 0x20) {
-        uint32 z = reader->readU1();
+        uint32 z = reader.readU1();
         cur = ((cur & 0x0F) << 12) +
               ((y & 0x3F) << 6) +
               (z & 0x3F);
@@ -118,9 +119,9 @@
 }
   
 uint32 JavaCtpInfo::CtpReaderNameAndType(Jnjvm* vm, uint32 type, uint32 e,
-                                         Reader* reader, sint32* ctpDef,
+                                         Reader& reader, sint32* ctpDef,
                                          void** ctpRes, uint8* ctpType) {
-  uint32 entry = reader->readU4();
+  uint32 entry = reader.readU4();
   ctpDef[e] = entry;
   PRINT_DEBUG(JNJVM_LOAD, 3, COLOR_NORMAL, 
               "; [%5d] <name/type>\tname is at %d, type is at %d\n", e,
@@ -129,9 +130,9 @@
 }
   
 uint32 JavaCtpInfo::CtpReaderFieldref(Jnjvm* vm, uint32 type, uint32 e,
-                                      Reader* reader, sint32* ctpDef,
+                                      Reader& reader, sint32* ctpDef,
                                       void** ctpRes, uint8* ctpType) {
-  uint32 entry = reader->readU4();
+  uint32 entry = reader.readU4();
   ctpDef[e] = entry;
   PRINT_DEBUG(JNJVM_LOAD, 3, COLOR_NORMAL, 
               "; [%5d] <fieldref>\tclass is at %d, name/type is at %d\n", e,
@@ -139,20 +140,20 @@
   return 1;
 }
 
-uint32 JavaCtpInfo::CtpReaderString(Jnjvm* vm, uint32 type, uint32 e, Reader* reader,
-                                 sint32* ctpDef, void** ctpRes,
-                                 uint8* ctpType) {
-  uint16 entry = reader->readU2();
+uint32 JavaCtpInfo::CtpReaderString(Jnjvm* vm, uint32 type, uint32 e,
+                                    Reader& reader, sint32* ctpDef,
+                                    void** ctpRes, uint8* ctpType) {
+  uint16 entry = reader.readU2();
   ctpDef[e] = entry;
   PRINT_DEBUG(JNJVM_LOAD, 3, COLOR_NORMAL, "; [%5d] <string>\tutf8 is at %d\n",
               e, entry);
   return 1;
 }
   
-uint32 JavaCtpInfo::CtpReaderMethodref(Jnjvm* vm, uint32 type, uint32 e, Reader* reader,
-                                    sint32* ctpDef, void** ctpRes,
-                                    uint8* ctpType) {
-  uint32 entry = reader->readU4();
+uint32 JavaCtpInfo::CtpReaderMethodref(Jnjvm* vm, uint32 type, uint32 e,
+                                       Reader& reader, sint32* ctpDef,
+                                       void** ctpRes, uint8* ctpType) {
+  uint32 entry = reader.readU4();
   ctpDef[e] = entry;
   PRINT_DEBUG(JNJVM_LOAD, 3, COLOR_NORMAL, 
               "; [%5d] <methodref>\tclass is at %d, name/type is at %d\n", e,
@@ -161,10 +162,10 @@
 }
 
 uint32 JavaCtpInfo::CtpReaderInterfaceMethodref(Jnjvm* vm, uint32 type,
-                                                uint32 e, Reader* reader,
+                                                uint32 e, Reader& reader,
                                                 sint32* ctpDef, void** ctpRes,
                                                 uint8* ctpType) {
-  uint32 entry = reader->readU4();
+  uint32 entry = reader.readU4();
   ctpDef[e] = entry;
   PRINT_DEBUG(JNJVM_LOAD, 3, COLOR_NORMAL, 
         "; [%5d] <Interface xmethodref>\tclass is at %d, name/type is at %d\n",
@@ -173,29 +174,29 @@
 }
   
 uint32 JavaCtpInfo::CtpReaderLong(Jnjvm* vm, uint32 type, uint32 e,
-                                  Reader* reader, sint32* ctpDef, void** ctpRes,
+                                  Reader& reader, sint32* ctpDef, void** ctpRes,
                                   uint8* ctpType) {
-  ctpDef[e + 1] = reader->readU4();
-  ctpDef[e] = reader->readU4();
+  ctpDef[e + 1] = reader.readU4();
+  ctpDef[e] = reader.readU4();
   ctpType[e] = ConstantLong;
   PRINT_DEBUG(JNJVM_LOAD, 3, COLOR_NORMAL, "; [%5d] <long>\%d %d\n", e,
               ctpDef[e], ctpDef[e + 1]);
   return 2;
 }
 
-uint32 JavaCtpInfo::CtpReaderDouble(Jnjvm* vm, uint32 type, uint32 e, Reader* reader,
-                                 sint32* ctpDef, void** ctpRes,
-                                 uint8* ctpType) {
-  ctpDef[e + 1] = reader->readU4();
-  ctpDef[e] = reader->readU4();
+uint32 JavaCtpInfo::CtpReaderDouble(Jnjvm* vm, uint32 type, uint32 e,
+                                    Reader& reader, sint32* ctpDef,
+                                    void** ctpRes, uint8* ctpType) {
+  ctpDef[e + 1] = reader.readU4();
+  ctpDef[e] = reader.readU4();
   ctpType[e] = ConstantDouble;
   PRINT_DEBUG(JNJVM_LOAD, 3, COLOR_NORMAL, "; [%5d] <double>\%d %d\n", e,
               ctpDef[e], ctpDef[e + 1]);
   return 2;
 }
 
-void JavaCtpInfo::read(Jnjvm *vm, Class* cl, Reader* reader) {
-  uint32 nbCtp = reader->readU2();
+void JavaCtpInfo::read(Jnjvm *vm, Class* cl, Reader& reader) {
+  uint32 nbCtp = reader.readU2();
   JavaCtpInfo* res = new JavaCtpInfo();
   
   res->ctpRes   = (void**)malloc(sizeof(void*)*nbCtp);
@@ -211,7 +212,7 @@
 
   uint32 cur = 1;
   while (cur < nbCtp) {
-    uint8 curType = reader->readU1();
+    uint8 curType = reader.readU1();
     res->ctpType[cur] = curType;
     cur += ((funcsReader[curType])(vm, curType, cur, reader, res->ctpDef,
                                    res->ctpRes, res->ctpType));
@@ -301,7 +302,9 @@
     JavaObject* loader = classDef->classLoader;
     const UTF8* name = UTF8At(ctpDef[index]);
     temp = JavaThread::get()->isolate->lookupClass(name, loader);
-    if (!temp) temp = Jnjvm::bootstrapVM->lookupClass(name, CommonClass::jnjvmClassLoader);
+    if (!temp) 
+      temp = Jnjvm::bootstrapVM->lookupClass(name,
+                                             CommonClass::jnjvmClassLoader);
   }
   return temp;
 }
@@ -351,7 +354,8 @@
   cl = getMethodClassIfLoaded(entry >> 16);
   if (cl && cl->status >= readed) {
     // lookup the method
-    meth = cl->lookupMethodDontThrow(utf8, sign->keyName, isStatic(access), false);
+    meth = 
+      cl->lookupMethodDontThrow(utf8, sign->keyName, isStatic(access), false);
   } 
 }
 
@@ -393,8 +397,10 @@
   CommonClass* cl = getMethodClassIfLoaded(entry >> 16);
   if (cl && cl->status >= readed) {
     // lookup the method
-    meth = cl->lookupMethodDontThrow(utf8, sign->keyName, isStatic(access), false);
-    if (meth) { // don't throw if no meth, the exception will be thrown just in time  
+    meth =
+      cl->lookupMethodDontThrow(utf8, sign->keyName, isStatic(access), false);
+    if (meth) { 
+      // don't throw if no meth, the exception will be thrown just in time
       JnjvmModule* M = classDef->isolate->TheModule;
       void* F = M->getMethod(meth);
       ctpRes[index] = (void*)F;

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.h Thu May 29 16:10:25 2008
@@ -24,7 +24,7 @@
 class Typedef;
 class UTF8;
 
-typedef uint32 (*ctpReader)(Jnjvm*, uint32, uint32, Reader*, sint32*, void**, uint8*);
+typedef uint32 (*ctpReader)(Jnjvm*, uint32, uint32, Reader&, sint32*, void**, uint8*);
 
 class JavaCtpInfo {
 public:
@@ -48,42 +48,42 @@
   
   static ctpReader funcsReader[16];
 
-  static uint32 CtpReaderClass(Jnjvm* vm, uint32 type, uint32 e, Reader* reader,
+  static uint32 CtpReaderClass(Jnjvm* vm, uint32 type, uint32 e, Reader& reader,
                             sint32* ctpDef, void** ctpRes, uint8* ctpType);
   
-  static uint32 CtpReaderInteger(Jnjvm* vm, uint32 type, uint32 e, Reader* reader,
+  static uint32 CtpReaderInteger(Jnjvm* vm, uint32 type, uint32 e, Reader& reader,
                               sint32* ctpDef, void** ctpRes, uint8* ctpType);
   
-  static uint32 CtpReaderFloat(Jnjvm* vm, uint32 type, uint32 e, Reader* reader,
+  static uint32 CtpReaderFloat(Jnjvm* vm, uint32 type, uint32 e, Reader& reader,
                             sint32* ctpDef, void** ctpRes, uint8* ctpType);
   
-  static uint32 CtpReaderUTF8(Jnjvm* vm, uint32 type, uint32 e, Reader* reader,
+  static uint32 CtpReaderUTF8(Jnjvm* vm, uint32 type, uint32 e, Reader& reader,
                            sint32* ctpDef, void** ctpRes, uint8* ctpType);
   
-  static uint32 CtpReaderNameAndType(Jnjvm* vm, uint32 type, uint32 e, Reader* reader,
+  static uint32 CtpReaderNameAndType(Jnjvm* vm, uint32 type, uint32 e, Reader& reader,
                                   sint32* ctpDef, void** ctpRes,
                                   uint8* ctpType);
   
-  static uint32 CtpReaderFieldref(Jnjvm* vm, uint32 type, uint32 e, Reader* reader,
+  static uint32 CtpReaderFieldref(Jnjvm* vm, uint32 type, uint32 e, Reader& reader,
                                sint32* ctpDef, void** ctpRes, uint8* ctpType);
   
-  static uint32 CtpReaderString(Jnjvm* vm, uint32 type, uint32 e, Reader* reader,
+  static uint32 CtpReaderString(Jnjvm* vm, uint32 type, uint32 e, Reader& reader,
                              sint32* ctpDef, void** ctpRes, uint8* ctpType);
   
-  static uint32 CtpReaderMethodref(Jnjvm* vm, uint32 type, uint32 e, Reader* reader,
+  static uint32 CtpReaderMethodref(Jnjvm* vm, uint32 type, uint32 e, Reader& reader,
                                 sint32* ctpDef, void** ctpRes, uint8* ctpType);
   
   static uint32 CtpReaderInterfaceMethodref(Jnjvm* vm, uint32 type, uint32 e,
-                                         Reader* reader, sint32* ctpDef,
+                                         Reader& reader, sint32* ctpDef,
                                          void** ctpRes, uint8* ctpType);
   
-  static uint32 CtpReaderLong(Jnjvm* vm, uint32 type, uint32 e, Reader* reader,
+  static uint32 CtpReaderLong(Jnjvm* vm, uint32 type, uint32 e, Reader& reader,
                            sint32* ctpDef, void** ctpRes, uint8* ctpType);
   
-  static uint32 CtpReaderDouble(Jnjvm* vm, uint32 type, uint32 e, Reader* reader,
+  static uint32 CtpReaderDouble(Jnjvm* vm, uint32 type, uint32 e, Reader& reader,
                              sint32* ctpDef, void** ctpRes, uint8* ctpType);
 
-  static void read(Jnjvm *vm, Class* cl, Reader* reader);
+  static void read(Jnjvm *vm, Class* cl, Reader& reader);
 
   bool isAStaticCall(uint32 index) {
     return (ctpType[index] & 0x80) != 0;    

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp Thu May 29 16:10:25 2008
@@ -26,7 +26,6 @@
 #include "Jnjvm.h"
 #include "JnjvmModuleProvider.h"
 #include "NativeUtil.h"
-#include "Reader.h"
 #include "LockedMap.h"
 #include "Zip.h"
 
@@ -42,22 +41,17 @@
   X fake; \
   X::VT = ((void**)(void*)(&fake))[0]; }
 
-  INIT(JavaArray);
   INIT(CommonClass);
   INIT(Class);
   INIT(ClassArray);
   INIT(LockObj);
-  INIT(JavaObject);
   INIT(JavaThread);
   INIT(Jnjvm);
-  INIT(Reader);
-  INIT(ZipFile);
-  INIT(ZipArchive);
   INIT(ClassMap);
-  INIT(ZipFileMap);
   INIT(StringMap);
+  INIT(StaticInstanceMap);
+  INIT(DelegateeMap);
   INIT(JavaIsolate);
-  INIT(JavaString);
 #ifdef SERVICE_VM
   INIT(ServiceDomain);
 #endif
@@ -69,6 +63,7 @@
   X::VT = (VirtualTable*)malloc(12 * sizeof(void*) + VT_SIZE); \
   memcpy(X::VT, V, VT_SIZE); }
 
+  INIT(JavaObject);
   INIT(ArrayUInt8);
   INIT(ArraySInt8);
   INIT(ArrayUInt16);
@@ -84,10 +79,8 @@
 
 static void initialiseStatics() {
   JavaObject::globalLock = mvm::Lock::allocNormal();
-  //mvm::Object::pushRoot((mvm::Object*)JavaObject::globalLock);
 
   Jnjvm* vm = JavaIsolate::bootstrapVM = JavaIsolate::allocateBootstrap();
-  mvm::Object::pushRoot((mvm::Object*)JavaIsolate::bootstrapVM);
   
   // Array initialization
   const UTF8* utf8OfChar = vm->asciizConstructUTF8("[C");

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaIsolate.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaIsolate.cpp Thu May 29 16:10:25 2008
@@ -23,6 +23,7 @@
 #include "JavaUpcalls.h"
 #include "JnjvmModuleProvider.h"
 #include "LockedMap.h"
+#include "Reader.h"
 #include "Zip.h"
 
 #ifdef SERVICE_VM
@@ -98,16 +99,17 @@
 
   sprintf(temp, "%s:%s", vm->classpath, jarFile);
   vm->setClasspath(temp);
+  
+  ArrayUInt8* bytes = Reader::openFile(vm, jarFile);
 
-  ZipArchive* archive = ZipArchive::singleArchive(vm, jarFile);
-  if (archive) {
-    ZipFile* file = archive->getFile(PATH_MANIFEST);
+  ZipArchive archive(bytes);
+  if (archive.getOfscd() != -1) {
+    ZipFile* file = archive.getFile(PATH_MANIFEST);
     if (file) {
       ArrayUInt8* res = ArrayUInt8::acons(file->ucsize, JavaArray::ofByte, vm);
-      int ok = archive->readFile(res, file);
+      int ok = archive.readFile(res, file);
       if (ok) {
         char* mainClass = findInformation(res, MAIN_CLASS, LENGTH_MAIN_CLASS);
-        archive->remove();
         if (mainClass) {
           className = mainClass;
         } else {

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp Thu May 29 16:10:25 2008
@@ -333,14 +333,13 @@
                      compilingMethod->printString());
   }
 
-  Reader* reader = codeAtt->toReader(compilingClass->isolate,
-                                     compilingClass->bytes, codeAtt);
-  maxStack = reader->readU2();
-  maxLocals = reader->readU2();
-  codeLen = reader->readU4();
-  uint32 start = reader->cursor;
+  Reader reader(codeAtt, compilingClass->bytes);
+  maxStack = reader.readU2();
+  maxLocals = reader.readU2();
+  codeLen = reader.readU4();
+  uint32 start = reader.cursor;
   
-  reader->seek(codeLen, Reader::SeekCur);
+  reader.seek(codeLen, Reader::SeekCur);
   
   const FunctionType *funcType = llvmFunction->getFunctionType();
   returnType = funcType->getReturnType();
@@ -486,14 +485,13 @@
                      compilingMethod->printString());
   }
 
-  Reader* reader = codeAtt->toReader(compilingClass->isolate,
-                                     compilingClass->bytes, codeAtt);
-  maxStack = reader->readU2();
-  maxLocals = reader->readU2();
-  codeLen = reader->readU4();
-  uint32 start = reader->cursor;
+  Reader reader(codeAtt, compilingClass->bytes);
+  maxStack = reader.readU2();
+  maxLocals = reader.readU2();
+  codeLen = reader.readU4();
+  uint32 start = reader.cursor;
   
-  reader->seek(codeLen, Reader::SeekCur);
+  reader.seek(codeLen, Reader::SeekCur);
 
   const FunctionType *funcType = llvmFunction->getFunctionType();
   returnType = funcType->getReturnType();
@@ -702,9 +700,9 @@
 }
 
 
-unsigned JavaJIT::readExceptionTable(Reader* reader) {
+unsigned JavaJIT::readExceptionTable(Reader& reader) {
   BasicBlock* temp = currentBlock;
-  uint16 nbe = reader->readU2();
+  uint16 nbe = reader.readU2();
   std::vector<Exception*> exceptions;  
   unsigned sync = isSynchro(compilingMethod->access) ? 1 : 0;
   nbe += sync;
@@ -766,11 +764,11 @@
   mvm::jit::executionEngine->lock.release();
   for (uint16 i = 0; i < nbe - sync; ++i) {
     Exception* ex = new Exception();
-    ex->startpc   = reader->readU2();
-    ex->endpc     = reader->readU2();
-    ex->handlerpc = reader->readU2();
+    ex->startpc   = reader.readU2();
+    ex->endpc     = reader.readU2();
+    ex->handlerpc = reader.readU2();
 
-    ex->catche = reader->readU2();
+    ex->catche = reader.readU2();
 
     if (ex->catche) {
       JavaObject* exc = 0;

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.h Thu May 29 16:10:25 2008
@@ -166,7 +166,7 @@
   std::vector<llvm::BasicBlock*> jsrs;
   // exception local
   llvm::Value* supplLocal;
-  unsigned readExceptionTable(Reader* reader);
+  unsigned readExceptionTable(Reader& reader);
   llvm::BasicBlock* endExceptionBlock;
   llvm::BasicBlock* currentExceptionBlock;
   llvm::BasicBlock* unifiedUnreachable;

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaString.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaString.h Thu May 29 16:10:25 2008
@@ -21,11 +21,6 @@
 
 class JavaString : public JavaObject {
 public:
-  static VirtualTable* VT;
-  virtual void print(mvm::PrintBuffer* buf) const {
-    buf->write("Java string");
-  }
-  virtual void TRACER;
 
   // CLASSPATH FIELDS!!
   const UTF8* value;

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Thu May 29 16:10:25 2008
@@ -160,16 +160,16 @@
   }
 }
 
-void Jnjvm::readParents(Class* cl, Reader* reader) {
+void Jnjvm::readParents(Class* cl, Reader& reader) {
   JavaCtpInfo* ctpInfo = cl->ctpInfo;
-  unsigned short int superEntry = reader->readU2();
+  unsigned short int superEntry = reader.readU2();
   const UTF8* super = superEntry ? 
         ctpInfo->resolveClassName(superEntry) : 0;
 
-  unsigned short int nbI = reader->readU2();
+  unsigned short int nbI = reader.readU2();
   cl->superUTF8 = super;
   for (int i = 0; i < nbI; i++)
-    cl->interfacesUTF8.push_back(ctpInfo->resolveClassName(reader->readU2()));
+    cl->interfacesUTF8.push_back(ctpInfo->resolveClassName(reader.readU2()));
 
 }
 
@@ -197,31 +197,29 @@
                                               classLoader, true, false, true));
 }
 
-void Jnjvm::readAttributs(Class* cl, Reader* reader,
-                           std::vector<Attribut*,
-                                       gc_allocator<Attribut*> >& attr) {
+void Jnjvm::readAttributs(Class* cl, Reader& reader,
+                           std::vector<Attribut*>& attr) {
   JavaCtpInfo* ctpInfo = cl->ctpInfo;
-  unsigned short int nba = reader->readU2();
+  unsigned short int nba = reader.readU2();
   
   for (int i = 0; i < nba; i++) {
-    const UTF8* attName = ctpInfo->UTF8At(reader->readU2());
-    unsigned int attLen = reader->readU4();
-    Attribut* att = new Attribut();
-    att->derive(attName, attLen, reader);
+    const UTF8* attName = ctpInfo->UTF8At(reader.readU2());
+    uint32 attLen = reader.readU4();
+    Attribut* att = new Attribut(attName, attLen, reader);
     attr.push_back(att);
-    reader->seek(attLen, Reader::SeekCur);
+    reader.seek(attLen, Reader::SeekCur);
   }
 }
 
-void Jnjvm::readFields(Class* cl, Reader* reader) {
-  unsigned short int nbFields = reader->readU2();
+void Jnjvm::readFields(Class* cl, Reader& reader) {
+  uint16 nbFields = reader.readU2();
   JavaCtpInfo* ctpInfo = cl->ctpInfo;
   uint32 sindex = 0;
   uint32 vindex = 0;
   for (int i = 0; i < nbFields; i++) {
-    uint16 access = reader->readU2();
-    const UTF8* name = ctpInfo->UTF8At(reader->readU2());
-    const UTF8* type = ctpInfo->UTF8At(reader->readU2());
+    uint16 access = reader.readU2();
+    const UTF8* name = ctpInfo->UTF8At(reader.readU2());
+    const UTF8* type = ctpInfo->UTF8At(reader.readU2());
     JavaField* field = cl->constructField(name, type, access);
     isStatic(access) ?
       field->num = sindex++ :
@@ -230,13 +228,13 @@
   }
 }
 
-void Jnjvm::readMethods(Class* cl, Reader* reader) {
-  unsigned short int nbMethods = reader->readU2();
+void Jnjvm::readMethods(Class* cl, Reader& reader) {
+  uint16 nbMethods = reader.readU2();
   JavaCtpInfo* ctpInfo = cl->ctpInfo;
   for (int i = 0; i < nbMethods; i++) {
-    uint16 access = reader->readU2();
-    const UTF8* name = ctpInfo->UTF8At(reader->readU2());
-    const UTF8* type = ctpInfo->UTF8At(reader->readU2());
+    uint16 access = reader.readU2();
+    const UTF8* name = ctpInfo->UTF8At(reader.readU2());
+    const UTF8* type = ctpInfo->UTF8At(reader.readU2());
     JavaMethod* meth = cl->constructMethod(name, type, access);
     readAttributs(cl, reader, meth->attributs);
   }
@@ -249,19 +247,19 @@
   PRINT_DEBUG(JNJVM_LOAD, 0, COLOR_NORMAL, "%s::%s\n", printString(),
               cl->printString());
 
-  Reader* reader = vm_new(this, Reader)(cl->bytes);
-  uint32 magic = reader->readU4();
+  Reader reader(cl->bytes);
+  uint32 magic = reader.readU4();
   if (magic != Jnjvm::Magic) {
     Jnjvm::error(ClassFormatError, "bad magic number %p", magic);
   }
-  cl->minor = reader->readU2();
-  cl->major = reader->readU2();
+  cl->minor = reader.readU2();
+  cl->major = reader.readU2();
   JavaCtpInfo::read(this, cl, reader);
   JavaCtpInfo* ctpInfo = cl->ctpInfo;
-  cl->access = reader->readU2();
+  cl->access = reader.readU2();
   
   const UTF8* thisClassName = 
-    ctpInfo->resolveClassName(reader->readU2());
+    ctpInfo->resolveClassName(reader.readU2());
   
   if (!(thisClassName->equals(cl->name))) {
     error(ClassFormatError, "try to load %s and found class named %s",

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h Thu May 29 16:10:25 2008
@@ -190,12 +190,12 @@
                                          bool doResolve, bool doClinit,
                                          bool doThrow);
 
-  void readParents(Class* cl, Reader* reader);
+  void readParents(Class* cl, Reader& reader);
   void loadParents(Class* cl);
-  void readAttributs(Class* cl, Reader* reader,
+  void readAttributs(Class* cl, Reader& reader,
                      std::vector<Attribut*, gc_allocator<Attribut*> > & attr);
-  void readFields(Class* cl, Reader* reader);
-  void readMethods(Class* cl, Reader* reader);
+  void readFields(Class* cl, Reader& reader);
+  void readMethods(Class* cl, Reader& reader);
   void readClass(Class* cl);
   void initialiseClass(CommonClass* cl);
   void resolveClass(CommonClass* cl, bool doClinit);

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h Thu May 29 16:10:25 2008
@@ -138,26 +138,6 @@
   virtual void TRACER;
 };
 
-struct ltstr
-{
-  bool operator()(const char* s1, const char* s2) const
-  {
-    return strcmp(s1, s2) < 0;
-  }
-};
-
-
-class ZipFileMap : public LockedMap<const char*, ZipFile*, ltstr> {
-public:
-  static VirtualTable* VT;
-  
-  ZipFileMap() {
-    lock = mvm::Lock::allocNormal();
-  }
-  
-  virtual void TRACER;
-};
-
 class StringMap :
     public LockedMap<const UTF8*, JavaString*, ltutf8 > {
 public:

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/NativeUtil.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/NativeUtil.cpp Thu May 29 16:10:25 2008
@@ -403,14 +403,13 @@
   } else {
     Class* cl = meth->classDef;
     JavaCtpInfo* ctp = cl->ctpInfo;
-    Reader* reader = exceptionAtt->toReader(JavaThread::get()->isolate,
-                                            cl->bytes, exceptionAtt);
-    uint16 nbe = reader->readU2();
+    Reader reader(exceptionAtt, cl->bytes);
+    uint16 nbe = reader.readU2();
     ArrayObject* res = ArrayObject::acons(nbe, Classpath::classArrayClass,
                                           JavaThread::get()->isolate);
 
     for (uint16 i = 0; i < nbe; ++i) {
-      uint16 idx = reader->readU2();
+      uint16 idx = reader.readU2();
       CommonClass* cl = ctp->loadClass(idx);
       cl->resolveClass(false);
       JavaObject* obj = cl->getClassDelegatee();

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Reader.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Reader.cpp Thu May 29 16:10:25 2008
@@ -53,10 +53,6 @@
   return ret;
 }
 
-Reader* Reader::derive(Jnjvm* vm, uint32 nbb) {
-  return vm_new(vm, Reader)(bytes, cursor, nbb);
-}
-
 void Reader::seek(uint32 pos, int from) {
   uint32 n = 0;
   uint32 start = min;
@@ -72,7 +68,3 @@
 
   cursor = n;
 }
-
-void Reader::print(mvm::PrintBuffer* buf) const {
-  buf->write("Reader<>");
-}

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Reader.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Reader.h Thu May 29 16:10:25 2008
@@ -15,19 +15,33 @@
 #include "types.h"
 
 #include "JavaArray.h"
+#include "JavaClass.h"
 
 namespace jnjvm {
 
 class Jnjvm;
 
-class Reader : public mvm::Object {
+class Reader {
 public:
-  static VirtualTable* VT;
   ArrayUInt8* bytes;
   uint32 min;
   uint32 cursor;
   uint32 max;
 
+  Reader(Attribut* attr, ArrayUInt8* bytes) {
+    this->bytes = bytes;
+    this->cursor = attr->start;
+    this->min = attr->start;
+    this->max = attr->start + attr->nbb;
+  }
+
+  Reader(Reader& r, uint32 nbb) {
+    bytes = r.bytes;
+    cursor = r.cursor;
+    min = r.min;
+    max = min + nbb;
+  }
+
   static double readDouble(int first, int second) {
     int values[2];
     double res[1];
@@ -110,17 +124,13 @@
     this->max = start + end;
   }
 
-  Reader() {}
   
   unsigned int tell() {
     return cursor - min;
   }
   
   void seek(uint32 pos, int from);
-  Reader* derive(Jnjvm* vm, uint32 nbb);
 
-  virtual void print(mvm::PrintBuffer* buf) const;
-  virtual void TRACER;
 };
 
 } // end namespace jnjvm

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp Thu May 29 16:10:25 2008
@@ -15,22 +15,18 @@
 #include "JavaConstantPool.h"
 #include "JavaIsolate.h"
 #include "JavaObject.h"
-#include "JavaString.h"
 #include "JavaThread.h"
 #include "JavaTypes.h"
 #include "Jnjvm.h"
 #include "LockedMap.h"
-#include "Reader.h"
 #ifdef SERVICE_VM
 #include "ServiceDomain.h"
 #endif
-#include "Zip.h"
 
 using namespace jnjvm;
 
 #define INIT(X) VirtualTable* X::VT = 0
 
-  INIT(JavaArray);
   INIT(ArrayUInt8);
   INIT(ArraySInt8);
   INIT(ArrayUInt16);
@@ -48,15 +44,10 @@
   INIT(JavaObject);
   INIT(JavaThread);
   INIT(Jnjvm);
-  INIT(Reader);
-  INIT(ZipFile);
-  INIT(ZipArchive);
   INIT(ClassMap);
-  INIT(ZipFileMap);
   INIT(StringMap);
   INIT(StaticInstanceMap);
   INIT(JavaIsolate);
-  INIT(JavaString);
   INIT(DelegateeMap);
 #ifdef SERVICE_VM
   INIT(ServiceDomain);
@@ -64,11 +55,6 @@
 
 #undef INIT
 
-void JavaArray::TRACER {
-  classOf->MARK_AND_TRACE;
-  if (lockObj) lockObj->MARK_AND_TRACE;
-}
-
 void ArrayObject::TRACER {
   classOf->MARK_AND_TRACE;
   if (lockObj) lockObj->MARK_AND_TRACE;
@@ -157,38 +143,17 @@
 #endif
 }
 
-void Reader::TRACER {
-  bytes->MARK_AND_TRACE;
-}
-
-void ZipFile::TRACER {
-}
-
-void ZipArchive::TRACER {
-  reader->MARK_AND_TRACE;
-  filetable->MARK_AND_TRACE;
-}
-
 void JavaIsolate::TRACER {
   Jnjvm::PARENT_TRACER;
   bootstrapThread->MARK_AND_TRACE;
 }
 
-void JavaString::TRACER {
-}
-
 void ClassMap::TRACER {
   for (iterator i = map.begin(), e = map.end(); i!= e; ++i) {
     i->second->MARK_AND_TRACE;
   }
 }
 
-void ZipFileMap::TRACER {
-  for (iterator i = map.begin(), e = map.end(); i!= e; ++i) {
-    i->second->MARK_AND_TRACE;
-  }
-}
-
 void StringMap::TRACER {
   for (iterator i = map.begin(), e = map.end(); i!= e; ++i) {
     i->second->MARK_AND_TRACE;

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Zip.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Zip.cpp Thu May 29 16:10:25 2008
@@ -10,43 +10,30 @@
 #include <zlib.h>
 
 #include "JavaArray.h"
-#include "Jnjvm.h"
-#include "LockedMap.h"
 #include "Reader.h"
 #include "Zip.h"
 
 using namespace jnjvm;
 
-ZipArchive* ZipArchive::hashedArchive(Jnjvm* vm, char* archname) {
+ZipArchive* ZipArchive::hashedArchive(Jnjvm* vm, const char* name) {
   assert(0 && "implement hashedArchive");
   return 0;
 }
 
-ZipArchive* ZipArchive::singleArchive(Jnjvm* vm, char* archname) {
-  ZipArchive* ar = vm_new(vm, ZipArchive)();
-  ar->vm = vm;
-  ar->name = archname;
-  ArrayUInt8* bytes = Reader::openFile(vm, archname);
-  if (bytes != 0) {
-    ar->reader = vm_new(vm, Reader)(bytes);
-    ar->findOfscd();
-    if (ar->ofscd > -1) {
-      ar->filetable = vm_new(vm, ZipFileMap)();
-      ar->addFiles();
-      return ar;
-    }
-  }
-  return 0;
+ZipArchive::ZipArchive(ArrayUInt8* bytes) {
+  this->bytes = bytes;
+  findOfscd();
+  if (ofscd > -1)
+    addFiles();
 }
 
 ZipFile* ZipArchive::getFile(const char* filename) {
-  ZipFile* res = filetable->lookup(filename);
-  return res;
+  table_iterator End = filetable.end();
+  table_iterator I = filetable.find(filename);
+  return I != End ? I->second : 0;
 }
 
 
-void ZipArchive::remove() {}
-
 #define END_CENTRAL_DIRECTORY_FILE_HEADER_SIZE 18
 #define CENTRAL_DIRECTORY_FILE_HEADER_SIZE 42
 #define LOCAL_FILE_HEADER_SIZE 26
@@ -71,17 +58,17 @@
 #define ZIP_DEFLATE 8
 #define DEF_WBITS 15
 
-static uint32 readEndianDep4(Reader* reader) {
-  uint8 one = reader->readU1();
-  uint8 two = reader->readU1();
-  uint8 three = reader->readU1();
-  uint8 four = reader->readU1();
+static uint32 readEndianDep4(Reader& reader) {
+  uint8 one = reader.readU1();
+  uint8 two = reader.readU1();
+  uint8 three = reader.readU1();
+  uint8 four = reader.readU1();
   return (one + (two << 8) + (three << 16) + (four << 24));
 }
 
-static uint16 readEndianDep2(Reader* reader) {
-  uint8 one = reader->readU1();
-  uint8 two = reader->readU1();
+static uint16 readEndianDep2(Reader& reader) {
+  uint8 one = reader.readU1();
+  uint8 two = reader.readU1();
   return (one + (two << 8));
 }
 
@@ -89,8 +76,9 @@
   sint32 curOffs = 0;
   sint32 minOffs = 0;
   sint32 st = END_CENTRAL_DIRECTORY_FILE_HEADER_SIZE + 4;
-
-  curOffs = reader->max;
+  
+  Reader reader(bytes);
+  curOffs = reader.max;
   if (curOffs >= (65535 + END_CENTRAL_DIRECTORY_FILE_HEADER_SIZE + 4)) {
     minOffs = curOffs - (65535 + END_CENTRAL_DIRECTORY_FILE_HEADER_SIZE + 4);
   } else {
@@ -104,24 +92,25 @@
     } else {
       curOffs = 0;
     }
-    reader->cursor += curOffs;
+    reader.cursor += curOffs;
 
-    sint32 diff = reader->max - reader->cursor;
-    sint32 temp = reader->cursor;
+    sint32 diff = reader.max - reader.cursor;
+    sint32 temp = reader.cursor;
     if (diff > 1024) {
       searchPos = 1024;
-      reader->cursor += 1024;
+      reader.cursor += 1024;
     } else {
       searchPos = diff;
-      reader->cursor = reader->max;
+      reader.cursor = reader.max;
     }
 
     if (searchPos >= st) {
       sint32 searchPtr = temp + (searchPos - st);
       while (searchPtr > temp) {
-        if (reader->bytes->elements[searchPtr] == 'P' && !(memcmp(&(reader->bytes->elements[searchPtr]), HDR_ENDCENTRAL, 4))) {
+        if (reader.bytes->elements[searchPtr] == 'P' && 
+          !(memcmp(&(reader.bytes->elements[searchPtr]), HDR_ENDCENTRAL, 4))) {
           sint32 offset = searchPtr + 4 + E_OFFSET_START_CENTRAL_DIRECTORY;
-          reader->cursor = offset;
+          reader.cursor = offset;
           this->ofscd = readEndianDep4(reader);
           return;
         }
@@ -133,16 +122,17 @@
 
 void ZipArchive::addFiles() {
   sint32 temp = ofscd;
-
-  reader->cursor = temp;
+  
+  Reader reader(bytes);
+  reader.cursor = temp;
 
   while (true) {
-    if (memcmp(&(reader->bytes->elements[temp]), HDR_CENTRAL, 4)) return;
-    ZipFile* ptr = vm_new(vm, ZipFile)();
-    reader->cursor = temp + 4 + C_COMPRESSION_METHOD;
+    if (memcmp(&(reader.bytes->elements[temp]), HDR_CENTRAL, 4)) return;
+    ZipFile* ptr = new ZipFile();
+    reader.cursor = temp + 4 + C_COMPRESSION_METHOD;
     ptr->compressionMethod = readEndianDep2(reader);
     
-    reader->cursor = temp + 4 + C_CSIZE;
+    reader.cursor = temp + 4 + C_CSIZE;
     
     ptr->csize = readEndianDep4(reader);
     ptr->ucsize = readEndianDep4(reader);
@@ -150,23 +140,25 @@
     ptr->extraFieldLength = readEndianDep2(reader);
     ptr->fileCommentLength = readEndianDep2(reader);
 
-    reader->cursor = temp + 4 + C_ROLH;
+    reader.cursor = temp + 4 + C_ROLH;
     ptr->rolh = readEndianDep4(reader);
 
     temp = temp + 4 + CENTRAL_DIRECTORY_FILE_HEADER_SIZE;
 
-    if ((ptr->filenameLength > 1024) || (reader->max - temp) < ptr->filenameLength)
+    if ((ptr->filenameLength > 1024) || 
+        (reader.max - temp) < ptr->filenameLength)
       return;
 
     ptr->filename = (char*)malloc(ptr->filenameLength + 1);
-    memcpy(ptr->filename, &(reader->bytes->elements[temp]), ptr->filenameLength);
+    memcpy(ptr->filename, &(reader.bytes->elements[temp]), ptr->filenameLength);
     ptr->filename[ptr->filenameLength] = 0;
 
     if (ptr->filename[ptr->filenameLength - 1] != PATH_SEPARATOR) {
-      filetable->hash(ptr->filename, ptr);
+      filetable.insert(std::make_pair(ptr->filename, ptr));
     }
 
-    temp = temp + ptr->filenameLength + ptr->extraFieldLength + ptr->fileCommentLength;
+    temp = temp + ptr->filenameLength + ptr->extraFieldLength + 
+      ptr->fileCommentLength;
   }
 }
 
@@ -177,19 +169,21 @@
   char* ptr = (char*)array->elements;
   uint32 temp = 0;
 
-  reader->cursor = file->rolh;
+  Reader reader(bytes);
+  reader.cursor = file->rolh;
   
-  if (!(memcmp(&(reader->bytes->elements[file->rolh]), HDR_LOCAL, 4))) {
-    reader->cursor += 4;
-    temp = reader->cursor;
-    reader->cursor += L_FILENAME_LENGTH;
+  if (!(memcmp(&(reader.bytes->elements[file->rolh]), HDR_LOCAL, 4))) {
+    reader.cursor += 4;
+    temp = reader.cursor;
+    reader.cursor += L_FILENAME_LENGTH;
     filenameLength = readEndianDep2(reader);
     extraFieldLength = readEndianDep2(reader);
 
-    reader->cursor = temp + extraFieldLength + filenameLength + LOCAL_FILE_HEADER_SIZE;
+    reader.cursor = 
+      temp + extraFieldLength + filenameLength + LOCAL_FILE_HEADER_SIZE;
 
     if (file->compressionMethod == ZIP_STORE) {
-      memcpy(ptr, &(reader->bytes->elements[reader->cursor]), file->ucsize);
+      memcpy(ptr, &(reader.bytes->elements[reader.cursor]), file->ucsize);
     } else if (file->compressionMethod == ZIP_DEFLATE) {
       z_stream stre;
       sint32 err = 0;
@@ -208,17 +202,17 @@
 
       while (bytesLeft) {
         uint32 size = 0;
-        stre.next_in = &(reader->bytes->elements[reader->cursor]);
+        stre.next_in = &(reader.bytes->elements[reader.cursor]);
         if (bytesLeft > 1024) size = 1024;
         else size = bytesLeft;
 
-        uint32 diff = reader->max - reader->cursor;
+        uint32 diff = reader.max - reader.cursor;
         if (diff < size) {
           stre.avail_in = diff;
-          reader->cursor = reader->max;
+          reader.cursor = reader.max;
         } else {
           stre.avail_in = size;
-          reader->cursor += size;
+          reader.cursor += size;
         }
 
         if (bytesLeft > size) {
@@ -232,7 +226,8 @@
 
       inflateEnd(&stre);
 
-      if ((err != Z_STREAM_END) && (bytesLeft || err != Z_BUF_ERROR || stre.avail_out)) {
+      if ((err != Z_STREAM_END) && 
+          (bytesLeft || err != Z_BUF_ERROR || stre.avail_out)) {
         return 0;
       } else {
         return 1;

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Zip.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Zip.h Thu May 29 16:10:25 2008
@@ -10,20 +10,13 @@
 #ifndef JNJVM_ZIP_H
 #define JNJVM_ZIP_H
 
-#include "mvm/Object.h"
-#include "mvm/PrintBuffer.h"
-
+#include <map>
 
 namespace jnjvm {
 
 class ArrayUInt8;
-class Reader;
-class ZipFileMap;
-
 
-class ZipFile : public mvm::Object {
-public:
-  static VirtualTable* VT;
+struct ZipFile {
   char* filename;
   int ucsize;
   int csize;
@@ -32,41 +25,47 @@
   uint32 fileCommentLength;
   int rolh;
   int compressionMethod;
+};
 
 
-  virtual void print(mvm::PrintBuffer* buf) const {
-    buf->write("ZipFile<");
-    buf->write(filename);
-    buf->write(">");
-  }
-  virtual void TRACER;
-};
 
-class ZipArchive : public mvm::Object {
-public:
-  static VirtualTable* VT;
+class ZipArchive {
+private:
+  
+  struct ltstr
+  {
+    bool operator()(const char* s1, const char* s2) const
+    {
+      return strcmp(s1, s2) < 0;
+    }
+  };
+  
   int ofscd;
-  ZipFileMap* filetable;
-  char* name;
-  Reader* reader;
-  Jnjvm* vm;
-
-  virtual void print(mvm::PrintBuffer* buf) const {
-    buf->write("ZipArchive<");
-    buf->write(name);
-    buf->write(">");
+  std::map<const char*, ZipFile*, ltstr> filetable;
+  typedef std::map<const char*, ZipFile*, ltstr>::iterator table_iterator;
+  ArrayUInt8* bytes;
+  
+  void findOfscd();
+  void addFiles();
+  
+  void remove();
+
+public:
+  
+  ~ZipArchive() {
+    for (table_iterator I = filetable.begin(), E = filetable.end(); I != E; 
+         ++I) {
+      free((void*)I->first);
+      delete I->second;
+    }
   }
-  virtual void TRACER;
 
-  static ZipArchive* hashedArchive(Jnjvm* vm, char* archname);
-  static ZipArchive* singleArchive(Jnjvm* vm, char* archname);
+  int getOfscd() { return ofscd; }
+  ZipArchive(ArrayUInt8* bytes);
+  static ZipArchive* hashedArchive(Jnjvm* vm, const char* archname);
   ZipFile* getFile(const char* filename);
   int readFile(ArrayUInt8* array, const ZipFile* file);
-  void remove();
 
-private:
-  void findOfscd();
-  void addFiles();
 };
 
 } // end namespace jnjvm





More information about the llvm-commits mailing list