[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