<br><br><div class="gmail_quote">On Sat, Nov 5, 2011 at 10:04 PM, Will Dietz <span dir="ltr"><<a href="mailto:wdietz2@illinois.edu">wdietz2@illinois.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Author: wdietz2<br>
Date: Sat Nov 5 16:04:25 2011<br>
New Revision: 143824<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=143824&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=143824&view=rev</a><br>
Log:<br>
Impl JVM_{FindClassFromClassLoader,FindClassFromBootLoader,FindLoadedClass}<br>
<br>
Modified:<br>
vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc<br>
<br>
Modified: vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc?rev=143824&r1=143823&r2=143824&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc?rev=143824&r1=143823&r2=143824&view=diff</a><br>
==============================================================================<br>
--- vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc (original)<br>
+++ vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc Sat Nov 5 16:04:25 2011<br>
@@ -861,12 +861,52 @@<br>
JNIEXPORT jclass JNICALL<br>
JVM_FindClassFromClassLoader(JNIEnv *env, const char *name, jboolean init,<br>
jobject _loader, jboolean throwError) {<br>
- NYI();<br>
+ BEGIN_JNI_EXCEPTION<br>
+<br>
+ JavaObject * loader = _loader ? *(JavaObject**)_loader : 0;<br>
+ llvm_gcroot(loader, 0);<br>
+<br>
+ jclass res;<br>
+<br>
+ Jnjvm* vm = JavaThread::get()->getJVM();<br>
+ JnjvmClassLoader* JCL =<br>
+ JnjvmClassLoader::getJnjvmLoaderFromJavaObject(loader, vm);<br>
+<br>
+ CommonClass * Cl = JCL->loadClassFromAsciiz(name, true, throwError);<br>
+ if (Cl) {<br>
+ if (init && Cl->asClass())<br>
+ Cl->asClass()->initialiseClass(vm);<br>
+ res = (jclass)Cl->getClassDelegateePtr(vm);<br>
+ }<br>
+ else {<br>
+ vm->classNotFoundException(vm->asciizToStr(name));<br>
+ }<br>
+<br>
+ RETURN_FROM_JNI(res);<br>
+<br>
+ END_JNI_EXCEPTION<br>
+<br>
+ return 0;<br>
}<br>
<br>
JNIEXPORT jclass JNICALL<br>
JVM_FindClassFromBootLoader(JNIEnv *env, const char *name) {<br>
- NYI();<br>
+ BEGIN_JNI_EXCEPTION<br>
+<br>
+ jclass res = 0;<br>
+<br>
+ Jnjvm* vm = JavaThread::get()->getJVM();<br>
+ JnjvmClassLoader* JCL = vm->bootstrapLoader;<br>
+<br>
+ CommonClass * Cl = JCL->loadClassFromAsciiz(name, true, false);<br>
+ if (Cl) {<br>
+ res = (jclass)Cl->getClassDelegateePtr(vm);<br>
+ }<br>
+ RETURN_FROM_JNI(res);<br>
+<br>
+ END_JNI_EXCEPTION<br>
+<br>
+ return 0;<br>
}<br>
<br>
/*<br>
@@ -881,7 +921,27 @@<br>
/* Find a loaded class cached by the VM */<br>
JNIEXPORT jclass JNICALL<br>
JVM_FindLoadedClass(JNIEnv *env, jobject _loader, jstring name) {<br>
- NYI();<br>
+ JavaObject * loader = 0;<br>
+ llvm_gcroot(loader, 0);<br>
+ BEGIN_JNI_EXCEPTION<br>
+<br>
+ Jnjvm* vm = JavaThread::get()->getJVM();<br>
+ JnjvmClassLoader* JCL = NULL;<br>
+<br>
+ JavaString * str = *(JavaString**)name;<br></blockquote><div><br></div><div>Sorry I forgot that one during the review, but str should be defined at the beginning of the method, and a llvm_gcroot call with it should be added too.</div>
<div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
+<br>
+ loader = *(JavaObject**)_loader;<br>
+<br>
+ CommonClass * Cl = 0;<br>
+<br>
+ JCL = JnjvmClassLoader::getJnjvmLoaderFromJavaObject(loader, vm);<br>
+ if (JCL)<br>
+ Cl = JCL->lookupClassFromJavaString(str);<br>
+ jclass res = Cl ? (jclass)Cl->getClassDelegateePtr(vm) : 0;<br>
+ RETURN_FROM_JNI(res);<br>
+<br>
+ END_JNI_EXCEPTION<br>
+<br>
}<br>
<br>
/* Define a class */<br>
<br>
<br>
_______________________________________________<br>
vmkit-commits mailing list<br>
<a href="mailto:vmkit-commits@cs.uiuc.edu">vmkit-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/vmkit-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/vmkit-commits</a><br>
</blockquote></div><br>