[vmkit-commits] [vmkit] r139475 - in /vmkit/trunk: include/mvm/System.h lib/J3/Classpath/ClasspathVMRuntime.inc lib/J3/VMCore/JavaClass.cpp lib/J3/VMCore/Jni.cpp lib/J3/VMCore/Jnjvm.cpp tools/j3/Main.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Sat Sep 10 15:27:00 PDT 2011


Author: geoffray
Date: Sat Sep 10 17:27:00 2011
New Revision: 139475

URL: http://llvm.org/viewvc/llvm-project?rev=139475&view=rev
Log:
Another few bug fixes.


Modified:
    vmkit/trunk/include/mvm/System.h
    vmkit/trunk/lib/J3/Classpath/ClasspathVMRuntime.inc
    vmkit/trunk/lib/J3/VMCore/JavaClass.cpp
    vmkit/trunk/lib/J3/VMCore/Jni.cpp
    vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp
    vmkit/trunk/tools/j3/Main.cpp

Modified: vmkit/trunk/include/mvm/System.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/System.h?rev=139475&r1=139474&r2=139475&view=diff
==============================================================================
--- vmkit/trunk/include/mvm/System.h (original)
+++ vmkit/trunk/include/mvm/System.h Sat Sep 10 17:27:00 2011
@@ -203,6 +203,10 @@
   static int GetNumberOfProcessors() {
     return sysconf(_SC_NPROCESSORS_ONLN);
   }
+
+  static void Exit(int value) {
+    _exit(value);
+  }
 };
 
 }

