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

Nicolas Geoffray nicolas.geoffray at lip6.fr
Tue May 12 05:04:09 PDT 2009


Author: geoffray
Date: Tue May 12 07:03:54 2009
New Revision: 71549

URL: http://llvm.org/viewvc/llvm-project?rev=71549&view=rev
Log:
Don't create UTF8s when it's not necessary.


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

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp Tue May 12 07:03:54 2009
@@ -71,9 +71,7 @@
   if (currentClass) loader = currentClass->classLoader;
   else loader = vm->appClassLoader;
 
-  const UTF8* utf8 = vm->asciizToInternalUTF8(asciiz);
-  
-  UserCommonClass* cl = loader->loadClassFromUserUTF8(utf8, true, true);
+  UserCommonClass* cl = loader->loadClassFromAsciiz(asciiz, true, true);
   if (cl && cl->asClass()) cl->asClass()->initialiseClass(vm);
   return (jclass)(cl->getClassDelegatee(vm));
   
@@ -315,13 +313,24 @@
   BEGIN_JNI_EXCEPTION
   
   Jnjvm* vm = JavaThread::get()->getJVM();
-  UserCommonClass* cl = UserCommonClass::resolvedImplClass(vm, (JavaObject*)clazz, true);
-  const UTF8* name = vm->asciizToInternalUTF8(aname);
-  const UTF8* type = vm->asciizToInternalUTF8(atype);
-  JavaMethod* meth = cl->asClass() ? 
-    cl->asClass()->lookupMethod(name, type, false, true, 0) : 0;
+  UserCommonClass* cl = 
+    UserCommonClass::resolvedImplClass(vm, (JavaObject*)clazz, true);
+
+  UserClass* realCl = 0;
+  if (cl->isClass()) {
+    realCl = cl->asClass();
+  } else {
+    realCl = cl->super;
+  }
 
-  return (jmethodID)meth;
+  const UTF8* name = cl->classLoader->hashUTF8->lookupAsciiz(aname);
+  if (name) {
+    const UTF8* type = cl->classLoader->hashUTF8->lookupAsciiz(atype);
+    if (type) {
+      JavaMethod* meth = realCl->lookupMethod(name, type, false, true, 0);
+      return (jmethodID)meth;
+    }
+  }
 
   END_JNI_EXCEPTION
   return 0;
@@ -933,7 +942,7 @@
 }
 
 
