Reviewed by Jon.
[WebKit-https.git] / WebCore / bridge / jni / jni_utility.cpp
index 8a8c6560ee480a4e224ee4ac385db7a73c7b093a..e8d599b411f10406b710441eaa4d0ae19bf6b839 100644 (file)
 #include "config.h"
 #include "jni_utility.h"
 
-#include "list.h"
 #include "jni_runtime.h"
 #include "runtime_array.h"
 #include "runtime_object.h"
+#include <kjs/array_instance.h>
 #include <dlfcn.h>
 
 namespace KJS {
@@ -100,211 +100,6 @@ JNIEnv* getJNIEnv()
     return NULL;
 }
 
-static jvalue callJNIMethod (JNIType type, jobject obj, const char *name, const char *sig, va_list args)
-{
-    JavaVM *jvm = getJavaVM();
-    JNIEnv *env = getJNIEnv();
-    jvalue result;
-
-    bzero (&result, sizeof(jvalue));
-    if ( obj != NULL && jvm != NULL && env != NULL) {
-        jclass cls = env->GetObjectClass(obj);
-        if ( cls != NULL ) {
-            jmethodID mid = env->GetMethodID(cls, name, sig);
-            if ( mid != NULL )
-            {
-                switch (type) {
-                case void_type:
-                    env->functions->CallVoidMethodV(env, obj, mid, args);
-                    break;
-                case array_type:
-                case object_type:
-                    result.l = env->functions->CallObjectMethodV(env, obj, mid, args);
-                    break;
-                case boolean_type:
-                    result.z = env->functions->CallBooleanMethodV(env, obj, mid, args);
-                    break;
-                case byte_type:
-                    result.b = env->functions->CallByteMethodV(env, obj, mid, args);
-                    break;
-                case char_type:
-                    result.c = env->functions->CallCharMethodV(env, obj, mid, args);
-                    break;
-                case short_type:
-                    result.s = env->functions->CallShortMethodV(env, obj, mid, args);
-                    break;
-                case int_type:
-                    result.i = env->functions->CallIntMethodV(env, obj, mid, args);
-                    break;
-                case long_type:
-                    result.j = env->functions->CallLongMethodV(env, obj, mid, args);
-                    break;
-                case float_type:
-                    result.f = env->functions->CallFloatMethodV(env, obj, mid, args);
-                    break;
-                case double_type:
-                    result.d = env->functions->CallDoubleMethodV(env, obj, mid, args);
-                    break;
-                default:
-                    fprintf(stderr, "%s: invalid function type (%d)\n", __PRETTY_FUNCTION__, (int)type);
-                }
-            }
-            else
-            {
-                fprintf(stderr, "%s: Could not find method: %s for %p\n", __PRETTY_FUNCTION__, name, obj);
-                env->ExceptionDescribe();
-                env->ExceptionClear();
-                fprintf (stderr, "\n");
-            }
-
-            env->DeleteLocalRef(cls);
-        }
-        else {
-            fprintf(stderr, "%s: Could not find class for %p\n", __PRETTY_FUNCTION__, obj);
-        }
-    }
-
-    return result;
-}
-
-static jvalue callJNIStaticMethod (JNIType type, jclass cls, const char *name, const char *sig, va_list args)
-{
-    JavaVM *jvm = getJavaVM();
-    JNIEnv *env = getJNIEnv();
-    jvalue result;
-
-    bzero (&result, sizeof(jvalue));
-    if ( cls != NULL && jvm != NULL && env != NULL) {
-        jmethodID mid = env->GetStaticMethodID(cls, name, sig);
-        if ( mid != NULL )
-        {
-            switch (type) {
-            case void_type:
-                env->functions->CallStaticVoidMethodV(env, cls, mid, args);
-                break;
-            case array_type:
-            case object_type:
-                result.l = env->functions->CallStaticObjectMethodV(env, cls, mid, args);
-                break;
-            case boolean_type:
-                result.z = env->functions->CallStaticBooleanMethodV(env, cls, mid, args);
-                break;
-            case byte_type:
-                result.b = env->functions->CallStaticByteMethodV(env, cls, mid, args);
-                break;
-            case char_type:
-                result.c = env->functions->CallStaticCharMethodV(env, cls, mid, args);
-                break;
-            case short_type:
-                result.s = env->functions->CallStaticShortMethodV(env, cls, mid, args);
-                break;
-            case int_type:
-                result.i = env->functions->CallStaticIntMethodV(env, cls, mid, args);
-                break;
-            case long_type:
-                result.j = env->functions->CallStaticLongMethodV(env, cls, mid, args);
-                break;
-            case float_type:
-                result.f = env->functions->CallStaticFloatMethodV(env, cls, mid, args);
-                break;
-            case double_type:
-                result.d = env->functions->CallStaticDoubleMethodV(env, cls, mid, args);
-                break;
-            default:
-                fprintf(stderr, "%s: invalid function type (%d)\n", __PRETTY_FUNCTION__, (int)type);
-            }
-        }
-        else
-        {
-            fprintf(stderr, "%s: Could not find method: %s for %p\n", __PRETTY_FUNCTION__, name, cls);
-            env->ExceptionDescribe();
-            env->ExceptionClear();
-            fprintf (stderr, "\n");
-        }
-    }
-
-    return result;
-}
-
-static jvalue callJNIMethodIDA (JNIType type, jobject obj, jmethodID mid, jvalue *args)
-{
-    JNIEnv *env = getJNIEnv();
-    jvalue result;
-    
-    bzero (&result, sizeof(jvalue));
-    if ( obj != NULL && mid != NULL )
-    {
-        switch (type) {
-        case void_type:
-            env->functions->CallVoidMethodA(env, obj, mid, args);
-            break;
-        case array_type:
-        case object_type:
-            result.l = env->functions->CallObjectMethodA(env, obj, mid, args);
-            break;
-        case boolean_type:
-            result.z = env->functions->CallBooleanMethodA(env, obj, mid, args);
-            break;
-        case byte_type:
-            result.b = env->functions->CallByteMethodA(env, obj, mid, args);
-            break;
-        case char_type:
-            result.c = env->functions->CallCharMethodA(env, obj, mid, args);
-            break;
-        case short_type:
-            result.s = env->functions->CallShortMethodA(env, obj, mid, args);
-            break;
-        case int_type:
-            result.i = env->functions->CallIntMethodA(env, obj, mid, args);
-            break;
-        case long_type:
-            result.j = env->functions->CallLongMethodA(env, obj, mid, args);
-            break;
-        case float_type:
-            result.f = env->functions->CallFloatMethodA(env, obj, mid, args);
-            break;
-        case double_type:
-            result.d = env->functions->CallDoubleMethodA(env, obj, mid, args);
-            break;
-        default:
-            fprintf(stderr, "%s: invalid function type (%d)\n", __PRETTY_FUNCTION__, (int)type);
-        }
-    }
-
-    return result;
-}
-
-static jvalue callJNIMethodA (JNIType type, jobject obj, const char *name, const char *sig, jvalue *args)
-{
-    JavaVM *jvm = getJavaVM();
-    JNIEnv *env = getJNIEnv();
-    jvalue result;
-    
-    bzero (&result, sizeof(jvalue));
-    if ( obj != NULL && jvm != NULL && env != NULL) {
-        jclass cls = env->GetObjectClass(obj);
-        if ( cls != NULL ) {
-            jmethodID mid = env->GetMethodID(cls, name, sig);
-            if ( mid != NULL ) {
-                result = callJNIMethodIDA (type, obj, mid, args);
-            }
-            else {
-                fprintf(stderr, "%s: Could not find method: %s\n", __PRETTY_FUNCTION__, name);
-                env->ExceptionDescribe();
-                env->ExceptionClear();
-                fprintf (stderr, "\n");
-            }
-
-            env->DeleteLocalRef(cls);
-        }
-        else {
-            fprintf(stderr, "%s: Could not find class for object\n", __PRETTY_FUNCTION__);
-        }
-    }
-
-    return result;
-}
-
 jmethodID getMethodID (jobject obj, const char *name, const char *sig)
 {
     JNIEnv *env = getJNIEnv();
@@ -327,206 +122,6 @@ jmethodID getMethodID (jobject obj, const char *name, const char *sig)
     return mid;
 }
 