Modified: vmkit/trunk/lib/J3/Classpath/ClasspathVMRuntime.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathVMRuntime.inc?rev=139475&r1=139474&r2=139475&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/Classpath/ClasspathVMRuntime.inc (original)
+++ vmkit/trunk/lib/J3/Classpath/ClasspathVMRuntime.inc Sat Sep 10 17:27:00 2011
@@ -188,7 +188,7 @@
 jclass clazz,
 #endif
 jint par1) {
-  exit(par1);
+  mvm::System::Exit(par1);
 }
 
 JNIEXPORT jlong Java_java_lang_VMRuntime_freeMemory(

Modified: vmkit/trunk/lib/J3/VMCore/JavaClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaClass.cpp?rev=139475&r1=139474&r2=139475&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/JavaClass.cpp Sat Sep 10 17:27:00 2011
@@ -1060,14 +1060,25 @@
   
   for (sint32 i =0; i < clen; ++i) {
     cur = jniConsClName->elements[i];
-    if (cur == '/') ptr[0] = '_';
-    else if (cur == '_') {
+    if (cur == '/') {
+      ptr[0] = '_';
+      ptr++;
+    } else if (cur == '_') {
       ptr[0] = '_';
       ptr[1] = '1';
-      ++ptr;
+      ptr += 2;
+    } else if (cur == '$') {
+      ptr[0] = '_';
+      ptr[1] = '0';
+      ptr[2] = '0';
+      ptr[3] = '0';
+      ptr[4] = '2';
+      ptr[5] = '4';
+      ptr += 6;
+    } else {
+      ptr[0] = (uint8)cur;
+      ptr++;
     }
-    else ptr[0] = (uint8)cur;
-    ++ptr;
   }
   
   ptr[0] = '_';

Modified: vmkit/trunk/lib/J3/VMCore/Jni.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Jni.cpp?rev=139475&r1=139474&r2=139475&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/Jni.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/Jni.cpp Sat Sep 10 17:27:00 2011
@@ -146,6 +146,7 @@
   
   BEGIN_JNI_EXCEPTION
  
+  verifyNull(_Cl);
   // Local object references.
   JavaObject* Cl = *(JavaObject**)_Cl;
   JavaObject* res = 0;
@@ -156,7 +157,6 @@
   
   Jnjvm* vm = JavaThread::get()->getJVM();
   
-  verifyNull(Cl);
   UserCommonClass* cl = UserCommonClass::resolvedImplClass(vm, Cl, true);
   if (!cl->isClass()) RETURN_FROM_JNI(0);
 
@@ -231,9 +231,9 @@
 jboolean IsSameObject(JNIEnv *env, jobject ref1, jobject ref2) {
   
   BEGIN_JNI_EXCEPTION
-
-  JavaObject* Ref1 = *(JavaObject**)ref1;
-  JavaObject* Ref2 = *(JavaObject**)ref2;
+  
+  JavaObject* Ref1 = ref1 ? *(JavaObject**)ref1 : NULL;
+  JavaObject* Ref2 = ref2 ? *(JavaObject**)ref2 : NULL;
   llvm_gcroot(Ref1, 0);
   llvm_gcroot(Ref2, 0);
 
@@ -492,11 +492,29 @@
 }
 
 
-jobject CallObjectMethodA(JNIEnv *env, jobject obj, jmethodID methodID,
+jobject CallObjectMethodA(JNIEnv *env, jobject _obj, jmethodID methodID,
                           const jvalue * args) {
-  fprintf(stderr, "Implement me\n");
-  abort();
-  return 0;
+  BEGIN_JNI_EXCEPTION
+
+  verifyNull(_obj);
+
+  // Local object references.
+  JavaObject* obj = *(JavaObject**)_obj;
+  JavaObject* res = 0;
+  llvm_gcroot(obj, 0);
+  llvm_gcroot(res, 0);
+
+  JavaMethod* meth = (JavaMethod*)methodID;
+  Jnjvm* vm = JavaThread::get()->getJVM();
+  UserClass* cl = getClassFromVirtualMethod(vm, meth, JavaObject::getClass(obj)); 
+  res = meth->invokeJavaObjectVirtualBuf(vm, cl, obj, (void*)args);
+
+  jobject ret = (jobject)th->pushJNIRef(res);
+  RETURN_FROM_JNI(ret);
+
+  END_JNI_EXCEPTION
+  
+  RETURN_FROM_JNI(0);
 }
 
 
@@ -551,11 +569,26 @@
 }
 
 
-jboolean CallBooleanMethodA(JNIEnv *env, jobject obj, jmethodID methodID,
+jboolean CallBooleanMethodA(JNIEnv *env, jobject _obj, jmethodID methodID,
                             const jvalue * args) {
-  fprintf(stderr, "Implement me\n");
-  abort();
-  return 0;
+  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, JavaObject::getClass(obj)); 
+  jboolean res = (jboolean)meth->invokeIntVirtualBuf(vm, cl, obj, (void*)args);
+
+  RETURN_FROM_JNI(res);
+
+  END_JNI_EXCEPTION
+  
+  RETURN_FROM_JNI(0);
 }
 
 
@@ -588,11 +621,26 @@
 }
 
 
-jbyte CallByteMethodA(JNIEnv *env, jobject obj, jmethodID methodID,
+jbyte CallByteMethodA(JNIEnv *env, jobject _obj, jmethodID methodID,
                       const jvalue *args) {
-  fprintf(stderr, "Implement me\n");
-  abort();
-  return 0;
+  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, JavaObject::getClass(obj)); 
+  jbyte res = (jbyte)meth->invokeIntVirtualBuf(vm, cl, obj, (void*)args);
+
+  RETURN_FROM_JNI(res);
+
+  END_JNI_EXCEPTION
+  
+  RETURN_FROM_JNI(0);
 }
 
 
@@ -626,11 +674,26 @@
 }
 
 
-jchar CallCharMethodA(JNIEnv *env, jobject obj, jmethodID methodID,
+jchar CallCharMethodA(JNIEnv *env, jobject _obj, jmethodID methodID,
                       const jvalue *args) {
-  fprintf(stderr, "Implement me\n");
-  abort();
-  return 0;
+  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, JavaObject::getClass(obj)); 
+  jchar res = (jchar)meth->invokeIntVirtualBuf(vm, cl, obj, (void*)args);
+
+  RETURN_FROM_JNI(res);
+
+  END_JNI_EXCEPTION
+  
+  RETURN_FROM_JNI(0);
 }
 
 
