[vmkit-commits] [vmkit] r92161 - /vmkit/trunk/lib/J3/VMCore/Jni.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Fri Dec 25 07:13:25 PST 2009


Author: geoffray
Date: Fri Dec 25 09:13:24 2009
New Revision: 92161

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


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=92161&r1=92160&r2=92161&view=diff

==============================================================================
--- vmkit/trunk/lib/J3/VMCore/Jni.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/Jni.cpp Fri Dec 25 09:13:24 2009
@@ -982,10 +982,31 @@
 }
 
 
-void CallVoidMethodA(JNIEnv *env, jobject obj, jmethodID methodID,
+void CallVoidMethodA(JNIEnv *env, jobject _obj, jmethodID methodID,
                      const jvalue *args) {
-  fprintf(stderr, "Implement me\n");
-  abort();
+  BEGIN_JNI_EXCEPTION
+
+  verifyNull(_obj);
+
+  // 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, obj->getClass());
+  
+  Signdef* sign = meth->getSignature();
+  uintptr_t buf = (uintptr_t)alloca(sign->nbArguments * sizeof(uint64));
+  BufToBuf(args, buf, sign);
+  
+  meth->invokeIntVirtualBuf(vm, cl, obj, (void*)buf);
+
+  RETURN_VOID_FROM_JNI;
+
+  END_JNI_EXCEPTION
+  
+  RETURN_VOID_FROM_JNI;
 }
 
 





More information about the vmkit-commits mailing list