[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