@@ -664,11 +727,26 @@
 }
 
 
-jshort CallShortMethodA(JNIEnv *env, jobject obj, jmethodID methodID,
+jshort CallShortMethodA(JNIEnv *env, jobject _obj, jmethodID methodID,
                         const jvalue *args) {
-  fprintf(stderr, "Implement me\n");
-  abort();
-  return 0;
+  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, JavaObject::getClass(obj)); 
+  jshort res = (jshort)meth->invokeIntVirtualBuf(vm, cl, obj, (void*)args);
+
+  RETURN_FROM_JNI(res);
+
+  END_JNI_EXCEPTION
+  
+  RETURN_FROM_JNI(0);
 }
 
 
@@ -726,9 +804,24 @@
 
 jint CallIntMethodA(JNIEnv *env, jobject _obj, jmethodID methodID,
                     const jvalue *args) {
-  fprintf(stderr, "Implement me\n");
-  abort();
-  return 0;
+  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, JavaObject::getClass(obj)); 
+  jint res = (jint)meth->invokeIntVirtualBuf(vm, cl, obj, (void*)args);
+
+  RETURN_FROM_JNI(res);
+
+  END_JNI_EXCEPTION
+  
+  RETURN_FROM_JNI(0);
 }
 
 
@@ -763,11 +856,26 @@
 }
 
 
-jlong CallLongMethodA(JNIEnv *env, jobject obj, jmethodID methodID,
+jlong CallLongMethodA(JNIEnv *env, jobject _obj, jmethodID methodID,
                       const jvalue *args) {
-  fprintf(stderr, "Implement me\n");
-  abort();
-  return 0;
+  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, JavaObject::getClass(obj)); 
+  jlong res = (jlong)meth->invokeLongVirtualBuf(vm, cl, obj, (void*)args);
+
+  RETURN_FROM_JNI(res);
+
+  END_JNI_EXCEPTION
+  
+  RETURN_FROM_JNI(0);
 }
 
 
@@ -822,9 +930,24 @@
 
 jfloat CallFloatMethodA(JNIEnv *env, jobject _obj, jmethodID methodID,
                         const jvalue *args) {
-  fprintf(stderr, "Implement me\n");
-  abort();
-  return 0;
+  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, JavaObject::getClass(obj)); 
+  jfloat res = (jfloat)meth->invokeFloatVirtualBuf(vm, cl, obj, (void*)args);
+
+  RETURN_FROM_JNI(res);
+
+  END_JNI_EXCEPTION
+  
+  RETURN_FROM_JNI(0.0f);
 }
 
 
@@ -879,9 +1002,24 @@
 
 jdouble CallDoubleMethodA(JNIEnv *env, jobject _obj, jmethodID methodID,
                           const jvalue *args) {
-  fprintf(stderr, "Implement me\n");
-  abort();
-  return 0;
+  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, JavaObject::getClass(obj)); 
+  jdouble res = (jdouble)meth->invokeDoubleVirtualBuf(vm, cl, obj, (void*)args);
+
+  RETURN_FROM_JNI(res);
+
+  END_JNI_EXCEPTION
+  
+  RETURN_FROM_JNI(0.0);
 }
 
 
@@ -1679,11 +1817,27 @@
 }
 
 
-jobject CallStaticObjectMethodA(JNIEnv *env, jclass clazz, jmethodID methodID,
+jobject CallStaticObjectMethodA(JNIEnv *env, jclass _clazz, jmethodID methodID,
                                 const jvalue *args) {
-  fprintf(stderr, "Implement me\n");
-  abort();
-  return 0;
+  BEGIN_JNI_EXCEPTION
+
+  // Local object references.
+  JavaObject* clazz = *(JavaObject**)_clazz;
+  JavaObject* res = 0;
+  llvm_gcroot(clazz, 0);
+  llvm_gcroot(res, 0);
+  
+  JavaMethod* meth = (JavaMethod*)methodID;
+  Jnjvm* vm = JavaThread::get()->getJVM();
+  UserClass* cl = getClassFromStaticMethod(vm, meth, clazz); 
+
+  res = meth->invokeJavaObjectStaticBuf(vm, cl, (void*)args);
+
+  jobject ret = (jobject)th->pushJNIRef(res);
+  RETURN_FROM_JNI(ret);
+
+  END_JNI_EXCEPTION
+  RETURN_FROM_JNI(0);
 }
 
 
@@ -1731,11 +1885,23 @@
 }
 
 
