[vmkit-commits] [vmkit] r61810 - in /vmkit/trunk/lib/JnJVM/VMCore: JavaClass.h Jnjvm.cpp JnjvmModule.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Tue Jan 6 06:00:13 PST 2009
Author: geoffray
Date: Tue Jan 6 08:00:02 2009
New Revision: 61810
URL: http://llvm.org/viewvc/llvm-project?rev=61810&view=rev
Log:
Add a new state to classes compiled with vmjc so that we don't need
to initialize static final fields when initializing a class.
Modified:
vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h?rev=61810&r1=61809&r2=61810&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h Tue Jan 6 08:00:02 2009
@@ -52,11 +52,12 @@
loaded = 0, /// The .class file has been found.
classRead = 1, /// The .class file has been read.
resolved = 2, /// The class has been resolved.
- inClinit = 3, /// The class is cliniting.
- ready = 4, /// The class is ready to be used.
- erroneous = 5, /// The class is in an erroneous state.
+ vmjc = 3, /// The class is defined in a shared library.
+ inClinit = 4, /// The class is cliniting.
+ ready = 5, /// The class is ready to be used.
+ erroneous = 6, /// The class is in an erroneous state.
dontuseenums = 0xffffffff /// dummy value to force the enum to be int32
-}JavaState;
+} JavaState;
/// Attribut - This class represents JVM attributes to Java class, methods and
Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp?rev=61810&r1=61809&r2=61810&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Tue Jan 6 08:00:02 2009
@@ -114,6 +114,7 @@
// now in progress by the current thread and release the lock on the
// Class object.
setOwnerClass(self);
+ bool vmjced = (getInitializationState() == vmjc);
setInitializationState(inClinit);
UserClass* cl = (UserClass*)this;
#if defined(ISOLATE) || defined(ISOLATE_SHARING)
@@ -178,10 +179,12 @@
PRINT_DEBUG(JNJVM_LOAD, 0, COLOR_NORMAL, "%s\n", printString());
-
- JavaField* fields = cl->getStaticFields();
- for (uint32 i = 0; i < cl->nbStaticFields; ++i) {
- fields[i].initField(val, vm);
+
+ if (!vmjced) {
+ JavaField* fields = cl->getStaticFields();
+ for (uint32 i = 0; i < cl->nbStaticFields; ++i) {
+ fields[i].initField(val, vm);
+ }
}
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp?rev=61810&r1=61809&r2=61810&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp Tue Jan 6 08:00:02 2009
@@ -979,7 +979,7 @@
const StructType* TCMTy = dyn_cast<StructType>(ATy->getContainedType(0));
assert(TCMTy && "Malformed type");
- uint32 status = cl->needsInitialisationCheck() ? resolved : ready;
+ uint32 status = cl->needsInitialisationCheck() ? vmjc : ready;
TempElts.push_back(ConstantInt::get(Type::Int32Ty, status));
TempElts.push_back(getStaticInstance(cl));
Constant* CStr[1] = { ConstantStruct::get(TCMTy, TempElts) };
More information about the vmkit-commits
mailing list