[vmkit-commits] [vmkit] r145398 - /vmkit/trunk/lib/j3/VMCore/Jni.cpp

Will Dietz wdietz2 at illinois.edu
Tue Nov 29 06:43:28 PST 2011


Author: wdietz2
Date: Tue Nov 29 08:43:28 2011
New Revision: 145398

URL: http://llvm.org/viewvc/llvm-project?rev=145398&view=rev
Log:
Impl JNI CallLongMethod

Modified:
    vmkit/trunk/lib/j3/VMCore/Jni.cpp

Modified: vmkit/trunk/lib/j3/VMCore/Jni.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Jni.cpp?rev=145398&r1=145397&r2=145398&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/Jni.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/Jni.cpp Tue Nov 29 08:43:28 2011
@@ -908,9 +908,28 @@
 
 
 jlong CallLongMethod(JNIEnv *env, jobject _obj, jmethodID methodID, ...) {
-  NYI();
-  abort();
-  return 0;
+  BEGIN_JNI_EXCEPTION
+
+  verifyNull(_obj);
+
+  va_list ap;
+  va_start(ap, methodID);
+
+  // Local object references.
+  JavaObject* obj = *(JavaObject**)_obj;
+  llvm_gcroot(obj, 0);
+
+  JavaMethod* meth = (JavaMethod*)methodID;
+  Jnjvm* vm = JavaThread::get()->getJVM();
+  UserClass* cl = getClassFromVirtualMethod(vm, meth, JavaObject::getClass(obj));
+
+  jlong res = meth->invokeLongVirtualAP(vm, cl, obj, ap);
+  va_end(ap);
+
+  RETURN_FROM_JNI(res);
+
+  END_JNI_EXCEPTION
+  RETURN_FROM_JNI(0);
 }
 
 





More information about the vmkit-commits mailing list