[vmkit-commits] [vmkit] r198302 - Implement JVM_FindClassFromClassLoader

Gael Thomas gael.thomas at lip6.fr
Thu Jan 2 04:37:38 PST 2014


Author: gthomas
Date: Thu Jan  2 06:37:37 2014
New Revision: 198302

URL: http://llvm.org/viewvc/llvm-project?rev=198302&view=rev
Log:
Implement JVM_FindClassFromClassLoader

Modified:
    vmkit/branches/mcjit/include/j3/j3.h
    vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc
    vmkit/branches/mcjit/lib/j3/vm/j3.cc
    vmkit/branches/mcjit/lib/j3/vm/j3jni.cc

Modified: vmkit/branches/mcjit/include/j3/j3.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3.h?rev=198302&r1=198301&r2=198302&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3.h (original)
+++ vmkit/branches/mcjit/include/j3/j3.h Thu Jan  2 06:37:37 2014
@@ -123,6 +123,7 @@ namespace j3 {
 
 		static JNIEnv* jniEnv();
 
+		static void    classNotFoundException(const vmkit::Name* name) __attribute__((noreturn));
 		static void    noClassDefFoundError(const vmkit::Name* name) __attribute__((noreturn));
 		static void    classFormatError(J3Class* cl, const wchar_t* reason, ...) __attribute__((noreturn));
 		static void    noSuchMethodError(const wchar_t* msg, 

Modified: vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc?rev=198302&r1=198301&r2=198302&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc (original)
+++ vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc Thu Jan  2 06:37:37 2014
@@ -348,11 +348,31 @@ jclass JNICALL JVM_FindClassFromBootLoad
  * or NoClassDefFoundError depending on the value of the last
  * argument.
  */
-jclass JNICALL JVM_FindClassFromClassLoader(JNIEnv* env, const char *name, jboolean init, jobject loader, jboolean throwError) { 
-	enterJVM(); 
-	fprintf(stderr, " class loader: %p\n", loader);
-	NYI(); 
+jclass JNICALL JVM_FindClassFromClassLoader(JNIEnv* env, const char *jname, jboolean init, jobject jloader, jboolean throwError) { 
+	jclass res;
+	enterJVM();
+	J3* vm = J3Thread::get()->vm();
+	if(jloader)
+		J3::internalError(L"implement me: jloader");
+	J3ClassLoader* loader = J3Thread::get()->vm()->initialClassLoader;
+	const vmkit::Name* name = vm->names()->get(jname);
+	J3Class* cl = loader->loadClass(name);
+	if(!cl) {
+		if(throwError)
+			J3::noClassDefFoundError(name);
+		else
+			J3::classNotFoundException(name);
+	}
+
+	if(init)
+		cl->initialise();
+	else
+		cl->resolve();
+
+	res = cl->javaClass();
+
 	leaveJVM(); 
+	return res;
 }
 
 /*

Modified: vmkit/branches/mcjit/lib/j3/vm/j3.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3.cc?rev=198302&r1=198301&r2=198302&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3.cc Thu Jan  2 06:37:37 2014
@@ -188,6 +188,10 @@ void J3::nullPointerException() {
 	internalError(L"implement me: null pointer exception");
 }
 
+void J3::classNotFoundException(const vmkit::Name* name) {
+	internalError(L"ClassNotFoundException: %ls", name);
+}
+
 void J3::noClassDefFoundError(const vmkit::Name* name) {
 	internalError(L"NoClassDefFoundError: %ls", name);
 }

Modified: vmkit/branches/mcjit/lib/j3/vm/j3jni.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3jni.cc?rev=198302&r1=198301&r2=198302&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3jni.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3jni.cc Thu Jan  2 06:37:37 2014
@@ -477,8 +477,7 @@ void JNICALL GetStringUTFRegion(JNIEnv*
 	for(uint32_t i=0; i<len; i++)
 		buf[i] = content->getCharAt(start+i);
 
-	//buf[len] = 0;
-
+	buf[len] = 0;
 	leaveJVM(); 
 }
 





More information about the vmkit-commits mailing list