[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