[vmkit-commits] [vmkit] r143824 - /vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc

Will Dietz wdietz2 at illinois.edu
Sat Nov 5 14:04:26 PDT 2011


Author: wdietz2
Date: Sat Nov  5 16:04:25 2011
New Revision: 143824

URL: http://llvm.org/viewvc/llvm-project?rev=143824&view=rev
Log:
Impl JVM_{FindClassFromClassLoader,FindClassFromBootLoader,FindLoadedClass}

Modified:
    vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc

Modified: vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc?rev=143824&r1=143823&r2=143824&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc (original)
+++ vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc Sat Nov  5 16:04:25 2011
@@ -861,12 +861,52 @@
 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 =
+    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;
 }
 
 /*
@@ -881,7 +921,27 @@
 /* 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 */





More information about the vmkit-commits mailing list