[vmkit-commits] [vmkit] r197881 - add few jni functions

Gael Thomas gael.thomas at lip6.fr
Sun Dec 22 08:48:30 PST 2013


Author: gthomas
Date: Sun Dec 22 10:48:30 2013
New Revision: 197881

URL: http://llvm.org/viewvc/llvm-project?rev=197881&view=rev
Log:
add few jni functions

Modified:
    vmkit/branches/mcjit/include/j3/j3object.h
    vmkit/branches/mcjit/include/j3/j3thread.h
    vmkit/branches/mcjit/lib/j3/vm/j3jni.cc
    vmkit/branches/mcjit/lib/j3/vm/j3thread.cc

Modified: vmkit/branches/mcjit/include/j3/j3object.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3object.h?rev=197881&r1=197880&r2=197881&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3object.h (original)
+++ vmkit/branches/mcjit/include/j3/j3object.h Sun Dec 22 10:48:30 2013
@@ -161,9 +161,9 @@ namespace j3 {
 	class J3FixedPoint {
 		static const uint32_t defaultNodeCapacity = 256;
 
-		pthread_mutex_t            mutex;
+		pthread_mutex_t       mutex;
 		vmkit::BumpAllocator* allocator;
-		J3FixedPointNode*          head;
+		J3FixedPointNode*     head;
 
 		void createNode(uint32_t capacity=defaultNodeCapacity);
 	public:

Modified: vmkit/branches/mcjit/include/j3/j3thread.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3thread.h?rev=197881&r1=197880&r2=197881&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3thread.h (original)
+++ vmkit/branches/mcjit/include/j3/j3thread.h Sun Dec 22 10:48:30 2013
@@ -26,7 +26,8 @@ namespace j3 {
 		J3Method*         getJavaCaller(uint32_t level=0);
 
 		void              ensureCapacity(uint32_t capacity);
-		J3ObjectHandle*   pendingException() { return _pendingException; }
+		J3ObjectHandle*   pendingException();
+		bool              hasPendingException() { return _pendingException; }
 		void              setPendingException(J3ObjectHandle* handle) { _pendingException = handle; }
 		J3FixedPoint*     fixedPoint() { return &_fixedPoint; }
 

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=197881&r1=197880&r2=197881&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3jni.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3jni.cc Sun Dec 22 10:48:30 2013
@@ -28,8 +28,6 @@ jclass JNICALL FindClass(JNIEnv* env, co
 	res = cl->javaClass();
 	leaveJVM(); 
 
-	fprintf(stderr, "find class --> %p %p\n", res, J3ObjectType::nativeClass(res));
-
 	return res;
 }
 
@@ -121,12 +119,49 @@ jmethodID JNICALL GetMethodID(JNIEnv* en
 		leaveJVM();																													\
 																																				\
 		return res.val##j3type;																							\
+	}																																			\
+																																				\
+	jtype JNICALL Call##id##MethodA(JNIEnv* env, jobject obj, jmethodID methodID, const jvalue* args) { \
+		jvalue res;																													\
+																																				\
+		enterJVM();																													\
+		res = methodID->invokeVirtual(obj, args);														\
+		leaveJVM();																													\
+																																				\
+		return res.val##j3type;																							\
+	}																																			\
+																																				\
+	jtype JNICALL CallStatic##id##Method(JNIEnv* env, jclass clazz, jmethodID methodID, ...) { \
+		va_list va;																													\
+		va_start(va, methodID);																							\
+		jobject res = env->CallStatic##id##MethodV(clazz, methodID, va);		\
+		va_end(va);																													\
+		return res;																													\
+	}																																			\
+																																				\
+	jtype JNICALL CallStatic##id##MethodV(JNIEnv* env, jclass clazz, jmethodID methodID, va_list args) { \
+		jvalue res;																													\
+																																				\
+		enterJVM();																													\
+		res = methodID->invokeStatic(args);																	\
+		leaveJVM();																													\
+																																				\
+		return res.val##j3type;																							\
+	}																																			\
+																																				\
+	jtype JNICALL CallStatic##id##MethodA(JNIEnv* env, jclass clazz, jmethodID methodID, const jvalue* args) { \
+		jvalue res;																													\
+																																				\
+		enterJVM();																													\
+		res = methodID->invokeStatic(args);																	\
+		leaveJVM();																													\
+																																				\
+		return res.val##j3type;																							\
 	}
 
 	doInvoke(jobject, Object, Object);
 
 
