[vmkit-commits] [vmkit] r75051 - /vmkit/trunk/lib/JnJVM/Compiler/JITInfo.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Wed Jul 8 14:42:23 PDT 2009


Author: geoffray
Date: Wed Jul  8 16:42:21 2009
New Revision: 75051

URL: http://llvm.org/viewvc/llvm-project?rev=75051&view=rev
Log:
Set correct virtualType of java.lang.Object.


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

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/Compiler/JITInfo.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Compiler/JITInfo.cpp Wed Jul  8 16:42:21 2009
@@ -39,35 +39,35 @@
 const Type* LLVMClassInfo::getVirtualType() {
   if (!virtualType) {
     std::vector<const llvm::Type*> fields;
+    const TargetData* targetData = JnjvmModule::TheTargetData;
+    const StructLayout* sl = 0;
+    const StructType* structType = 0;
     
     if (classDef->super) {
       LLVMClassInfo* CLI = JavaLLVMCompiler::getClassInfo(classDef->super);
       const llvm::Type* Ty = CLI->getVirtualType()->getContainedType(0);
-
-      if (classDef->super->super) {
-        fields.push_back(Ty);
-      } else {
-        fields.push_back(JnjvmModule::JavaObjectType->getContainedType(0));
+      fields.push_back(Ty);
+    
+      for (uint32 i = 0; i < classDef->nbVirtualFields; ++i) {
+        JavaField& field = classDef->virtualFields[i];
+        field.num = i + 1;
+        Typedef* type = field.getSignature();
+        LLVMAssessorInfo& LAI = JavaLLVMCompiler::getTypedefInfo(type);
+        fields.push_back(LAI.llvmType);
       }
-    } else {
-      fields.push_back(JnjvmModule::JavaObjectType->getContainedType(0));
-    }
     
-    for (uint32 i = 0; i < classDef->nbVirtualFields; ++i) {
-      JavaField& field = classDef->virtualFields[i];
-      field.num = i + 1;
-      Typedef* type = field.getSignature();
-      LLVMAssessorInfo& LAI = JavaLLVMCompiler::getTypedefInfo(type);
-      fields.push_back(LAI.llvmType);
-    }
     
+      structType = StructType::get(fields, false);
+      virtualType = PointerType::getUnqual(structType);
+      sl = targetData->getStructLayout(structType);
+    
+    } else {
+      virtualType = JnjvmModule::JavaObjectType;
+      structType = dyn_cast<const StructType>(virtualType->getContainedType(0));
+      sl = targetData->getStructLayout(structType);
+      
+    }
     
-    JavaLLVMCompiler* Mod = 
-      (JavaLLVMCompiler*)classDef->classLoader->getCompiler();
-    StructType* structType = StructType::get(fields, false);
-    virtualType = PointerType::getUnqual(structType);
-    const TargetData* targetData = JnjvmModule::TheTargetData;
-    const StructLayout* sl = targetData->getStructLayout(structType);
     
     for (uint32 i = 0; i < classDef->nbVirtualFields; ++i) {
       JavaField& field = classDef->virtualFields[i];
@@ -78,6 +78,8 @@
     classDef->virtualSize = (uint32)size;
     virtualSizeConstant = ConstantInt::get(Type::Int32Ty, size);
    
+    JavaLLVMCompiler* Mod = 
+      (JavaLLVMCompiler*)classDef->classLoader->getCompiler();
     Mod->makeVT(classDef);
   }
 





More information about the vmkit-commits mailing list