[vmkit-commits] [vmkit] r55308 - in /vmkit/trunk/lib/JnJVM/VMCore: JavaClass.cpp JavaClass.h JavaInitialise.cpp JavaUpcalls.h JnjvmClassLoader.cpp JnjvmClassLoader.h
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Mon Aug 25 01:40:11 PDT 2008
Author: geoffray
Date: Mon Aug 25 03:40:11 2008
New Revision: 55308
URL: http://llvm.org/viewvc/llvm-project?rev=55308&view=rev
Log:
Simplify things: a class can not be hashed without its bytes.
Modified:
vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.h
vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp?rev=55308&r1=55307&r2=55308&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp Mon Aug 25 03:40:11 2008
@@ -210,7 +210,7 @@
name = n;
this->lockVar = mvm::Lock::allocRecursive();
this->condVar = mvm::Cond::allocCond();
- this->status = hashed;
+ this->status = loaded;
this->classLoader = loader;
this->isArray = isArray;
this->isPrimitive = false;
@@ -229,8 +229,9 @@
access = ACC_ABSTRACT | ACC_FINAL | ACC_PUBLIC;
}
-Class::Class(JnjvmClassLoader* loader, const UTF8* n) : CommonClass(loader, n, false) {
- bytes = 0;
+Class::Class(JnjvmClassLoader* loader, const UTF8* n, ArrayUInt8* B) :
+ CommonClass(loader, n, false) {
+ bytes = B;
super = 0;
ctpInfo = 0;
#ifndef MULTIPLE_VM
@@ -248,7 +249,6 @@
display[0] = ClassArray::SuperArray;
display[1] = this;
access = ACC_FINAL | ACC_ABSTRACT;
- status = loaded;
}
void Class::print(mvm::PrintBuffer* buf) const {
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h?rev=55308&r1=55307&r2=55308&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h Mon Aug 25 03:40:11 2008
@@ -46,8 +46,7 @@
/// and accessing static fields of the class) when it is in the ready state.
///
typedef enum JavaState {
- hashed = 0, /// The class is hashed in a class loader table.
- loaded, /// The .class file has been found.
+ loaded = 0, /// The .class file has been found.
classRead, /// The .class file has been read.
prepared, /// The parents of this class has been resolved.
resolved, /// The class has been resolved.
@@ -550,7 +549,7 @@
/// Class - Create a class in the given virtual machine and with the given
/// name.
- Class(JnjvmClassLoader* loader, const UTF8* name);
+ Class(JnjvmClassLoader* loader, const UTF8* name, ArrayUInt8* bytes);
/// readParents - Reads the parents, i.e. super and interfaces, of the class.
///
@@ -586,11 +585,6 @@
return bytes;
}
- void setBytes(ArrayUInt8* B) {
- bytes = B;
- status = loaded;
- }
-
void resolveInnerOuterClasses();
Class* getOuterClass() {
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp?rev=55308&r1=55307&r2=55308&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp Mon Aug 25 03:40:11 2008
@@ -79,17 +79,18 @@
const UTF8* utf8OfChar = JCL->asciizConstructUTF8("[C");
JavaArray::ofChar = JCL->constructArray(utf8OfChar);
((UTF8*)utf8OfChar)->classOf = JavaArray::ofChar;
-
-
-
+
ClassArray::InterfacesArray.push_back(
- JCL->constructClass(JCL->asciizConstructUTF8("java/lang/Cloneable")));
+ JCL->loadName(JCL->asciizConstructUTF8("java/lang/Cloneable"), false,
+ false));
ClassArray::InterfacesArray.push_back(
- JCL->constructClass(JCL->asciizConstructUTF8("java/io/Serializable")));
+ JCL->loadName(JCL->asciizConstructUTF8("java/io/Serializable"), false,
+ false));
ClassArray::SuperArray =
- JCL->constructClass(JCL->asciizConstructUTF8("java/lang/Object"));
+ JCL->loadName(JCL->asciizConstructUTF8("java/lang/Object"), false,
+ false);
JavaArray::ofChar->interfaces = ClassArray::InterfacesArray;
JavaArray::ofChar->super = ClassArray::SuperArray;
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.h?rev=55308&r1=55307&r2=55308&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.h Mon Aug 25 03:40:11 2008
@@ -12,7 +12,7 @@
#define UPCALL_CLASS(vm, name) \
- vm->constructClass(vm->asciizConstructUTF8(name))
+ vm->loadName(vm->asciizConstructUTF8(name), false, false)
#define UPCALL_FIELD(vm, cl, name, type, acc) \
UPCALL_CLASS(vm, cl)->constructField(vm->asciizConstructUTF8(name), \
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp?rev=55308&r1=55307&r2=55308&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp Mon Aug 25 03:40:11 2008
@@ -129,7 +129,7 @@
}
-CommonClass* JnjvmBootstrapLoader::internalLoad(const UTF8* name) {
+Class* JnjvmBootstrapLoader::internalLoad(const UTF8* name) {
CommonClass* cl = lookupClass(name);
@@ -138,28 +138,16 @@
if (bytes) {
cl = constructClass(name, bytes);
}
- } else if (cl->status == hashed) {
- ArrayUInt8* bytes = openName(name);
- if (bytes) {
- if (cl->status == hashed) {
- cl->acquire();
- if (cl->status == hashed) {
- ((Class*)cl)->setBytes(bytes);
- }
- cl->release();
- }
- } else {
- cl = 0;
- }
}
-
- return cl;
+
+ if (cl) assert(!cl->isArray);
+ return (Class*)cl;
}
-CommonClass* JnjvmClassLoader::internalLoad(const UTF8* name) {
+Class* JnjvmClassLoader::internalLoad(const UTF8* name) {
CommonClass* cl = lookupClass(name);
- if (!cl || cl->status == hashed) {
+ if (!cl) {
const UTF8* javaName = name->internalToJava(hashUTF8, 0, name->size);
JavaString* str = isolate->UTF8ToStr(javaName);
JavaObject* obj = (JavaObject*)
@@ -168,14 +156,15 @@
cl = (CommonClass*)(Classpath::vmdataClass->getVirtualObjectField(obj));
}
- return cl;
+ if (cl) assert(!cl->isArray);
+ return (Class*)cl;
}
-CommonClass* JnjvmClassLoader::loadName(const UTF8* name, bool doResolve,
+Class* JnjvmClassLoader::loadName(const UTF8* name, bool doResolve,
bool doThrow) {
- CommonClass* cl = internalLoad(name);
+ Class* cl = internalLoad(name);
if (!cl && doThrow) {
if (!(name->equals(Jnjvm::NoClassDefFoundError))) {
@@ -288,6 +277,7 @@
Class* JnjvmClassLoader::constructClass(const UTF8* name, ArrayUInt8* bytes) {
+ assert(bytes && "constructing a class without bytes");
#ifdef MULTIPLE_VM
if (this != bootstrapLoader && this != sharedLoader && bytes) {
Class* cl = sharedLoader->constructSharedClass(name, bytes);
@@ -299,16 +289,10 @@
ClassMap::iterator I = classes->map.find(name);
Class* res = 0;
if (I == End) {
- res = allocator_new(allocator, Class)(this, name);
- if (bytes) {
- res->setBytes(bytes);
- }
+ res = allocator_new(allocator, Class)(this, name, bytes);
classes->map.insert(std::make_pair(name, res));
} else {
res = ((Class*)(I->second));
- if (res->status == hashed && bytes) {
- res->setBytes(bytes);
- }
}
classes->lock->unlock();
return res;
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h?rev=55308&r1=55307&r2=55308&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h Mon Aug 25 03:40:11 2008
@@ -64,7 +64,7 @@
/// internalLoad - Load the class with the given name.
///
- virtual CommonClass* internalLoad(const UTF8* utf8);
+ virtual Class* internalLoad(const UTF8* utf8);
/// JnjvmClassLoader - Allocate a user-defined class loader. Called on
/// first use of a Java class loader.
@@ -136,7 +136,7 @@
/// loadName - Loads the class of the given name.
///
- CommonClass* loadName(const UTF8* name, bool doResolve, bool doThrow);
+ Class* loadName(const UTF8* name, bool doResolve, bool doThrow);
/// lookupClassFromUTF8 - Lookup a class from an UTF8 name and load it.
///
@@ -162,7 +162,7 @@
/// constructClass - Hashes a runtime representation of a class with
/// the given name.
///
- Class* constructClass(const UTF8* name, ArrayUInt8* bytes = 0);
+ Class* constructClass(const UTF8* name, ArrayUInt8* bytes);
/// constructType - Hashes a Typedef, an internal representation of a class
/// still not loaded.
@@ -217,7 +217,7 @@
/// internalLoad - Load the class with the given name.
///
- virtual CommonClass* internalLoad(const UTF8* utf8) {
+ virtual Class* internalLoad(const UTF8* utf8) {
fprintf(stderr, "Don't use me");
exit(1);
}
@@ -246,7 +246,7 @@
private:
/// internalLoad - Load the class with the given name.
///
- virtual CommonClass* internalLoad(const UTF8* utf8);
+ virtual Class* internalLoad(const UTF8* utf8);
/// bootClasspath - List of paths for the base classes.
///
More information about the vmkit-commits
mailing list