[vmkit-commits] [vmkit] r60950 - /vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Fri Dec 12 02:07:19 PST 2008
Author: geoffray
Date: Fri Dec 12 04:06:59 2008
New Revision: 60950
URL: http://llvm.org/viewvc/llvm-project?rev=60950&view=rev
Log:
Implement some missing JNI functions.
Modified:
vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp
Modified: vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp?rev=60950&r1=60949&r2=60950&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp Fri Dec 12 04:06:59 2008
@@ -209,8 +209,7 @@
jboolean IsSameObject(JNIEnv *env, jobject ref1, jobject ref2) {
- assert(0 && "implement me");
- return 0;
+ return ref1 == ref2;
}
@@ -358,9 +357,19 @@
}
-jobject CallObjectMethodV(JNIEnv *env, jobject obj, jmethodID methodID,
+jobject CallObjectMethodV(JNIEnv *env, jobject _obj, jmethodID methodID,
va_list args) {
- assert(0 && "implement me");
+
+ BEGIN_EXCEPTION
+
+ JavaObject* obj = (JavaObject*)_obj;
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromVirtualMethod(vm, meth, obj->classOf);
+ return (jobject)meth->invokeJavaObjectVirtualAP(vm, cl, obj, args);
+
+ END_EXCEPTION
+
return 0;
}
@@ -391,9 +400,19 @@
}
-jboolean CallBooleanMethodV(JNIEnv *env, jobject obj, jmethodID methodID,
+jboolean CallBooleanMethodV(JNIEnv *env, jobject _obj, jmethodID methodID,
va_list args) {
- assert(0 && "implement me");
+
+ BEGIN_EXCEPTION
+
+ JavaObject* obj = (JavaObject*)_obj;
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromVirtualMethod(vm, meth, obj->classOf);
+ return (jboolean)meth->invokeIntVirtualAP(vm, cl, obj, args);
+
+ END_EXCEPTION
+
return 0;
}
@@ -410,9 +429,19 @@
return 0;
}
-jbyte CallByteMethodV(JNIEnv *env, jobject obj, jmethodID methodID,
+jbyte CallByteMethodV(JNIEnv *env, jobject _obj, jmethodID methodID,
va_list args) {
- assert(0 && "implement me");
+
+ BEGIN_EXCEPTION
+
+ JavaObject* obj = (JavaObject*)_obj;
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromVirtualMethod(vm, meth, obj->classOf);
+ return (jbyte)meth->invokeIntVirtualAP(vm, cl, obj, args);
+
+ END_EXCEPTION
+
return 0;
}
@@ -430,9 +459,19 @@
}
-jchar CallCharMethodV(JNIEnv *env, jobject obj, jmethodID methodID,
+jchar CallCharMethodV(JNIEnv *env, jobject _obj, jmethodID methodID,
va_list args) {
- assert(0 && "implement me");
+
+ BEGIN_EXCEPTION
+
+ JavaObject* obj = (JavaObject*)_obj;
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromVirtualMethod(vm, meth, obj->classOf);
+ return (jchar)meth->invokeIntVirtualAP(vm, cl, obj, args);
+
+ END_EXCEPTION
+
return 0;
}
@@ -450,9 +489,19 @@
}
-jshort CallShortMethodV(JNIEnv *env, jobject obj, jmethodID methodID,
+jshort CallShortMethodV(JNIEnv *env, jobject _obj, jmethodID methodID,
va_list args) {
- assert(0 && "implement me");
+
+ BEGIN_EXCEPTION
+
+ JavaObject* obj = (JavaObject*)_obj;
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromVirtualMethod(vm, meth, obj->classOf);
+ return (jshort)meth->invokeIntVirtualAP(vm, cl, obj, args);
+
+ END_EXCEPTION
+
return 0;
}
@@ -484,9 +533,19 @@
}
-jint CallIntMethodV(JNIEnv *env, jobject obj, jmethodID methodID,
+jint CallIntMethodV(JNIEnv *env, jobject _obj, jmethodID methodID,
va_list args) {
- assert(0 && "implement me");
+
+ BEGIN_EXCEPTION
+
+ JavaObject* obj = (JavaObject*)_obj;
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromVirtualMethod(vm, meth, obj->classOf);
+ return (jint)meth->invokeIntVirtualAP(vm, cl, obj, args);
+
+ END_EXCEPTION
+
return 0;
}
@@ -505,9 +564,19 @@
}
-jlong CallLongMethodV(JNIEnv *env, jobject obj, jmethodID methodID,
+jlong CallLongMethodV(JNIEnv *env, jobject _obj, jmethodID methodID,
va_list args) {
- assert(0 && "implement me");
+
+ BEGIN_EXCEPTION
+
+ JavaObject* obj = (JavaObject*)_obj;
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromVirtualMethod(vm, meth, obj->classOf);
+ return (jlong)meth->invokeLongVirtualAP(vm, cl, obj, args);
+
+ END_EXCEPTION
+
return 0;
}
@@ -541,8 +610,18 @@
jfloat CallFloatMethodV(JNIEnv *env, jobject _obj, jmethodID methodID,
va_list args) {
- assert(0 && "implement me");
- return 0;
+
+ BEGIN_EXCEPTION
+
+ JavaObject* obj = (JavaObject*)_obj;
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromVirtualMethod(vm, meth, obj->classOf);
+ return (jfloat)meth->invokeFloatVirtualAP(vm, cl, obj, args);
+
+ END_EXCEPTION
+
+ return 0.0f;
}
@@ -582,7 +661,7 @@
JavaMethod* meth = (JavaMethod*)methodID;
Jnjvm* vm = JavaThread::get()->getJVM();
UserClass* cl = getClassFromVirtualMethod(vm, meth, obj->classOf);
- return meth->invokeDoubleVirtualAP(vm, cl, obj, args);
+ return (jdouble)meth->invokeDoubleVirtualAP(vm, cl, obj, args);
END_EXCEPTION
return 0.0;
@@ -869,12 +948,11 @@
BEGIN_EXCEPTION
- // TODO: find a better place to store the UTF8
Jnjvm* vm = JavaThread::get()->getJVM();
UserCommonClass* cl = NativeUtil::resolvedImplClass(vm, clazz, true);
return (jfieldID) (cl->asClass() ?
- cl->asClass()->lookupField(cl->classLoader->asciizConstructUTF8(name),
- cl->classLoader->asciizConstructUTF8(sig), 0, 1,
+ cl->asClass()->lookupField(vm->asciizToUTF8(name),
+ vm->asciizToUTF8(sig), 0, 1,
0) : 0);
END_EXCEPTION
@@ -1128,15 +1206,35 @@
}
-jobject CallStaticObjectMethod(JNIEnv *env, jclass clazz, jmethodID methodID, ...) {
- assert(0 && "implement me");
+jobject CallStaticObjectMethod(JNIEnv *env, jclass clazz, jmethodID methodID,
+ ...) {
+
+ BEGIN_EXCEPTION
+
+ va_list ap;
+ va_start(ap, methodID);
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromStaticMethod(vm, meth, clazz);
+ jobject res = (jobject) meth->invokeJavaObjectStaticAP(vm, cl, ap);
+ va_end(ap);
+ return res;
+
+ END_EXCEPTION
return 0;
}
jobject CallStaticObjectMethodV(JNIEnv *env, jclass clazz, jmethodID methodID,
va_list args) {
- assert(0 && "implement me");
+ BEGIN_EXCEPTION
+
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromStaticMethod(vm, meth, clazz);
+ return (jobject)meth->invokeJavaObjectStaticAP(vm, cl, args);
+
+ END_EXCEPTION
return 0;
}
@@ -1169,7 +1267,15 @@
jboolean CallStaticBooleanMethodV(JNIEnv *env, jclass clazz, jmethodID methodID,
va_list args) {
- assert(0 && "implement me");
+
+ BEGIN_EXCEPTION
+
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromStaticMethod(vm, meth, clazz);
+ return (jboolean)meth->invokeIntStaticAP(vm, cl, args);
+
+ END_EXCEPTION
return 0;
}
@@ -1182,14 +1288,34 @@
jbyte CallStaticByteMethod(JNIEnv *env, jclass clazz, jmethodID methodID, ...) {
- assert(0 && "implement me");
+
+ BEGIN_EXCEPTION
+
+ va_list ap;
+ va_start(ap, methodID);
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromStaticMethod(vm, meth, clazz);
+ jbyte res = (jbyte) meth->invokeIntStaticAP(vm, cl, ap);
+ va_end(ap);
+ return res;
+
+ END_EXCEPTION
return 0;
}
jbyte CallStaticByteMethodV(JNIEnv *env, jclass clazz, jmethodID methodID,
va_list args) {
- assert(0 && "implement me");
+
+ BEGIN_EXCEPTION
+
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromStaticMethod(vm, meth, clazz);
+ return (jbyte)meth->invokeIntStaticAP(vm, cl, args);
+
+ END_EXCEPTION
return 0;
}
@@ -1202,14 +1328,33 @@
jchar CallStaticCharMethod(JNIEnv *env, jclass clazz, jmethodID methodID, ...) {
- assert(0 && "implement me");
+
+ BEGIN_EXCEPTION
+
+ va_list ap;
+ va_start(ap, methodID);
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromStaticMethod(vm, meth, clazz);
+ jchar res = (jchar) meth->invokeIntStaticAP(vm, cl, ap);
+ va_end(ap);
+ return res;
+
+ END_EXCEPTION
return 0;
}
jchar CallStaticCharMethodV(JNIEnv *env, jclass clazz, jmethodID methodID,
va_list args) {
- assert(0 && "implement me");
+ BEGIN_EXCEPTION
+
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromStaticMethod(vm, meth, clazz);
+ return (jchar)meth->invokeIntStaticAP(vm, cl, args);
+
+ END_EXCEPTION
return 0;
}
@@ -1223,14 +1368,34 @@
jshort CallStaticShortMethod(JNIEnv *env, jclass clazz, jmethodID methodID,
...) {
- assert(0 && "implement me");
+
+ BEGIN_EXCEPTION
+
+ va_list ap;
+ va_start(ap, methodID);
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromStaticMethod(vm, meth, clazz);
+ jshort res = (jshort) meth->invokeIntStaticAP(vm, cl, ap);
+ va_end(ap);
+ return res;
+
+ END_EXCEPTION
return 0;
}
jshort CallStaticShortMethodV(JNIEnv *env, jclass clazz, jmethodID methodID,
va_list args) {
- assert(0 && "implement me");
+
+ BEGIN_EXCEPTION
+
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromStaticMethod(vm, meth, clazz);
+ return (jshort)meth->invokeIntStaticAP(vm, cl, args);
+
+ END_EXCEPTION
return 0;
}
@@ -1243,14 +1408,34 @@
jint CallStaticIntMethod(JNIEnv *env, jclass clazz, jmethodID methodID, ...) {
- assert(0 && "implement me");
+
+ BEGIN_EXCEPTION
+
+ va_list ap;
+ va_start(ap, methodID);
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromStaticMethod(vm, meth, clazz);
+ jint res = (jint) meth->invokeIntStaticAP(vm, cl, ap);
+ va_end(ap);
+ return res;
+
+ END_EXCEPTION
return 0;
}
jint CallStaticIntMethodV(JNIEnv *env, jclass clazz, jmethodID methodID,
va_list args) {
- assert(0 && "implement me");
+ BEGIN_EXCEPTION
+
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromStaticMethod(vm, meth, clazz);
+ return (jint)meth->invokeIntStaticAP(vm, cl, args);
+
+ END_EXCEPTION
+
return 0;
}
@@ -1263,14 +1448,35 @@
jlong CallStaticLongMethod(JNIEnv *env, jclass clazz, jmethodID methodID, ...) {
- assert(0 && "implement me");
+
+ BEGIN_EXCEPTION
+
+ va_list ap;
+ va_start(ap, methodID);
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromStaticMethod(vm, meth, clazz);
+ jlong res = (jlong) meth->invokeLongStaticAP(vm, cl, ap);
+ va_end(ap);
+ return res;
+
+ END_EXCEPTION
return 0;
}
jlong CallStaticLongMethodV(JNIEnv *env, jclass clazz, jmethodID methodID,
va_list args) {
- assert(0 && "implement me");
+
+ BEGIN_EXCEPTION
+
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromStaticMethod(vm, meth, clazz);
+ return (jlong)meth->invokeLongStaticAP(vm, cl, args);
+
+ END_EXCEPTION
+
return 0;
}
@@ -1285,15 +1491,36 @@
jfloat CallStaticFloatMethod(JNIEnv *env, jclass clazz, jmethodID methodID,
...) {
- assert(0 && "implement me");
- return 0;
+
+ BEGIN_EXCEPTION
+
+ va_list ap;
+ va_start(ap, methodID);
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromStaticMethod(vm, meth, clazz);
+ jfloat res = (jfloat) meth->invokeFloatStaticAP(vm, cl, ap);
+ va_end(ap);
+ return res;
+
+ END_EXCEPTION
+ return 0.0f;
}
jfloat CallStaticFloatMethodV(JNIEnv *env, jclass clazz, jmethodID methodID,
va_list args) {
- assert(0 && "implement me");
- return 0;
+
+ BEGIN_EXCEPTION
+
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromStaticMethod(vm, meth, clazz);
+ return (jfloat)meth->invokeFloatStaticAP(vm, cl, args);
+
+ END_EXCEPTION
+
+ return 0.0f;
}
@@ -1306,15 +1533,35 @@
jdouble CallStaticDoubleMethod(JNIEnv *env, jclass clazz, jmethodID methodID,
...) {
- assert(0 && "implement me");
- return 0;
+
+ BEGIN_EXCEPTION
+
+ va_list ap;
+ va_start(ap, methodID);
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromStaticMethod(vm, meth, clazz);
+ jdouble res = (jdouble) meth->invokeDoubleStaticAP(vm, cl, ap);
+ va_end(ap);
+ return res;
+
+ END_EXCEPTION
+ return 0.0;
}
jdouble CallStaticDoubleMethodV(JNIEnv *env, jclass clazz, jmethodID methodID,
va_list args) {
- assert(0 && "implement me");
- return 0;
+ BEGIN_EXCEPTION
+
+ JavaMethod* meth = (JavaMethod*)methodID;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserClass* cl = getClassFromStaticMethod(vm, meth, clazz);
+ return (jdouble)meth->invokeDoubleStaticAP(vm, cl, args);
+
+ END_EXCEPTION
+
+ return 0.0;
}
@@ -1366,12 +1613,11 @@
BEGIN_EXCEPTION
- // TODO: find a better place to store the UTF8
Jnjvm* vm = JavaThread::get()->getJVM();
UserCommonClass* cl = NativeUtil::resolvedImplClass(vm, clazz, true);
return (jfieldID) (cl->asClass() ?
- cl->asClass()->lookupField(cl->classLoader->asciizConstructUTF8(name),
- cl->classLoader->asciizConstructUTF8(sig),
+ cl->asClass()->lookupField(vm->asciizToUTF8(name),
+ vm->asciizToUTF8(sig),
true, true, 0) : 0);
END_EXCEPTION
@@ -2007,97 +2253,113 @@
void GetBooleanArrayRegion(JNIEnv *env, jbooleanArray array, jsize start,
jsize len, jboolean *buf) {
- assert(0 && "implement me");
+ ArrayUInt8* Array = (ArrayUInt8*)array;
+ memcpy(buf, &(Array->elements[start]), len * sizeof(uint8));
}
void GetByteArrayRegion(JNIEnv *env, jbyteArray array, jsize start, jsize len,
jbyte *buf) {
- assert(0 && "implement me");
+ ArraySInt8* Array = (ArraySInt8*)array;
+ memcpy(buf, &(Array->elements[start]), len * sizeof(sint8));
}
void GetCharArrayRegion(JNIEnv *env, jcharArray array, jsize start, jsize len,
jchar *buf) {
- assert(0 && "implement me");
+ ArrayUInt16* Array = (ArrayUInt16*)array;
+ memcpy(buf, &(Array->elements[start]), len * sizeof(uint16));
}
void GetShortArrayRegion(JNIEnv *env, jshortArray array, jsize start,
jsize len, jshort *buf) {
- assert(0 && "implement me");
+ ArraySInt16* Array = (ArraySInt16*)array;
+ memcpy(buf, &(Array->elements[start]), len * sizeof(sint16));
}
void GetIntArrayRegion(JNIEnv *env, jintArray array, jsize start, jsize len,
jint *buf) {
- assert(0 && "implement me");
+ ArraySInt32* Array = (ArraySInt32*)array;
+ memcpy(buf, &(Array->elements[start]), len * sizeof(sint32));
}
void GetLongArrayRegion(JNIEnv *env, jlongArray array, jsize start, jsize len,
jlong *buf) {
- assert(0 && "implement me");
+ ArrayLong* Array = (ArrayLong*)array;
+ memcpy(buf, &(Array->elements[start]), len * sizeof(sint64));
}
void GetFloatArrayRegion(JNIEnv *env, jfloatArray array, jsize start,
jsize len, jfloat *buf) {
- assert(0 && "implement me");
+ ArrayFloat* Array = (ArrayFloat*)array;
+ memcpy(buf, &(Array->elements[start]), len * sizeof(float));
}
void GetDoubleArrayRegion(JNIEnv *env, jdoubleArray array, jsize start,
jsize len, jdouble *buf) {
- assert(0 && "implement me");
+ ArrayDouble* Array = (ArrayDouble*)array;
+ memcpy(buf, &(Array->elements[start]), len * sizeof(double));
}
void SetBooleanArrayRegion(JNIEnv *env, jbooleanArray array, jsize start,
jsize len, const jboolean *buf) {
- assert(0 && "implement me");
+ ArrayUInt8* Array = (ArrayUInt8*)array;
+ memcpy(&(Array->elements[start]), buf, len * sizeof(uint8));
}
void SetByteArrayRegion(JNIEnv *env, jbyteArray array, jsize start, jsize len,
const jbyte *buf) {
- assert(0 && "implement me");
+ ArraySInt8* Array = (ArraySInt8*)array;
+ memcpy(&(Array->elements[start]), buf, len * sizeof(sint8));
}
void SetCharArrayRegion(JNIEnv *env, jcharArray array, jsize start, jsize len,
const jchar *buf) {
- assert(0 && "implement me");
+ ArrayUInt16* Array = (ArrayUInt16*)array;
+ memcpy(&(Array->elements[start]), buf, len * sizeof(uint16));
}
void SetShortArrayRegion(JNIEnv *env, jshortArray array, jsize start,
jsize len, const jshort *buf) {
- assert(0 && "implement me");
+ ArraySInt16* Array = (ArraySInt16*)array;
+ memcpy(&(Array->elements[start]), buf, len * sizeof(sint16));
}
void SetIntArrayRegion(JNIEnv *env, jintArray array, jsize start, jsize len,
const jint *buf) {
- assert(0 && "implement me");
+ ArraySInt32* Array = (ArraySInt32*)array;
+ memcpy(&(Array->elements[start]), buf, len * sizeof(sint32));
}
void SetLongArrayRegion(JNIEnv* env, jlongArray array, jsize start, jsize len,
const jlong *buf) {
- assert(0 && "implement me");
+ ArrayLong* Array = (ArrayLong*)array;
+ memcpy(&(Array->elements[start]), buf, len * sizeof(sint64));
}
void SetFloatArrayRegion(JNIEnv *env, jfloatArray array, jsize start,
jsize len, const jfloat *buf) {
- assert(0 && "implement me");
+ ArrayFloat* Array = (ArrayFloat*)array;
+ memcpy(&(Array->elements[start]), buf, len * sizeof(float));
}
void SetDoubleArrayRegion(JNIEnv *env, jdoubleArray array, jsize start,
jsize len, const jdouble *buf) {
- assert(0 && "implement me");
+ ArrayDouble* Array = (ArrayDouble*)array;
+ memcpy(&(Array->elements[start]), buf, len * sizeof(double));
}
More information about the vmkit-commits
mailing list