Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: jni.c 7813 2007-04-25 19:20:13Z twisti $
+ $Id: jni.c 7926 2007-05-21 08:27:06Z twisti $
*/
}
+/* _Jv_jni_CallLongMethodA *****************************************************
+
+ Internal function to call Java long methods.
+
+*******************************************************************************/
+
+static jlong _Jv_jni_CallLongMethodA(java_objectheader *o, vftbl_t *vftbl,
+ methodinfo *m, jvalue *args)
+{
+ methodinfo *resm;
+ jlong l;
+
+ STATISTICS(jniinvokation());
+
+ if (m == NULL) {
+ exceptions_throw_nullpointerexception();
+ return 0;
+ }
+
+ /* Class initialization is done by the JIT compiler. This is ok
+ since a static method always belongs to the declaring class. */
+
+ if (m->flags & ACC_STATIC) {
+ /* For static methods we reset the object. */
+
+ if (o != NULL)
+ o = NULL;
+
+ /* for convenience */
+
+ resm = m;
+ }
+ else {
+ /* For instance methods we make a virtual function table lookup. */
+
+ resm = method_vftbl_lookup(vftbl, m);
+ }
+
+ STATISTICS(jnicallXmethodnvokation());
+
+ l = vm_call_method_long_jvalue(resm, o, args);
+
+ return l;
+}
+
+
/* _Jv_jni_CallFloatMethod *****************************************************
Internal function to call Java float methods.
}
+/* _Jv_jni_CallFloatMethodA ****************************************************
+
+ Internal function to call Java float methods.
+
+*******************************************************************************/
+
+static jfloat _Jv_jni_CallFloatMethodA(java_objectheader *o, vftbl_t *vftbl,
+ methodinfo *m, jvalue *args)
+{
+ methodinfo *resm;
+ jfloat f;
+
+ /* Class initialization is done by the JIT compiler. This is ok
+ since a static method always belongs to the declaring class. */
+
+ if (m->flags & ACC_STATIC) {
+ /* For static methods we reset the object. */
+
+ if (o != NULL)
+ o = NULL;
+
+ /* for convenience */
+
+ resm = m;
+ }
+ else {
+ /* For instance methods we make a virtual function table lookup. */
+
+ resm = method_vftbl_lookup(vftbl, m);
+ }
+
+ STATISTICS(jnicallXmethodnvokation());
+
+ f = vm_call_method_float_jvalue(resm, o, args);
+
+ return f;
+}
+
+
/* _Jv_jni_CallDoubleMethod ****************************************************
Internal function to call Java double methods.
}
+/* _Jv_jni_CallDoubleMethodA ***************************************************
+
+ Internal function to call Java double methods.
+
+*******************************************************************************/
+
+static jdouble _Jv_jni_CallDoubleMethodA(java_objectheader *o, vftbl_t *vftbl,
+ methodinfo *m, jvalue *args)
+{
+ methodinfo *resm;
+ jdouble d;
+
+ /* Class initialization is done by the JIT compiler. This is ok
+ since a static method always belongs to the declaring class. */
+
+ if (m->flags & ACC_STATIC) {
+ /* For static methods we reset the object. */
+
+ if (o != NULL)
+ o = NULL;
+
+ /* for convenience */
+
+ resm = m;
+ }
+ else {
+ /* For instance methods we make a virtual function table lookup. */
+
+ resm = method_vftbl_lookup(vftbl, m);
+ }
+
+ d = vm_call_method_double_jvalue(resm, o, args);
+
+ return d;
+}
+
+
/* _Jv_jni_CallVoidMethod ******************************************************
Internal function to call Java void methods.
jboolean _Jv_JNI_CallStaticBooleanMethodA(JNIEnv *env, jclass clazz,
jmethodID methodID, jvalue *args)
{
- log_text("JNI-Call: CallStaticBooleanMethodA: IMPLEMENT ME!");
+ methodinfo *m;
+ jboolean b;
- return 0;
+ m = (methodinfo *) methodID;
+
+ b = _Jv_jni_CallIntMethodA(NULL, NULL, m, args);
+
+ return b;
}
jbyte _Jv_JNI_CallStaticByteMethodA(JNIEnv *env, jclass clazz,
jmethodID methodID, jvalue *args)
{
- log_text("JNI-Call: CallStaticByteMethodA: IMPLEMENT ME!");
+ methodinfo *m;
+ jbyte b;
- return 0;
+ m = (methodinfo *) methodID;
+
+ b = _Jv_jni_CallIntMethodA(NULL, NULL, m, args);
+
+ return b;
}
jchar _Jv_JNI_CallStaticCharMethodA(JNIEnv *env, jclass clazz,
jmethodID methodID, jvalue *args)
{
- log_text("JNI-Call: CallStaticCharMethodA: IMPLEMENT ME!");
+ methodinfo *m;
+ jchar c;
- return 0;
+ m = (methodinfo *) methodID;
+
+ c = _Jv_jni_CallIntMethodA(NULL, NULL, m, args);
+
+ return c;
}
jshort _Jv_JNI_CallStaticShortMethodA(JNIEnv *env, jclass clazz,
jmethodID methodID, jvalue *args)
{
- log_text("JNI-Call: CallStaticShortMethodA: IMPLEMENT ME!");
+ methodinfo *m;
+ jshort s;
- return 0;
+ m = (methodinfo *) methodID;
+
+ s = _Jv_jni_CallIntMethodA(NULL, NULL, m, args);
+
+ return s;
}
jint _Jv_JNI_CallStaticIntMethodA(JNIEnv *env, jclass clazz,
jmethodID methodID, jvalue *args)
{
- log_text("JNI-Call: CallStaticIntMethodA: IMPLEMENT ME!");
+ methodinfo *m;
+ jint i;
- return 0;
+ m = (methodinfo *) methodID;
+
+ i = _Jv_jni_CallIntMethodA(NULL, NULL, m, args);
+
+ return i;
}
jlong _Jv_JNI_CallStaticLongMethodA(JNIEnv *env, jclass clazz,
jmethodID methodID, jvalue *args)
{
- log_text("JNI-Call: CallStaticLongMethodA: IMPLEMENT ME!");
+ methodinfo *m;
+ jlong l;
- return 0;
+ m = (methodinfo *) methodID;
+
+ l = _Jv_jni_CallLongMethodA(NULL, NULL, m, args);
+
+ return l;
}
jfloat _Jv_JNI_CallStaticFloatMethodA(JNIEnv *env, jclass clazz,
jmethodID methodID, jvalue *args)
{
- log_text("JNI-Call: CallStaticFloatMethodA: IMPLEMENT ME!");
+ methodinfo *m;
+ jfloat f;
- return 0;
+ m = (methodinfo *) methodID;
+
+ f = _Jv_jni_CallFloatMethodA(NULL, NULL, m, args);
+
+ return f;
}
jdouble _Jv_JNI_CallStaticDoubleMethodA(JNIEnv *env, jclass clazz,
jmethodID methodID, jvalue *args)
{
- log_text("JNI-Call: CallStaticDoubleMethodA: IMPLEMENT ME!");
+ methodinfo *m;
+ jdouble d;
- return 0;
+ m = (methodinfo *) methodID;
+
+ d = _Jv_jni_CallDoubleMethodA(NULL, NULL, m, args);
+
+ return d;
}