[vmkit-commits] [vmkit] r61636 - in /vmkit/trunk/lib/JnJVM/VMCore: JnjvmClassLoader.cpp JnjvmModule.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Sun Jan 4 12:56:03 PST 2009


Author: geoffray
Date: Sun Jan  4 14:56:03 2009
New Revision: 61636

URL: http://llvm.org/viewvc/llvm-project?rev=61636&view=rev
Log:
Also add utf8s and strings in the class loader tables in the static
initializer.


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

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp Sun Jan  4 14:56:03 2009
@@ -939,3 +939,11 @@
 extern "C" void vmjcLoadClass(JnjvmClassLoader* JCL, const UTF8* name) {
   JCL->loadName(name, true, true);
 }
+
+extern "C" void vmjcAddUTF8(JnjvmClassLoader* JCL, const UTF8* val) {
+  JCL->hashUTF8->insert(val);
+}
+
+extern "C" void vmjcAddString(JnjvmClassLoader* JCL, JavaString* val) {
+  JCL->strings.push_back(val);
+}

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp Sun Jan  4 14:56:03 2009
@@ -2249,11 +2249,34 @@
   Function* LoadClass = Function::Create(FTy, GlobalValue::ExternalLinkage,
                                          "vmjcLoadClass", this);
 
+  Function* AddUTF8 = Function::Create(FTy, GlobalValue::ExternalLinkage,
+                                       "vmjcAddUTF8", 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];
+  
+  for (utf8_iterator i = utf8s.begin(), e = utf8s.end(); i != e; ++i) {
+    Args[0] = loader;
+    Args[1] = i->second;
+    CallInst::Create(AddUTF8, 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(), 
        e = nativeClasses.end(); i != e; ++i) {
     if (isCompiling(i->first)) {
@@ -2281,6 +2304,7 @@
       CallInst::Create(GetClassArray, Args, Args + 3, "", currentBlock);
     }
   }
+  
 
   ReturnInst::Create(currentBlock);
 }





More information about the vmkit-commits mailing list