[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