-jboolean CallStaticBooleanMethodA(JNIEnv *env, jclass clazz, jmethodID methodID,
+jboolean CallStaticBooleanMethodA(JNIEnv *env, jclass _clazz, jmethodID methodID,
                                   const jvalue *args) {
-  fprintf(stderr, "Implement me\n");
-  abort();
-  return 0;
+  BEGIN_JNI_EXCEPTION
+
+  // Local object references.
+  JavaObject* clazz = *(JavaObject**)_clazz;
+  llvm_gcroot(clazz, 0);
+  
+  JavaMethod* meth = (JavaMethod*)methodID;
+  Jnjvm* vm = JavaThread::get()->getJVM();
+  UserClass* cl = getClassFromStaticMethod(vm, meth, clazz); 
+  jboolean res = (jboolean) meth->invokeIntStaticBuf(vm, cl, (void*)args);
+
+  RETURN_FROM_JNI(res);
+
+  END_JNI_EXCEPTION
+  RETURN_FROM_JNI(0);
 }
 
 
@@ -1781,11 +1947,23 @@
 }
 
 
-jbyte CallStaticByteMethodA(JNIEnv *env, jclass clazz, jmethodID methodID,
+jbyte CallStaticByteMethodA(JNIEnv *env, jclass _clazz, jmethodID methodID,
                             const jvalue *args) {
-  fprintf(stderr, "Implement me\n");
-  abort();
-  return 0;
+  BEGIN_JNI_EXCEPTION
+
+  // Local object references.
+  JavaObject* clazz = *(JavaObject**)_clazz;
+  llvm_gcroot(clazz, 0);
+  
+  JavaMethod* meth = (JavaMethod*)methodID;
+  Jnjvm* vm = JavaThread::get()->getJVM();
+  UserClass* cl = getClassFromStaticMethod(vm, meth, clazz); 
+  jbyte res = (jbyte) meth->invokeIntStaticBuf(vm, cl, (void*)args);
+
+  RETURN_FROM_JNI(res);
+
+  END_JNI_EXCEPTION
+  RETURN_FROM_JNI(0);
 }
 
 
@@ -1833,9 +2011,21 @@
 
 jchar CallStaticCharMethodA(JNIEnv *env, jclass _clazz, jmethodID methodID,
                             const jvalue *args) {
-  fprintf(stderr, "Implement me\n");
-  abort();
-  return 0;
+  BEGIN_JNI_EXCEPTION
+
+  // Local object references.
+  JavaObject* clazz = *(JavaObject**)_clazz;
+  llvm_gcroot(clazz, 0);
+  
+  JavaMethod* meth = (JavaMethod*)methodID;
+  Jnjvm* vm = JavaThread::get()->getJVM();
+  UserClass* cl = getClassFromStaticMethod(vm, meth, clazz); 
+  jchar res = (jchar) meth->invokeIntStaticBuf(vm, cl, (void*)args);
+
+  RETURN_FROM_JNI(res);
+
+  END_JNI_EXCEPTION
+  RETURN_FROM_JNI(0);
 }
 
 
@@ -1883,11 +2073,23 @@
 }
 
 
