[vmkit-commits] [PATCH] Impl JVM_{FindClassFromClassLoader, FindClassFromBootLoader, FindLoadedClass}
Will Dietz
wdietz2 at illinois.edu
Thu Nov 3 07:26:25 PDT 2011
Inlined below.
Thanks! :)
~Will
>From 84f0b389681480cafbb4cd096f160504e223f543 Mon Sep 17 00:00:00 2001
From: Will Dietz <w at wdtz.org>
Date: Wed, 2 Nov 2011 20:41:10 -0500
Subject: [PATCH 05/17] Impl
JVM_{FindClassFromClassLoader,FindClassFromBootLoader,FindLoadedClass}
---
lib/J3/ClassLib/OpenJDK/OpenJDK.inc | 66 +++++++++++++++++++++++++++++++++--
1 files changed, 63 insertions(+), 3 deletions(-)
diff --git a/lib/J3/ClassLib/OpenJDK/OpenJDK.inc
b/lib/J3/ClassLib/OpenJDK/OpenJDK.inc
index 9305e66..60db37a 100644
--- a/lib/J3/ClassLib/OpenJDK/OpenJDK.inc
+++ b/lib/J3/ClassLib/OpenJDK/OpenJDK.inc
@@ -962,12 +962,52 @@ JVM_ResolveClass(JNIEnv *env, jclass cls) {
JNIEXPORT jclass JNICALL
JVM_FindClassFromClassLoader(JNIEnv *env, const char *name, jboolean init,
jobject _loader, jboolean throwError) {
- NYI();
+ BEGIN_JNI_EXCEPTION
+
+ JavaObject * loader = _loader ? *(JavaObject**)_loader : 0;
+ llvm_gcroot(loader, 0);
+
+ jclass res;
+
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ JnjvmClassLoader* JCL = NULL;
+ JCL = JnjvmClassLoader::getJnjvmLoaderFromJavaObject(loader, vm);
+
+ CommonClass * Cl = JCL->loadClassFromAsciiz(name, true, throwError);
+ if (Cl) {
+ if (init && Cl->asClass())
+ Cl->asClass()->initialiseClass(vm);
+ res = (jclass)Cl->getClassDelegateePtr(vm);
+ }
+ else {
+ vm->classNotFoundException(vm->asciizToStr(name));
+ }
+
+ RETURN_FROM_JNI(res);
+
+ END_JNI_EXCEPTION
+
+ return 0;
}
JNIEXPORT jclass JNICALL
JVM_FindClassFromBootLoader(JNIEnv *env, const char *name) {
- NYI();
+ BEGIN_JNI_EXCEPTION
+
+ jclass res = 0;
+
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ JnjvmClassLoader* JCL = vm->bootstrapLoader;
+
+ CommonClass * Cl = JCL->loadClassFromAsciiz(name, true, false);
+ if (Cl) {
+ res = (jclass)Cl->getClassDelegateePtr(vm);
+ }
+ RETURN_FROM_JNI(res);
+
+ END_JNI_EXCEPTION
+
+ return 0;
}
/*
@@ -982,7 +1022,27 @@ JVM_FindClassFromClass(JNIEnv *env, const char
*name, jboolean init,
/* Find a loaded class cached by the VM */
JNIEXPORT jclass JNICALL
JVM_FindLoadedClass(JNIEnv *env, jobject _loader, jstring name) {
- NYI();
+ JavaObject * loader = 0;
+ llvm_gcroot(loader, 0);
+ BEGIN_JNI_EXCEPTION
+
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ JnjvmClassLoader* JCL = NULL;
+
+ JavaString * str = *(JavaString**)name;
+
+ loader = *(JavaObject**)_loader;
+
+ CommonClass * Cl = 0;
+
+ JCL = JnjvmClassLoader::getJnjvmLoaderFromJavaObject(loader, vm);
+ if (JCL)
+ Cl = JCL->lookupClassFromJavaString(str);
+ jclass res = Cl ? (jclass)Cl->getClassDelegateePtr(vm) : 0;
+ RETURN_FROM_JNI(res);
+
+ END_JNI_EXCEPTION
+
}
/* Define a class */
--
1.7.5.1
More information about the vmkit-commits
mailing list