[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