-jobject JNICALL CallObjectMethodA(JNIEnv* env, jobject obj, jmethodID methodID, const jvalue* args) { enterJVM(); leaveJVM(); NYI(); }
 
 jboolean JNICALL CallBooleanMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) { enterJVM(); leaveJVM(); NYI(); }
 jboolean JNICALL CallBooleanMethodV(JNIEnv* env, jobject obj, jmethodID methodID, va_list args) { enterJVM(); leaveJVM(); NYI(); }
@@ -242,10 +277,6 @@ jmethodID JNICALL GetStaticMethodID(JNIE
 	return res;
 }
 
-jobject JNICALL CallStaticObjectMethod(JNIEnv* env, jclass clazz, jmethodID methodID, ...) { enterJVM(); leaveJVM(); NYI(); }
-jobject JNICALL CallStaticObjectMethodV(JNIEnv* env, jclass clazz, jmethodID methodID, va_list args) { enterJVM(); leaveJVM(); NYI(); }
-jobject JNICALL CallStaticObjectMethodA(JNIEnv* env, jclass clazz, jmethodID methodID, const jvalue* args) { enterJVM(); leaveJVM(); NYI(); }
-
 jboolean JNICALL CallStaticBooleanMethod(JNIEnv* env, jclass clazz, jmethodID methodID, ...) { enterJVM(); leaveJVM(); NYI(); }
 jboolean JNICALL CallStaticBooleanMethodV(JNIEnv* env, jclass clazz, jmethodID methodID, va_list args) { enterJVM(); leaveJVM(); NYI(); }
 jboolean JNICALL CallStaticBooleanMethodA(JNIEnv* env, jclass clazz, jmethodID methodID, const jvalue* args) { enterJVM(); leaveJVM(); NYI(); }
@@ -431,7 +462,9 @@ void JNICALL ReleaseStringCritical(JNIEn
 jweak JNICALL NewWeakGlobalRef(JNIEnv* env, jobject obj) { enterJVM(); leaveJVM(); NYI(); }
 void JNICALL DeleteWeakGlobalRef(JNIEnv* env, jweak ref) { enterJVM(); leaveJVM(); NYI(); }
 
-jboolean JNICALL ExceptionCheck(JNIEnv* env) { enterJVM(); leaveJVM(); NYI(); }
+jboolean JNICALL ExceptionCheck(JNIEnv* env) { 
+	return J3Thread::get()->hasPendingException();
+}
 
 jobject JNICALL NewDirectByteBuffer(JNIEnv* env, void* address, jlong capacity) { enterJVM(); leaveJVM(); NYI(); }
 void* JNICALL GetDirectBufferAddress(JNIEnv* env, jobject buf) { enterJVM(); leaveJVM(); NYI(); }

Modified: vmkit/branches/mcjit/lib/j3/vm/j3thread.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3thread.cc?rev=197881&r1=197880&r2=197881&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3thread.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3thread.cc Sun Dec 22 10:48:30 2013
@@ -32,6 +32,13 @@ J3Method* J3Thread::getJavaCaller(uint32
 	return 0;
 }
 
+J3ObjectHandle* J3Thread::pendingException() {
+	if(_pendingException) {
+		return push(_pendingException);
+	} else
+		return 0;
+}
+
 void J3Thread::ensureCapacity(uint32_t capacity) {
 	_fixedPoint.unsyncEnsureCapacity(capacity);
 }





More information about the vmkit-commits mailing list