[vmkit-commits] [vmkit] r82036 - /vmkit/trunk/lib/JnJVM/Classpath/JavaUpcalls.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Wed Sep 16 02:43:18 PDT 2009


Author: geoffray
Date: Wed Sep 16 04:43:18 2009
New Revision: 82036

URL: http://llvm.org/viewvc/llvm-project?rev=82036&view=rev
Log:
Embrace native Java functions with BEGIN_NATIVE_EXCEPTION.


Modified:
    vmkit/trunk/lib/JnJVM/Classpath/JavaUpcalls.cpp

Modified: vmkit/trunk/lib/JnJVM/Classpath/JavaUpcalls.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/JavaUpcalls.cpp?rev=82036&r1=82035&r2=82036&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/JavaUpcalls.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/JavaUpcalls.cpp Wed Sep 16 04:43:18 2009
@@ -293,9 +293,13 @@
   llvm_gcroot(reference, 0);
   llvm_gcroot(referent, 0);
 
+  BEGIN_NATIVE_EXCEPTION(0)
+  
   reference->init(referent, 0);
   JavaThread::get()->getJVM()->addWeakReference(reference);
 
+  END_NATIVE_EXCEPTION
+
 }
 
 extern "C" void nativeInitWeakReferenceQ(JavaObjectReference* reference,
@@ -305,8 +309,12 @@
   llvm_gcroot(referent, 0);
   llvm_gcroot(queue, 0);
   
+  BEGIN_NATIVE_EXCEPTION(0)
+  
   reference->init(referent, queue);
   JavaThread::get()->getJVM()->addWeakReference(reference);
+  
+  END_NATIVE_EXCEPTION
 
 }
 
@@ -315,8 +323,12 @@
   llvm_gcroot(reference, 0);
   llvm_gcroot(referent, 0);
   
+  BEGIN_NATIVE_EXCEPTION(0)
+  
   reference->init(referent, 0);
   JavaThread::get()->getJVM()->addSoftReference(reference);
+  
+  END_NATIVE_EXCEPTION
 
 }
 
@@ -326,9 +338,13 @@
   llvm_gcroot(reference, 0);
   llvm_gcroot(referent, 0);
   llvm_gcroot(queue, 0);
-  
+ 
+  BEGIN_NATIVE_EXCEPTION(0)
+
   reference->init(referent, queue);
   JavaThread::get()->getJVM()->addSoftReference(reference);
+  
+  END_NATIVE_EXCEPTION
 
 }
 
@@ -339,25 +355,42 @@
   llvm_gcroot(referent, 0);
   llvm_gcroot(queue, 0);
   
+  BEGIN_NATIVE_EXCEPTION(0)
+  
   reference->init(referent, queue);
   JavaThread::get()->getJVM()->addPhantomReference(reference);
 
+  END_NATIVE_EXCEPTION
 }
 
 extern "C" JavaString* nativeInternString(JavaString* obj) {
   const ArrayUInt16* array = 0;
+  JavaString* res = 0;
   llvm_gcroot(obj, 0);
   llvm_gcroot(array, 0);
+  llvm_gcroot(res, 0);
+  
+  BEGIN_NATIVE_EXCEPTION(0)
   
   Jnjvm* vm = JavaThread::get()->getJVM();
   array = obj->strToArray(vm);
-  return vm->constructString(array);
+  res = vm->constructString(array);
+  
+  END_NATIVE_EXCEPTION
+
+  return res;
 }
 
 extern "C" uint8 nativeIsArray(JavaObjectClass* klass) {
   llvm_gcroot(klass, 0);
+  UserCommonClass* cl = 0;
 
-  UserCommonClass* cl = klass->getClass();  
+  BEGIN_NATIVE_EXCEPTION(0)
+
+  cl = klass->getClass();  
+  
+  END_NATIVE_EXCEPTION
+  
   return (uint8)cl->isArray();
 }
 
@@ -371,6 +404,7 @@
   JavaThread* th = JavaThread::get();
   UserClass* cl = th->getCallingClass(1);
   if (cl) res = cl->getClassDelegatee(th->getJVM());
+  
   END_NATIVE_EXCEPTION
 
   return res;
@@ -382,9 +416,11 @@
   llvm_gcroot(res, 0);
   
   BEGIN_NATIVE_EXCEPTION(0)
+  
   JavaThread* th = JavaThread::get();
   UserClass* cl = th->getCallingClass(1);
   res = cl->classLoader->getJavaClassLoader();  
+  
   END_NATIVE_EXCEPTION
 
   return res;
@@ -395,8 +431,10 @@
   llvm_gcroot(res, 0);
   
   BEGIN_NATIVE_EXCEPTION(0)
+  
   JavaThread* th = JavaThread::get();
   res = th->getNonNullClassLoader();
+  
   END_NATIVE_EXCEPTION
 
   return res;
@@ -408,10 +446,12 @@
   llvm_gcroot(res, 0);
   
   BEGIN_NATIVE_EXCEPTION(0)
+  
   JavaThread* th = JavaThread::get();
   Jnjvm* vm = th->getJVM();
   UserClass* cl = th->getCallingClassLevel(index);
   if (cl) res = cl->getClassDelegatee(vm);
+  
   END_NATIVE_EXCEPTION
 
   return res;
@@ -423,9 +463,18 @@
 }
 
 extern "C" JavaObject* nativeGetDeclaredAnnotations() {
+  JavaObject* res = 0;
+  llvm_gcroot(res, 0);
+  
+  BEGIN_NATIVE_EXCEPTION(0)
+  
   Jnjvm* vm = JavaThread::get()->getJVM();
   UserClassArray* array = vm->upcalls->constructorArrayAnnotation;
-  return array->doNew(0, vm);
+  res = array->doNew(0, vm);
+
+  END_NATIVE_EXCEPTION
+
+  return res;
 }
 
 extern "C" void nativePropertiesPostInit(JavaObject* prop);
@@ -459,16 +508,23 @@
 extern "C" ArrayObject* nativeGetBootPackages();
 
 extern "C" JavaString* nativeGetenv(JavaString* str) {
+  JavaString* ret = 0;
   llvm_gcroot(str, 0);
+  llvm_gcroot(ret, 0);
+  
+  BEGIN_NATIVE_EXCEPTION(0)
 
   char* buf = str->strToAsciiz();
   char* res = getenv(buf);
   delete[] buf;
   if (res) {
     Jnjvm* vm = JavaThread::get()->getJVM();
-    return vm->asciizToStr(res);
+    ret = vm->asciizToStr(res);
   }
-  return 0;
+  
+  END_NATIVE_EXCEPTION
+
+  return ret;
 }
 
 void Classpath::initialiseClasspath(JnjvmClassLoader* loader) {





More information about the vmkit-commits mailing list