[vmkit-commits] [vmkit] r84444 - /vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Sun Oct 18 13:59:23 PDT 2009


Author: geoffray
Date: Sun Oct 18 15:59:22 2009
New Revision: 84444

URL: http://llvm.org/viewvc/llvm-project?rev=84444&view=rev
Log:
When looking at java.lang.Class objects, also look at final objects.


Modified:
    vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp

Modified: vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp?rev=84444&r1=84443&r2=84444&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp Sun Oct 18 15:59:22 2009
@@ -194,21 +194,28 @@
   java_class_iterator End = javaClasses.end();
   java_class_iterator I = javaClasses.find(cl);
   if (I == End) {
-    Class* javaClass = cl->classLoader->bootstrapLoader->upcalls->newClass;
-    LLVMClassInfo* LCI = getClassInfo(javaClass);
-    const llvm::Type* Ty = LCI->getVirtualType();
-    Module& Mod = *getLLVMModule();
+    final_object_iterator End = finalObjects.end();
+    final_object_iterator I = finalObjects.find(cl->delegatee[0]);
+    if (I == End) {
     
-    GlobalVariable* varGV = 
-      new GlobalVariable(Mod, Ty->getContainedType(0), false,
-                         GlobalValue::InternalLinkage, 0, "");
+      Class* javaClass = cl->classLoader->bootstrapLoader->upcalls->newClass;
+      LLVMClassInfo* LCI = getClassInfo(javaClass);
+      const llvm::Type* Ty = LCI->getVirtualType();
+      Module& Mod = *getLLVMModule();
     
-    Constant* res = ConstantExpr::getCast(Instruction::BitCast, varGV,
-                                          JnjvmModule::JavaObjectType);
+      GlobalVariable* varGV = 
+        new GlobalVariable(Mod, Ty->getContainedType(0), false,
+                           GlobalValue::InternalLinkage, 0, "");
+    
+      Constant* res = ConstantExpr::getCast(Instruction::BitCast, varGV,
+                                            JnjvmModule::JavaObjectType);
   
-    javaClasses.insert(std::make_pair(cl, res));
-    varGV->setInitializer(CreateConstantFromJavaClass(cl));
-    return res;
+      javaClasses.insert(std::make_pair(cl, res));
+      varGV->setInitializer(CreateConstantFromJavaClass(cl));
+      return res;
+    } else {
+      return I->second;
+    }
   } else {
     return I->second;
   }





More information about the vmkit-commits mailing list