[vmkit-commits] [vmkit] r71649 - in /vmkit/trunk/lib/JnJVM/VMCore: JnjvmClassLoader.cpp JnjvmClassLoader.h

Nicolas Geoffray nicolas.geoffray at lip6.fr
Wed May 13 03:06:01 PDT 2009


Author: geoffray
Date: Wed May 13 05:05:44 2009
New Revision: 71649

URL: http://llvm.org/viewvc/llvm-project?rev=71649&view=rev
Log:
If we can avoid creating strings when loading a class, do so!


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

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp Wed May 13 05:05:44 2009
@@ -324,7 +324,8 @@
 
 
 UserClass* JnjvmBootstrapLoader::internalLoad(const UTF8* name,
-                                              bool doResolve) {
+                                              bool doResolve,
+                                              JavaString* strName) {
   
   UserCommonClass* cl = lookupClass(name);
   
@@ -343,17 +344,20 @@
   return (UserClass*)cl;
 }
 
-UserClass* JnjvmClassLoader::internalLoad(const UTF8* name, bool doResolve) {
+UserClass* JnjvmClassLoader::internalLoad(const UTF8* name, bool doResolve,
+                                          JavaString* strName) {
   UserCommonClass* cl = lookupClass(name);
   
   if (!cl) {
-    const UTF8* javaName = name->internalToJava(isolate, 0, name->size);
-    JavaString* str = isolate->UTF8ToStr(javaName);
     Classpath* upcalls = bootstrapLoader->upcalls;
     UserClass* forCtp = loadClass;
+    if (!strName) {
+      const UTF8* javaName = name->internalToJava(isolate, 0, name->size);
+      strName = isolate->UTF8ToStr(javaName);
+    }
     JavaObject* obj = (JavaObject*)
       upcalls->loadInClassLoader->invokeJavaObjectVirtual(isolate, forCtp,
-                                                          javaLoader, str,
+                                                          javaLoader, strName,
                                                           doResolve);
     cl = (UserCommonClass*)((JavaObjectClass*)obj)->getClass();
   }
@@ -367,10 +371,10 @@
 }
 
 UserClass* JnjvmClassLoader::loadName(const UTF8* name, bool doResolve,
-                                        bool doThrow) {
+                                      bool doThrow, JavaString* strName) {
  
 
-  UserClass* cl = internalLoad(name, doResolve);
+  UserClass* cl = internalLoad(name, doResolve, strName);
 
   if (!cl && doThrow) {
     Jnjvm* vm = JavaThread::get()->getJVM();
@@ -466,7 +470,8 @@
 
 UserCommonClass* JnjvmClassLoader::loadClassFromUserUTF8(const UTF8* name,
                                                          bool doResolve,
-                                                         bool doThrow) {
+                                                         bool doThrow,
+                                                         JavaString* strName) {
   if (name->size == 0) {
     return 0;
   } else if (name->elements[0] == I_TAB) {
@@ -478,7 +483,7 @@
       if (temp) return constructArray(name);
     }
   } else {
-    return loadName(name, doResolve, doThrow);
+    return loadName(name, doResolve, doThrow, strName);
   }
 
   return 0;
@@ -526,7 +531,7 @@
       }
     }
     
-    return loadClassFromUserUTF8(name, doResolve, doThrow);
+    return loadClassFromUserUTF8(name, doResolve, doThrow, str);
   }
 
   return 0;

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h Wed May 13 05:05:44 2009
@@ -62,7 +62,8 @@
 
   /// internalLoad - Load the class with the given name.
   ///
-  virtual UserClass* internalLoad(const UTF8* utf8, bool doResolve);
+  virtual UserClass* internalLoad(const UTF8* utf8, bool doResolve,
+                                  JavaString* strName = 0);
   
   /// internalConstructType - Hashes a Typedef, an internal representation of
   /// a class still not loaded.
@@ -145,12 +146,14 @@
   
   /// loadName - Loads the class of the given name.
   ///
-  UserClass* loadName(const UTF8* name, bool doResolve, bool doThrow);
+  UserClass* loadName(const UTF8* name, bool doResolve, bool doThrow,
+                      JavaString* strName = 0);
   
   /// loadClassFromUTF8 - Lookup a class from an UTF8 name and load it.
   ///
   UserCommonClass* loadClassFromUserUTF8(const UTF8* utf8,
-                                         bool doResolve, bool doThrow);
+                                         bool doResolve, bool doThrow,
+                                         JavaString* strName = 0);
   
   /// loadClassFromAsciiz - Lookup a class from an asciiz name and load it.
   ///
@@ -290,7 +293,8 @@
 private:
   /// internalLoad - Load the class with the given name.
   ///
-  virtual UserClass* internalLoad(const UTF8* utf8, bool doResolve);
+  virtual UserClass* internalLoad(const UTF8* utf8, bool doResolve,
+                                  JavaString* strName = 0);
      
   /// bootClasspath - List of paths for the base classes.
   ///





More information about the vmkit-commits mailing list