-jshort CallStaticShortMethodA(JNIEnv *env, jclass clazz, jmethodID methodID,
+jshort CallStaticShortMethodA(JNIEnv *env, jclass _clazz, jmethodID methodID,
                               const jvalue *args) {
-  fprintf(stderr, "Implement me\n");
-  abort();
-  return 0;
+  BEGIN_JNI_EXCEPTION
+
+  // Local object references.
+  JavaObject* clazz = *(JavaObject**)_clazz;
+  llvm_gcroot(clazz, 0);
+  
+  JavaMethod* meth = (JavaMethod*)methodID;
+  Jnjvm* vm = JavaThread::get()->getJVM();
+  UserClass* cl = getClassFromStaticMethod(vm, meth, clazz); 
+  jshort res = (jshort) meth->invokeIntStaticBuf(vm, cl, (void*)args);
+
+  RETURN_FROM_JNI(res);
+
+  END_JNI_EXCEPTION
+  RETURN_FROM_JNI(0);
 }
 
 
@@ -1934,11 +2136,23 @@
 }
 
 
-jint CallStaticIntMethodA(JNIEnv *env, jclass clazz, jmethodID methodID,
+jint CallStaticIntMethodA(JNIEnv *env, jclass _clazz, jmethodID methodID,
                           const jvalue *args) {
-  fprintf(stderr, "Implement me\n");
-  abort();
-  return 0;
+  BEGIN_JNI_EXCEPTION
+
+  // Local object references.
+  JavaObject* clazz = *(JavaObject**)_clazz;
+  llvm_gcroot(clazz, 0);
+  
+  JavaMethod* meth = (JavaMethod*)methodID;
+  Jnjvm* vm = JavaThread::get()->getJVM();
+  UserClass* cl = getClassFromStaticMethod(vm, meth, clazz); 
+  jint res = (jint) meth->invokeIntStaticBuf(vm, cl, (void*)args);
+
+  RETURN_FROM_JNI(res);
+
+  END_JNI_EXCEPTION
+  RETURN_FROM_JNI(0);
 }
 
 
@@ -1986,11 +2200,23 @@
 }
 
 
-jlong CallStaticLongMethodA(JNIEnv *env, jclass clazz, jmethodID methodID,
+jlong CallStaticLongMethodA(JNIEnv *env, jclass _clazz, jmethodID methodID,
                             const jvalue *args) {
-  fprintf(stderr, "Implement me\n");
-  abort();
-  return 0;
+  BEGIN_JNI_EXCEPTION
+
+  // Local object references.
+  JavaObject* clazz = *(JavaObject**)_clazz;
+  llvm_gcroot(clazz, 0);
+  
+  JavaMethod* meth = (JavaMethod*)methodID;
+  Jnjvm* vm = JavaThread::get()->getJVM();
+  UserClass* cl = getClassFromStaticMethod(vm, meth, clazz); 
+  jlong res = (jlong) meth->invokeLongStaticBuf(vm, cl, (void*)args);
+
+  RETURN_FROM_JNI(res);
+
+  END_JNI_EXCEPTION
+  RETURN_FROM_JNI(0);
 }
 
 
@@ -2040,11 +2266,23 @@
 }
 
 
-jfloat CallStaticFloatMethodA(JNIEnv *env, jclass clazz, jmethodID methodID,
+jfloat CallStaticFloatMethodA(JNIEnv *env, jclass _clazz, jmethodID methodID,
                               const jvalue *args) {
-  fprintf(stderr, "Implement me\n");
-  abort();
-  return 0;
+  BEGIN_JNI_EXCEPTION
+
+  // Local object references.
+  JavaObject* clazz = *(JavaObject**)_clazz;
+  llvm_gcroot(clazz, 0);
+  
+  JavaMethod* meth = (JavaMethod*)methodID;
+  Jnjvm* vm = JavaThread::get()->getJVM();
+  UserClass* cl = getClassFromStaticMethod(vm, meth, clazz); 
+  jfloat res = (jfloat) meth->invokeFloatStaticBuf(vm, cl, (void*)args);
+
+  RETURN_FROM_JNI(res);
+
+  END_JNI_EXCEPTION
+  RETURN_FROM_JNI(0);
 }
 
 
@@ -2092,11 +2330,23 @@
 }
 
 