-
-#define CALL_JNI_METHOD(function_type,obj,name,sig) \
-    va_list args;\
-    va_start (args, sig);\
-    \
-    jvalue result = callJNIMethod(function_type, obj, name, sig, args);\
-    \
-    va_end (args);
-
-#define CALL_JNI_STATIC_METHOD(function_type,cls,name,sig) \
-    va_list args;\
-    va_start (args, sig);\
-    \
-    jvalue result = callJNIStaticMethod(function_type, cls, name, sig, args);\
-    \
-    va_end (args);
-
-void callJNIVoidMethod (jobject obj, const char *name, const char *sig, ... )
-{
-    CALL_JNI_METHOD (void_type, obj, name, sig);
-}
-
-jobject callJNIObjectMethod (jobject obj, const char *name, const char *sig, ... )
-{
-    CALL_JNI_METHOD (object_type, obj, name, sig);
-    return result.l;
-}
-
-jboolean callJNIBooleanMethod( jobject obj, const char *name, const char *sig, ... )
-{
-    CALL_JNI_METHOD (boolean_type, obj, name, sig);
-    return result.z;
-}
-
-jboolean callJNIStaticBooleanMethod (jclass cls, const char *name, const char *sig, ... )
-{
-    CALL_JNI_STATIC_METHOD (boolean_type, cls, name, sig);
-    return result.z;
-}
-
-jbyte callJNIByteMethod( jobject obj, const char *name, const char *sig, ... )
-{
-    CALL_JNI_METHOD (byte_type, obj, name, sig);
-    return result.b;
-}
-
-jchar callJNICharMethod (jobject obj, const char *name, const char *sig, ... )
-{
-    CALL_JNI_METHOD (char_type, obj, name, sig);
-    return result.c;
-}
-
-jshort callJNIShortMethod (jobject obj, const char *name, const char *sig, ... )
-{
-    CALL_JNI_METHOD (short_type, obj, name, sig);
-    return result.s;
-}
-
-jint callJNIIntMethod (jobject obj, const char *name, const char *sig, ... )
-{
-    CALL_JNI_METHOD (int_type, obj, name, sig);
-    return result.i;
-}
-
-jlong callJNILongMethod (jobject obj, const char *name, const char *sig, ... )
-{
-    CALL_JNI_METHOD (long_type, obj, name, sig);
-    return result.j;
-}
-
-jfloat callJNIFloatMethod (jobject obj, const char *name, const char *sig, ... )
-{
-    CALL_JNI_METHOD (float_type, obj, name, sig);
-    return result.f;
-}
-
-jdouble callJNIDoubleMethod (jobject obj, const char *name, const char *sig, ... )
-{
-    CALL_JNI_METHOD (double_type, obj, name, sig);
-    return result.d;
-}
-
-void callJNIVoidMethodA (jobject obj, const char *name, const char *sig, jvalue *args)
-{
-    jvalue result = callJNIMethodA (void_type, obj, name, sig, args);
-}
-
-jobject callJNIObjectMethodA (jobject obj, const char *name, const char *sig, jvalue *args)
-{
-    jvalue result = callJNIMethodA (object_type, obj, name, sig, args);
-    return result.l;
-}
-
-jbyte callJNIByteMethodA ( jobject obj, const char *name, const char *sig, jvalue *args)
-{
-    jvalue result = callJNIMethodA (byte_type, obj, name, sig, args);
-    return result.b;
-}
-
-jchar callJNICharMethodA (jobject obj, const char *name, const char *sig, jvalue *args)
-{
-    jvalue result = callJNIMethodA (char_type, obj, name, sig, args);
-    return result.c;
-}
-
-jshort callJNIShortMethodA (jobject obj, const char *name, const char *sig, jvalue *args)
-{
-    jvalue result = callJNIMethodA (short_type, obj, name, sig, args);
-    return result.s;
-}
-
-jint callJNIIntMethodA (jobject obj, const char *name, const char *sig, jvalue *args)
-{
-    jvalue result = callJNIMethodA (int_type, obj, name, sig, args);
-    return result.i;
-}
-
-jlong callJNILongMethodA (jobject obj, const char *name, const char *sig, jvalue *args)
-{
-    jvalue result = callJNIMethodA (long_type, obj, name, sig, args);
-    return result.j;
-}
-
-jfloat callJNIFloatMethodA (jobject obj, const char *name, const char *sig, jvalue *args)
-{
-    jvalue result = callJNIMethodA  (float_type, obj, name, sig, args);
-    return result.f;
-}
-
-jdouble callJNIDoubleMethodA (jobject obj, const char *name, const char *sig, jvalue *args)
-{
-    jvalue result = callJNIMethodA (double_type, obj, name, sig, args);
-    return result.d;
-}
-
-jboolean callJNIBooleanMethodA (jobject obj, const char *name, const char *sig, jvalue *args)
-{
-    jvalue result = callJNIMethodA (boolean_type, obj, name, sig, args);
-    return result.z;
-}
-
-void callJNIVoidMethodIDA (jobject obj, jmethodID methodID, jvalue *args)
-{
-    jvalue result = callJNIMethodIDA (void_type, obj, methodID, args);
-}
-
-jobject callJNIObjectMethodIDA (jobject obj, jmethodID methodID, jvalue *args)
-{
-    jvalue result = callJNIMethodIDA (object_type, obj, methodID, args);
-    return result.l;
-}
-
-jbyte callJNIByteMethodIDA ( jobject obj, jmethodID methodID, jvalue *args)
-{
-    jvalue result = callJNIMethodIDA (byte_type, obj, methodID, args);
-    return result.b;
-}
-
-jchar callJNICharMethodIDA (jobject obj, jmethodID methodID, jvalue *args)
-{
-    jvalue result = callJNIMethodIDA (char_type, obj, methodID, args);
-    return result.c;
-}
-
-jshort callJNIShortMethodIDA (jobject obj, jmethodID methodID, jvalue *args)
-{
-    jvalue result = callJNIMethodIDA (short_type, obj, methodID, args);
-    return result.s;
-}
-
-jint callJNIIntMethodIDA (jobject obj, jmethodID methodID, jvalue *args)
-{
-    jvalue result = callJNIMethodIDA (int_type, obj, methodID, args);
-    return result.i;
-}
-
-jlong callJNILongMethodIDA (jobject obj, jmethodID methodID, jvalue *args)
-{
-    jvalue result = callJNIMethodIDA (long_type, obj, methodID, args);
-    return result.j;
-}
-
-jfloat callJNIFloatMethodIDA (jobject obj, jmethodID methodID, jvalue *args)
-{
-    jvalue result = callJNIMethodIDA  (float_type, obj, methodID, args);
-    return result.f;
-}
-
-jdouble callJNIDoubleMethodIDA (jobject obj, jmethodID methodID, jvalue *args)
-{
-    jvalue result = callJNIMethodIDA (double_type, obj, methodID, args);
-    return result.d;
-}
-
-jboolean callJNIBooleanMethodIDA (jobject obj, jmethodID methodID, jvalue *args)
-{
-    jvalue result = callJNIMethodIDA (boolean_type, obj, methodID, args);
-    return result.z;
-}
-
 const char *getCharactersFromJString (jstring aJString)
 {
     return getCharactersFromJStringInEnv (getJNIEnv(), aJString);