[vmkit-commits] [vmkit] r61712 - /vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Mon Jan 5 09:46:08 PST 2009


Author: geoffray
Date: Mon Jan  5 11:46:07 2009
New Revision: 61712

URL: http://llvm.org/viewvc/llvm-project?rev=61712&view=rev
Log:
Don't static initialize strings if there aren't any.
Dont initialize an abstract method if the virtual table.


Modified:
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp

Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp?rev=61712&r1=61711&r2=61712&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp Mon Jan  5 11:46:07 2009
@@ -1173,7 +1173,12 @@
 
   for (uint32 i = VT_NB_FUNCS; i < size; ++i) {
     Function* F = ((Function**)VT)[i];
-    Elemts.push_back(ConstantExpr::getCast(Instruction::BitCast, F, PTy));
+    JavaMethod* meth = LLVMMethodInfo::get(F);
+    if (isAbstract(meth->access)) {
+      Elemts.push_back(Constant::getNullValue(PTy));
+    } else {
+      Elemts.push_back(ConstantExpr::getCast(Instruction::BitCast, F, PTy));
+    }
   }
 
   Constant* Array = ConstantArray::get(ATy, Elemts);
@@ -2243,24 +2248,28 @@
   
   Function* LoadClass = Function::Create(FTy, GlobalValue::ExternalLinkage,
                                          "vmjcLoadClass", this);
-
-  llvmArgs.clear();
-  llvmArgs.push_back(ptrType); // class loader
-  llvmArgs.push_back(strings.begin()->second->getType()); // val
-  FTy = FunctionType::get(Type::VoidTy, llvmArgs, false);
-  
-  Function* AddString = Function::Create(FTy, GlobalValue::ExternalLinkage,
-                                         "vmjcAddString", this);
   
   BasicBlock* currentBlock = BasicBlock::Create("enter", StaticInitializer);
   Function::arg_iterator loader = StaticInitializer->arg_begin();
-
+  
   Value* Args[3];
+  // If we have defined some strings.
+  if (strings.begin() != strings.end()) {
+    llvmArgs.clear();
+    llvmArgs.push_back(ptrType); // class loader
+    llvmArgs.push_back(strings.begin()->second->getType()); // val
+    FTy = FunctionType::get(Type::VoidTy, llvmArgs, false);
+  
+    Function* AddString = Function::Create(FTy, GlobalValue::ExternalLinkage,
+                                           "vmjcAddString", this);
+  
+
   
-  for (string_iterator i = strings.begin(), e = strings.end(); i != e; ++i) {
-    Args[0] = loader;
-    Args[1] = i->second;
-    CallInst::Create(AddString, Args, Args + 2, "", currentBlock);
+    for (string_iterator i = strings.begin(), e = strings.end(); i != e; ++i) {
+      Args[0] = loader;
+      Args[1] = i->second;
+      CallInst::Create(AddString, Args, Args + 2, "", currentBlock);
+    }
   }
   
   for (native_class_iterator i = nativeClasses.begin(), 





More information about the vmkit-commits mailing list