-jdouble CallStaticDoubleMethodA(JNIEnv *env, jclass clazz, jmethodID methodID,
+jdouble CallStaticDoubleMethodA(JNIEnv *env, jclass _clazz, jmethodID methodID,
                                 const jvalue *args) {
-  fprintf(stderr, "Implement me\n");
-  abort();
-  return 0;
+  BEGIN_JNI_EXCEPTION
+
+  // Local object references.
+  JavaObject* clazz = *(JavaObject**)_clazz;
+  llvm_gcroot(clazz, 0);
+  
+  JavaMethod* meth = (JavaMethod*)methodID;
+  Jnjvm* vm = JavaThread::get()->getJVM();
+  UserClass* cl = getClassFromStaticMethod(vm, meth, clazz); 
+  jdouble res = (jdouble) meth->invokeDoubleStaticBuf(vm, cl, (void*)args);
+
+  RETURN_FROM_JNI(res);
+
+  END_JNI_EXCEPTION
+  RETURN_FROM_JNI(0);
 }
 
 
@@ -2147,10 +2397,24 @@
 }
 
 
-void CallStaticVoidMethodA(JNIEnv *env, jclass clazz, jmethodID methodID,
+void CallStaticVoidMethodA(JNIEnv *env, jclass _clazz, jmethodID methodID,
                            const jvalue * args) {
-  fprintf(stderr, "Implement me\n");
-  abort();
+  BEGIN_JNI_EXCEPTION
+
+  // Local object references.
+  JavaObject* clazz = *(JavaObject**)_clazz;
+  llvm_gcroot(clazz, 0);
+  
+  JavaMethod* meth = (JavaMethod*)methodID;
+  Jnjvm* vm = JavaThread::get()->getJVM();
+  UserClass* cl = getClassFromStaticMethod(vm, meth, clazz); 
+  meth->invokeIntStaticBuf(vm, cl, (void*)args);
+
+  RETURN_VOID_FROM_JNI;
+
+  END_JNI_EXCEPTION
+  
+  RETURN_VOID_FROM_JNI;
 }
 
 
@@ -2461,10 +2725,17 @@
 }
 
 
-jsize GetStringLength(JNIEnv *env, jstring str) {
-  fprintf(stderr, "Implement me\n");
-  abort();
-  return 0;
+jsize GetStringLength(JNIEnv *env, jstring _str) {
+  BEGIN_JNI_EXCEPTION
+  
+  // Local object references.
+  JavaString* str = *(JavaString**)_str;
+  llvm_gcroot(str, 0);
+
+  RETURN_FROM_JNI(str->count);
+
+  END_JNI_EXCEPTION
+  RETURN_FROM_JNI(0);
 }
 
 

Modified: vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp?rev=139475&r1=139474&r2=139475&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp Sat Sep 10 17:27:00 2011
@@ -1193,6 +1193,7 @@
       method->invokeIntStatic(this, method->classDef, &args);
     } else {
       fprintf(stderr, "Main method not public.\n");
+      mvm::System::Exit(1);
     }
   } CATCH {
   } END_CATCH;
@@ -1210,6 +1211,8 @@
       fprintf(stderr, "Exception in thread \"main\": "
                       "Can not print stack trace.\n");
     } END_CATCH;
+    // Program failed. Exit with return code not 0.
+    mvm::System::Exit(1);
   }
 }
 

Modified: vmkit/trunk/tools/j3/Main.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/j3/Main.cpp?rev=139475&r1=139474&r2=139475&view=diff
==============================================================================
--- vmkit/trunk/tools/j3/Main.cpp (original)
+++ vmkit/trunk/tools/j3/Main.cpp Sat Sep 10 17:27:00 2011
@@ -47,7 +47,7 @@
   // Run the application. 
   vm->runApplication(argc, argv);
   vm->waitForExit();
-  exit(0);
+  System::Exit(0);
 
   // Destroy everyone.
   // vm->~Jnjvm();





More information about the vmkit-commits mailing list