-jfieldID GetFieldID(JNIEnv *env, jclass clazz, const char *name,
+jfieldID GetFieldID(JNIEnv *env, jclass clazz, const char *aname,
 		    const char *sig)  {
 
   BEGIN_JNI_EXCEPTION
@@ -941,10 +950,18 @@
   Jnjvm* vm = JavaThread::get()->getJVM();
   UserCommonClass* cl = 
     UserCommonClass::resolvedImplClass(vm, (JavaObject*)clazz, true);
-  return (jfieldID) (cl->asClass() ? 
-    cl->asClass()->lookupField(vm->asciizToUTF8(name),
-                               vm->asciizToUTF8(sig), 0, 1,
-                               0) : 0);
+
+  if (cl->isClass()) {
+    const UTF8* name = cl->classLoader->hashUTF8->lookupAsciiz(aname);
+    if (name) {
+      const UTF8* type = cl->classLoader->hashUTF8->lookupAsciiz(sig);
+      if (type) {
+        JavaField* field = cl->asClass()->lookupField(name, type, false, true,
+                                                      0);
+        return (jfieldID)field;
+      }
+    }
+  }
   
   END_JNI_EXCEPTION
   return 0;
@@ -1186,12 +1203,18 @@
   Jnjvm* vm = JavaThread::get()->getJVM();
   UserCommonClass* cl = 
     UserCommonClass::resolvedImplClass(vm, (JavaObject*)clazz, true);
-  const UTF8* name = vm->asciizToInternalUTF8(aname);
-  const UTF8* type = vm->asciizToInternalUTF8(atype);
-  JavaMethod* meth = cl->asClass() ? 
-    cl->asClass()->lookupMethod(name, type, true, true, 0) : 0;
 
-  return (jmethodID)meth;
+  if (cl->isClass()) {
+    const UTF8* name = cl->classLoader->hashUTF8->lookupAsciiz(aname);
+    if (name) {
+      const UTF8* type = cl->classLoader->hashUTF8->lookupAsciiz(atype);
+      if (type) {
+        JavaMethod* meth = cl->asClass()->lookupMethod(name, type, true, true,
+                                                       0);
+        return (jmethodID)meth;
+      }
+    }
+  }
 
   END_JNI_EXCEPTION
   return 0;
@@ -1600,7 +1623,7 @@
 }
 
 
-jfieldID GetStaticFieldID(JNIEnv *env, jclass clazz, const char *name,
+jfieldID GetStaticFieldID(JNIEnv *env, jclass clazz, const char *aname,
                           const char *sig) {
   
   BEGIN_JNI_EXCEPTION
@@ -1608,10 +1631,18 @@
   Jnjvm* vm = JavaThread::get()->getJVM();
   UserCommonClass* cl = 
     UserCommonClass::resolvedImplClass(vm, (JavaObject*)clazz, true);
-  return (jfieldID) (cl->asClass() ? 
-    cl->asClass()->lookupField(vm->asciizToUTF8(name),
-                               vm->asciizToUTF8(sig),
-                               true, true, 0) : 0);
+  
+  if (cl->isClass()) {
+    const UTF8* name = cl->classLoader->hashUTF8->lookupAsciiz(aname);
+    if (name) {
+      const UTF8* type = cl->classLoader->hashUTF8->lookupAsciiz(sig);
+      if (type) {
+        JavaField* field = cl->asClass()->lookupField(name, type, true, true,
+                                                      0);
+        return (jfieldID)field;
+      }
+    }
+  }
 
   END_JNI_EXCEPTION
   return 0;
@@ -1986,7 +2017,7 @@
   JnjvmClassLoader* loader = base->classLoader;
   const UTF8* name = base->getName();
   const UTF8* arrayName = loader->constructArrayName(1, name);
-  UserClassArray* array = loader->constructArray(arrayName);
+  UserClassArray* array = loader->constructArray(arrayName, base);
   ArrayObject* res = (ArrayObject*)array->doNew(length, vm);
   if (initialElement) {
     for (sint32 i = 0; i < length; ++i) {

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp Tue May 12 07:03:54 2009
@@ -433,13 +433,11 @@
 }
 
 UserCommonClass* JnjvmClassLoader::lookupClassOrArray(const UTF8* name) {
-  if (name->elements[0] != I_TAB) {
-    UserCommonClass* temp = lookupClass(name);
-    if (temp) return temp;
-  }
+  UserCommonClass* temp = lookupClass(name);
+  if (temp) return temp;
 
   if (this != bootstrapLoader) {
-    UserCommonClass* temp = bootstrapLoader->lookupClassOrArray(name);
+    temp = bootstrapLoader->lookupClassOrArray(name);
     if (temp) return temp;
   }
   
@@ -477,6 +475,24 @@
   return 0;
 }
 
+UserCommonClass* JnjvmClassLoader::loadClassFromAsciiz(const char* asciiz,
+                                                       bool doResolve,
+                                                       bool doThrow) {
+  const UTF8* name = hashUTF8->lookupAsciiz(asciiz);
+  if (!name) name = bootstrapLoader->hashUTF8->lookupAsciiz(asciiz);
+  if (!name) name = isolate->asciizToUTF8(asciiz);
+  
+  UserCommonClass* temp = lookupClass(name);
+  if (temp) return temp;
+  
+  if (this != bootstrapLoader) {
+    temp = bootstrapLoader->lookupClassOrArray(name);
+    if (temp) return temp;
+  }
+ 
+  return loadClassFromUserUTF8(name, doResolve, doThrow);
+}
+
 
 UserCommonClass* 
 JnjvmClassLoader::loadClassFromJavaString(JavaString* str, bool doResolve,

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h Tue May 12 07:03:54 2009
@@ -147,12 +147,17 @@
   ///
   UserClass* loadName(const UTF8* name, bool doResolve, bool doThrow);
   
-  /// lookupClassFromUTF8 - Lookup a class from an UTF8 name and load it.
+  /// loadClassFromUTF8 - Lookup a class from an UTF8 name and load it.
   ///
   UserCommonClass* loadClassFromUserUTF8(const UTF8* utf8,
                                          bool doResolve, bool doThrow);
   
-  /// lookupClassFromJavaString - Lookup a class from a Java String and load it.
+  /// loadClassFromAsciiz - Lookup a class from an asciiz name and load it.
+  ///
+  UserCommonClass* loadClassFromAsciiz(const char* name,
+                                       bool doResolve, bool doThrow);
+  
+  /// loadClassFromJavaString - Lookup a class from a Java String and load it.
   ///
   UserCommonClass* loadClassFromJavaString(JavaString* str,
                                            bool doResolve, bool doThrow);





More information about the vmkit-commits mailing list