-/*\r
- * Copyright 1997, O'Reilly & Associate, Inc.\r
- *\r
- * This package may be copied under the same terms as Perl itself.\r
- */\r
-\r
-#include "EXTERN.h"\r
-#include "perl.h"\r
-#include "XSUB.h"\r
-\r
-#include <stdio.h>\r
-#include <jni.h>\r
-\r
-#ifndef PERL_VERSION\r
-# include <patchlevel.h>\r
-# define PERL_REVISION 5\r
-# define PERL_VERSION PATCHLEVEL\r
-# define PERL_SUBVERSION SUBVERSION\r
-#endif\r
-\r
-#if PERL_REVISION == 5 && (PERL_VERSION < 4 || (PERL_VERSION == 4 && PERL_SUBVERSION <= 75))\r
-# define PL_na na\r
-# define PL_sv_no sv_no\r
-# define PL_sv_undef sv_undef\r
-# define PL_dowarn dowarn\r
-#endif\r
-\r
-#ifndef newSVpvn\r
-# define newSVpvn(a,b) newSVpv(a,b)\r
-#endif\r
-\r
-#ifndef pTHX\r
-# define pTHX void\r
-# define pTHX_\r
-# define aTHX\r
-# define aTHX_\r
-# define dTHX extern int JNI___notused\r
-#endif\r
-\r
-#ifndef WIN32\r
-# include <dlfcn.h>\r
-#endif\r
-\r
-#ifdef EMBEDDEDPERL\r
-extern JNIEnv* jplcurenv;\r
-extern int jpldebug;\r
-#else\r
-JNIEnv* jplcurenv;\r
-int jpldebug = 1;\r
-#endif\r
-\r
-#define SysRet jint\r
-\r
-#ifdef WIN32\r
-static void JNICALL call_my_exit(jint status)\r
-{\r
- my_exit(status);\r
-}\r
-#else\r
-static void call_my_exit(jint status)\r
-{\r
- my_exit(status);\r
-}\r
-#endif\r
-\r
-jvalue*\r
-makeargs(char *sig, SV** svp, int items)\r
-{\r
- jvalue* jv = (jvalue*)safemalloc(sizeof(jvalue) * items);\r
- int ix = 0;\r
- char *s = sig;\r
- JNIEnv* env = jplcurenv;\r
- char *start;\r
- STRLEN n_a;\r
-\r
- if (jpldebug)\r
- fprintf(stderr, "sig = %s, items = %d\n", sig, items);\r
- if (*s++ != '(')\r
- goto cleanup;\r
-\r
- while (items--) {\r
- SV *sv = *svp++;\r
- start = s;\r
- switch (*s++) {\r
- case 'Z':\r
- jv[ix++].z = (jboolean)(SvIV(sv) != 0);\r
- break;\r
- case 'B':\r
- jv[ix++].b = (jbyte)SvIV(sv);\r
- break;\r
- case 'C':\r
- jv[ix++].c = (jchar)SvIV(sv);\r
- break;\r
- case 'S':\r
- jv[ix++].s = (jshort)SvIV(sv);\r
- break;\r
- case 'I':\r
- jv[ix++].i = (jint)SvIV(sv);\r
- break;\r
- case 'J':\r
- jv[ix++].j = (jlong)SvNV(sv);\r
- break;\r
- case 'F':\r
- jv[ix++].f = (jfloat)SvNV(sv);\r
- break;\r
- case 'D':\r
- jv[ix++].d = (jdouble)SvNV(sv);\r
- break;\r
- case '[':\r
- switch (*s++) {\r
- case 'Z':\r
- if (SvROK(sv)) {\r
- SV* rv = (SV*)SvRV(sv);\r
- if (SvOBJECT(rv))\r
- jv[ix++].l = (jobject)(void*)SvIV(rv);\r
- else if (SvTYPE(rv) == SVt_PVAV) {\r
- jsize len = av_len((AV*)rv) + 1;\r
- jboolean* buf = (jboolean*)malloc(len * sizeof(jboolean));\r
- int i;\r
- SV** esv;\r
-\r
- jbooleanArray ja = (*env)->NewBooleanArray(env, len);\r
- for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)\r
- buf[i] = (jboolean)SvIV(*esv);\r
- (*env)->SetBooleanArrayRegion(env, ja, 0, len, buf);\r
- free((void*)buf);\r
- jv[ix++].l = (jobject)ja;\r
- }\r
- else\r
- jv[ix++].l = (jobject)(void*)0;\r
- }\r
- else if (SvPOK(sv)) {\r
- jsize len = sv_len(sv) / sizeof(jboolean);\r
-\r
- jbooleanArray ja = (*env)->NewBooleanArray(env, len);\r
- (*env)->SetBooleanArrayRegion(env, ja, 0, len, (jboolean*)SvPV(sv,n_a));\r
- jv[ix++].l = (jobject)ja;\r
- }\r
- else\r
- jv[ix++].l = (jobject)(void*)0;\r
- break;\r
- case 'B':\r
- if (SvROK(sv)) {\r
- SV* rv = (SV*)SvRV(sv);\r
- if (SvOBJECT(rv))\r
- jv[ix++].l = (jobject)(void*)SvIV(rv);\r
- else if (SvTYPE(rv) == SVt_PVAV) {\r
- jsize len = av_len((AV*)rv) + 1;\r
- jbyte* buf = (jbyte*)malloc(len * sizeof(jbyte));\r
- int i;\r
- SV** esv;\r
-\r
- jbyteArray ja = (*env)->NewByteArray(env, len);\r
- for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)\r
- buf[i] = (jbyte)SvIV(*esv);\r
- (*env)->SetByteArrayRegion(env, ja, 0, len, buf);\r
- free((void*)buf);\r
- jv[ix++].l = (jobject)ja;\r
- }\r
- else\r
- jv[ix++].l = (jobject)(void*)0;\r
- }\r
- else if (SvPOK(sv)) {\r
- jsize len = sv_len(sv) / sizeof(jbyte);\r
-\r
- jbyteArray ja = (*env)->NewByteArray(env, len);\r
- (*env)->SetByteArrayRegion(env, ja, 0, len, (jbyte*)SvPV(sv,n_a));\r
- jv[ix++].l = (jobject)ja;\r
- }\r
- else\r
- jv[ix++].l = (jobject)(void*)0;\r
- break;\r
- case 'C':\r
- if (SvROK(sv)) {\r
- SV* rv = (SV*)SvRV(sv);\r
- if (SvOBJECT(rv))\r
- jv[ix++].l = (jobject)(void*)SvIV(rv);\r
- else if (SvTYPE(rv) == SVt_PVAV) {\r
- jsize len = av_len((AV*)rv) + 1;\r
- jchar* buf = (jchar*)malloc(len * sizeof(jchar));\r
- int i;\r
- SV** esv;\r
-\r
- jcharArray ja = (*env)->NewCharArray(env, len);\r
- for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)\r
- buf[i] = (jchar)SvIV(*esv);\r
- (*env)->SetCharArrayRegion(env, ja, 0, len, buf);\r
- free((void*)buf);\r
- jv[ix++].l = (jobject)ja;\r
- }\r
- else\r
- jv[ix++].l = (jobject)(void*)0;\r
- }\r
- else if (SvPOK(sv)) {\r
- jsize len = sv_len(sv) / sizeof(jchar);\r
-\r
- jcharArray ja = (*env)->NewCharArray(env, len);\r
- (*env)->SetCharArrayRegion(env, ja, 0, len, (jchar*)SvPV(sv,n_a));\r
- jv[ix++].l = (jobject)ja;\r
- }\r
- else\r
- jv[ix++].l = (jobject)(void*)0;\r
- break;\r
- case 'S':\r
- if (SvROK(sv)) {\r
- SV* rv = (SV*)SvRV(sv);\r
- if (SvOBJECT(rv))\r
- jv[ix++].l = (jobject)(void*)SvIV(rv);\r
- else if (SvTYPE(rv) == SVt_PVAV) {\r
- jsize len = av_len((AV*)rv) + 1;\r
- jshort* buf = (jshort*)malloc(len * sizeof(jshort));\r
- int i;\r
- SV** esv;\r
-\r
- jshortArray ja = (*env)->NewShortArray(env, len);\r
- for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)\r
- buf[i] = (jshort)SvIV(*esv);\r
- (*env)->SetShortArrayRegion(env, ja, 0, len, buf);\r
- free((void*)buf);\r
- jv[ix++].l = (jobject)ja;\r
- }\r
- else\r
- jv[ix++].l = (jobject)(void*)0;\r
- }\r
- else if (SvPOK(sv)) {\r
- jsize len = sv_len(sv) / sizeof(jshort);\r
-\r
- jshortArray ja = (*env)->NewShortArray(env, len);\r
- (*env)->SetShortArrayRegion(env, ja, 0, len, (jshort*)SvPV(sv,n_a));\r
- jv[ix++].l = (jobject)ja;\r
- }\r
- else\r
- jv[ix++].l = (jobject)(void*)0;\r
- break;\r
- case 'I':\r
- if (SvROK(sv)) {\r
- SV* rv = (SV*)SvRV(sv);\r
- if (SvOBJECT(rv))\r
- jv[ix++].l = (jobject)(void*)SvIV(rv);\r
- else if (SvTYPE(rv) == SVt_PVAV) {\r
- jsize len = av_len((AV*)rv) + 1;\r
- jint* buf = (jint*)malloc(len * sizeof(jint));\r
- int i;\r
- SV** esv;\r
-\r
- jintArray ja = (*env)->NewIntArray(env, len);\r
- for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)\r
- buf[i] = (jint)SvIV(*esv);\r
- (*env)->SetIntArrayRegion(env, ja, 0, len, buf);\r
- free((void*)buf);\r
- jv[ix++].l = (jobject)ja;\r
- }\r
- else\r
- jv[ix++].l = (jobject)(void*)0;\r
- }\r
- else if (SvPOK(sv)) {\r
- jsize len = sv_len(sv) / sizeof(jint);\r
-\r
- jintArray ja = (*env)->NewIntArray(env, len);\r
- (*env)->SetIntArrayRegion(env, ja, 0, len, (jint*)SvPV(sv,n_a));\r
- jv[ix++].l = (jobject)ja;\r
- }\r
- else\r
- jv[ix++].l = (jobject)(void*)0;\r
- break;\r
- case 'J':\r
- if (SvROK(sv)) {\r
- SV* rv = (SV*)SvRV(sv);\r
- if (SvOBJECT(rv))\r
- jv[ix++].l = (jobject)(void*)SvIV(rv);\r
- else if (SvTYPE(rv) == SVt_PVAV) {\r
- jsize len = av_len((AV*)rv) + 1;\r
- jlong* buf = (jlong*)malloc(len * sizeof(jlong));\r
- int i;\r
- SV** esv;\r
-\r
- jlongArray ja = (*env)->NewLongArray(env, len);\r
- for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)\r
- buf[i] = (jlong)SvNV(*esv);\r
- (*env)->SetLongArrayRegion(env, ja, 0, len, buf);\r
- free((void*)buf);\r
- jv[ix++].l = (jobject)ja;\r
- }\r
- else\r
- jv[ix++].l = (jobject)(void*)0;\r
- }\r
- else if (SvPOK(sv)) {\r
- jsize len = sv_len(sv) / sizeof(jlong);\r
-\r
- jlongArray ja = (*env)->NewLongArray(env, len);\r
- (*env)->SetLongArrayRegion(env, ja, 0, len, (jlong*)SvPV(sv,n_a));\r
- jv[ix++].l = (jobject)ja;\r
- }\r
- else\r
- jv[ix++].l = (jobject)(void*)0;\r
- break;\r
- case 'F':\r
- if (SvROK(sv)) {\r
- SV* rv = (SV*)SvRV(sv);\r
- if (SvOBJECT(rv))\r
- jv[ix++].l = (jobject)(void*)SvIV(rv);\r
- else if (SvTYPE(rv) == SVt_PVAV) {\r
- jsize len = av_len((AV*)rv) + 1;\r
- jfloat* buf = (jfloat*)malloc(len * sizeof(jfloat));\r
- int i;\r
- SV** esv;\r
-\r
- jfloatArray ja = (*env)->NewFloatArray(env, len);\r
- for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)\r
- buf[i] = (jfloat)SvNV(*esv);\r
- (*env)->SetFloatArrayRegion(env, ja, 0, len, buf);\r
- free((void*)buf);\r
- jv[ix++].l = (jobject)ja;\r
- }\r
- else\r
- jv[ix++].l = (jobject)(void*)0;\r
- }\r
- else if (SvPOK(sv)) {\r
- jsize len = sv_len(sv) / sizeof(jfloat);\r
-\r
- jfloatArray ja = (*env)->NewFloatArray(env, len);\r
- (*env)->SetFloatArrayRegion(env, ja, 0, len, (jfloat*)SvPV(sv,n_a));\r
- jv[ix++].l = (jobject)ja;\r
- }\r
- else\r
- jv[ix++].l = (jobject)(void*)0;\r
- break;\r
- case 'D':\r
- if (SvROK(sv)) {\r
- SV* rv = (SV*)SvRV(sv);\r
- if (SvOBJECT(rv))\r
- jv[ix++].l = (jobject)(void*)SvIV(rv);\r
- else if (SvTYPE(rv) == SVt_PVAV) {\r
- jsize len = av_len((AV*)rv) + 1;\r
- jdouble* buf = (jdouble*)malloc(len * sizeof(jdouble));\r
- int i;\r
- SV** esv;\r
-\r
- jdoubleArray ja = (*env)->NewDoubleArray(env, len);\r
- for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)\r
- buf[i] = (jdouble)SvNV(*esv);\r
- (*env)->SetDoubleArrayRegion(env, ja, 0, len, buf);\r
- free((void*)buf);\r
- jv[ix++].l = (jobject)ja;\r
- }\r
- else\r
- jv[ix++].l = (jobject)(void*)0;\r
- }\r
- else if (SvPOK(sv)) {\r
- jsize len = sv_len(sv) / sizeof(jdouble);\r
-\r
- jdoubleArray ja = (*env)->NewDoubleArray(env, len);\r
- (*env)->SetDoubleArrayRegion(env, ja, 0, len, (jdouble*)SvPV(sv,n_a));\r
- jv[ix++].l = (jobject)ja;\r
- }\r
- else\r
- jv[ix++].l = (jobject)(void*)0;\r
- break;\r
- case 'L':\r
- while (*s != ';') s++;\r
- s++;\r
- if (strnEQ(start, "[Ljava/lang/String;", 19)) {\r
- if (SvROK(sv)) {\r
- SV* rv = (SV*)SvRV(sv);\r
- if (SvOBJECT(rv))\r
- jv[ix++].l = (jobject)(void*)SvIV(rv);\r
- else if (SvTYPE(rv) == SVt_PVAV) {\r
- jsize len = av_len((AV*)rv) + 1;\r
- int i;\r
- SV** esv;\r
- static jclass jcl = 0;\r
- jobjectArray ja;\r
-\r
- if (!jcl)\r
- jcl = (*env)->FindClass(env, "java/lang/String");\r
- ja = (*env)->NewObjectArray(env, len, jcl, 0);\r
- for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) {\r
- jobject str = (jobject)(*env)->NewStringUTF(env, SvPV(*esv,n_a));\r
- (*env)->SetObjectArrayElement(env, ja, i, str);\r
- }\r
- jv[ix++].l = (jobject)ja;\r
- }\r
- else\r
- jv[ix++].l = (jobject)(void*)0;\r
- }\r
- else\r
- jv[ix++].l = (jobject)(void*)0;\r
- break;\r
- }\r
- /* FALL THROUGH */\r
- default:\r
- if (SvROK(sv)) {\r
- SV* rv = (SV*)SvRV(sv);\r
- if (SvOBJECT(rv))\r
- jv[ix++].l = (jobject)(void*)SvIV(rv);\r
- else if (SvTYPE(rv) == SVt_PVAV) {\r
- jsize len = av_len((AV*)rv) + 1;\r
- int i;\r
- SV** esv;\r
- static jclass jcl = 0;\r
- jobjectArray ja;\r
-\r
- if (!jcl)\r
- jcl = (*env)->FindClass(env, "java/lang/Object");\r
- ja = (*env)->NewObjectArray(env, len, jcl, 0);\r
- for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) {\r
- if (SvROK(*esv) && (rv = SvRV(*esv)) && SvOBJECT(rv)) {\r
- (*env)->SetObjectArrayElement(env, ja, i, (jobject)(void*)SvIV(rv));\r
- }\r
- else {\r
- jobject str = (jobject)(*env)->NewStringUTF(env, SvPV(*esv,n_a));\r
- (*env)->SetObjectArrayElement(env, ja, i, str);\r
- }\r
- }\r
- jv[ix++].l = (jobject)ja;\r
- }\r
- else\r
- jv[ix++].l = (jobject)(void*)0;\r
- }\r
- else\r
- jv[ix++].l = (jobject)(void*)0;\r
- break;\r
- }\r
- break;\r
- case 'L':\r
- if (!SvROK(sv) || strnEQ(s, "java/lang/String;", 17)) {\r
- s += 17;\r
- jv[ix++].l = (jobject)(*env)->NewStringUTF(env, (char*) SvPV(sv,n_a));\r
- break;\r
- }\r
- while (*s != ';') s++;\r
- s++;\r
- if (SvROK(sv)) {\r
- SV* rv = SvRV(sv);\r
- jv[ix++].l = (jobject)(void*)SvIV(rv);\r
- }\r
- break;\r
- case ')':\r
- croak("too many arguments, signature: %s", sig);\r
- goto cleanup;\r
- default:\r
- croak("panic: malformed signature: %s", s-1);\r
- goto cleanup;\r
- }\r
-\r
- }\r
- if (*s != ')') {\r
- croak("not enough arguments, signature: %s", sig);\r
- goto cleanup;\r
- }\r
- return jv;\r
-\r
-cleanup:\r
- safefree((char*)jv);\r
- return 0;\r
-}\r
-\r
-static int\r
-not_here(char *s)\r
-{\r
- croak("%s not implemented on this architecture", s);\r
- return -1;\r
-}\r
-\r
-static double\r
-constant(char *name, int arg)\r
-{\r
- errno = 0;\r
- switch (*name) {\r
- case 'A':\r
- break;\r
- case 'B':\r
- break;\r
- case 'C':\r
- break;\r
- case 'D':\r
- break;\r
- case 'E':\r
- break;\r
- case 'F':\r
- break;\r
- case 'G':\r
- break;\r
- case 'H':\r
- break;\r
- case 'I':\r
- break;\r
- case 'J':\r
- if (strEQ(name, "JNI_ABORT"))\r
-#ifdef JNI_ABORT\r
- return JNI_ABORT;\r
-#else\r
- goto not_there;\r
-#endif\r
- if (strEQ(name, "JNI_COMMIT"))\r
-#ifdef JNI_COMMIT\r
- return JNI_COMMIT;\r
-#else\r
- goto not_there;\r
-#endif\r
- if (strEQ(name, "JNI_ERR"))\r
-#ifdef JNI_ERR\r
- return JNI_ERR;\r
-#else\r
- goto not_there;\r
-#endif\r
- if (strEQ(name, "JNI_FALSE"))\r
-#ifdef JNI_FALSE\r
- return JNI_FALSE;\r
-#else\r
- goto not_there;\r
-#endif\r
- if (strEQ(name, "JNI_H"))\r
-#ifdef JNI_H\r
-#ifdef WIN32\r
- return 1;\r
-#else\r
- return JNI_H;\r
-#endif\r
-#else\r
- goto not_there;\r
-#endif\r
- if (strEQ(name, "JNI_OK"))\r
-#ifdef JNI_OK\r
- return JNI_OK;\r
-#else\r
- goto not_there;\r
-#endif\r
- if (strEQ(name, "JNI_TRUE"))\r
-#ifdef JNI_TRUE\r
- return JNI_TRUE;\r
-#else\r
- goto not_there;\r
-#endif\r
- break;\r
- case 'K':\r
- break;\r
- case 'L':\r
- break;\r
- case 'M':\r
- break;\r
- case 'N':\r
- break;\r
- case 'O':\r
- break;\r
- case 'P':\r
- break;\r
- case 'Q':\r
- break;\r
- case 'R':\r
- break;\r
- case 'S':\r
- break;\r
- case 'T':\r
- break;\r
- case 'U':\r
- break;\r
- case 'V':\r
- break;\r
- case 'W':\r
- break;\r
- case 'X':\r
- break;\r
- case 'Y':\r
- break;\r
- case 'Z':\r
- break;\r
- }\r
- errno = EINVAL;\r
- return 0;\r
-\r
-not_there:\r
- errno = ENOENT;\r
- return 0;\r
-}\r
-\r
-#define FETCHENV jplcurenv\r
-#define RESTOREENV jplcurenv = env\r
-\r
-MODULE = JNI PACKAGE = JNI \r
-\r
-PROTOTYPES: ENABLE\r
-\r
-double\r
-constant(name,arg)\r
- char * name\r
- int arg\r
-\r
-jint\r
-GetVersion()\r
- JNIEnv * env = FETCHENV;\r
- CODE:\r
- {\r
- RETVAL = (*env)->GetVersion(env);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jclass\r
-DefineClass(name, loader, buf)\r
- JNIEnv * env = FETCHENV;\r
- STRLEN tmplen = NO_INIT;\r
- jsize buf_len_ = NO_INIT;\r
- const char * name\r
- jobject loader\r
- const jbyte * buf\r
- CODE:\r
- {\r
-#ifdef KAFFE\r
- RETVAL = (*env)->DefineClass(env, loader, buf, (jsize)buf_len_);\r
-#else\r
- RETVAL = (*env)->DefineClass(env, name, loader, buf, (jsize)buf_len_); \r
-#endif\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jclass\r
-FindClass(name)\r
- JNIEnv * env = FETCHENV;\r
- const char * name\r
- CODE:\r
- {\r
- RETVAL = (*env)->FindClass(env, name);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jclass\r
-GetSuperclass(sub)\r
- JNIEnv * env = FETCHENV;\r
- jclass sub\r
- CODE:\r
- {\r
- RETVAL = (*env)->GetSuperclass(env, sub);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jboolean\r
-IsAssignableFrom(sub, sup)\r
- JNIEnv * env = FETCHENV;\r
- jclass sub\r
- jclass sup\r
- CODE:\r
- {\r
- RETVAL = (*env)->IsAssignableFrom(env, sub, sup);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-SysRet\r
-Throw(obj)\r
- JNIEnv * env = FETCHENV;\r
- jthrowable obj\r
- CODE:\r
- {\r
- RETVAL = (*env)->Throw(env, obj);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL \r
-\r
-SysRet\r
-ThrowNew(clazz, msg)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- const char * msg\r
- CODE:\r
- {\r
- RETVAL = (*env)->ThrowNew(env, clazz, msg);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jthrowable\r
-ExceptionOccurred()\r
- JNIEnv * env = FETCHENV;\r
- CODE:\r
- {\r
- RETVAL = (*env)->ExceptionOccurred(env);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-void\r
-ExceptionDescribe()\r
- JNIEnv * env = FETCHENV;\r
- CODE:\r
- {\r
- (*env)->ExceptionDescribe(env);\r
- RESTOREENV;\r
- }\r
-\r
-void\r
-ExceptionClear()\r
- JNIEnv * env = FETCHENV;\r
- CODE:\r
- {\r
- (*env)->ExceptionClear(env);\r
- RESTOREENV;\r
- }\r
-\r
-void\r
-FatalError(msg)\r
- JNIEnv * env = FETCHENV;\r
- const char * msg\r
- CODE:\r
- {\r
- (*env)->FatalError(env, msg);\r
- RESTOREENV;\r
- }\r
-\r
-jobject\r
-NewGlobalRef(lobj)\r
- JNIEnv * env = FETCHENV;\r
- jobject lobj\r
- CODE:\r
- {\r
- RETVAL = (*env)->NewGlobalRef(env, lobj);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-void\r
-DeleteGlobalRef(gref)\r
- JNIEnv * env = FETCHENV;\r
- jobject gref\r
- CODE:\r
- {\r
- (*env)->DeleteGlobalRef(env, gref);\r
- RESTOREENV;\r
- }\r
-\r
-void\r
-DeleteLocalRef(obj)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- CODE:\r
- {\r
- (*env)->DeleteLocalRef(env, obj);\r
- RESTOREENV;\r
- }\r
-\r
-jboolean\r
-IsSameObject(obj1,obj2)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj1\r
- jobject obj2\r
- CODE:\r
- {\r
- RETVAL = (*env)->IsSameObject(env, obj1,obj2);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jobject\r
-AllocObject(clazz)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- CODE:\r
- {\r
- RETVAL = (*env)->AllocObject(env, clazz);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jobject\r
-NewObject(clazz,methodID,...)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- jmethodID methodID\r
- char * sig = 0;\r
- int argoff = $min_args;\r
- CODE:\r
- {\r
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);\r
- RETVAL = (*env)->NewObjectA(env, clazz,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jobject\r
-NewObjectA(clazz,methodID,args)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- jmethodID methodID\r
- char * sig = 0;\r
- jvalue * args\r
- CODE:\r
- {\r
- RETVAL = (*env)->NewObjectA(env, clazz,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jclass\r
-GetObjectClass(obj)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- CODE:\r
- {\r
- RETVAL = (*env)->GetObjectClass(env, obj);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jboolean\r
-IsInstanceOf(obj,clazz)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jclass clazz\r
- CODE:\r
- {\r
- RETVAL = (*env)->IsInstanceOf(env, obj,clazz);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jmethodID\r
-GetMethodID(clazz,name,sig)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- const char * name\r
- const char * sig\r
- CODE:\r
- {\r
- RETVAL = (*env)->GetMethodID(env, clazz,name,sig);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jobject\r
-CallObjectMethod(obj,methodID,...)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jmethodID methodID\r
- char * sig = 0;\r
- int argoff = $min_args;\r
- CODE:\r
- {\r
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);\r
- RETVAL = (*env)->CallObjectMethodA(env, obj,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jobject\r
-CallObjectMethodA(obj,methodID,args)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jmethodID methodID\r
- char * sig = 0;\r
- jvalue * args\r
- CODE:\r
- {\r
- RETVAL = (*env)->CallObjectMethodA(env, obj,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jboolean\r
-CallBooleanMethod(obj,methodID,...)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jmethodID methodID\r
- char * sig = 0;\r
- int argoff = $min_args;\r
- CODE:\r
- {\r
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);\r
- RETVAL = (*env)->CallBooleanMethodA(env, obj,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jboolean\r
-CallBooleanMethodA(obj,methodID, args)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jmethodID methodID\r
- char * sig = 0;\r
- jvalue * args\r
- CODE:\r
- {\r
- RETVAL = (*env)->CallBooleanMethodA(env, obj,methodID, args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jbyte\r
-CallByteMethod(obj,methodID,...)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jmethodID methodID\r
- char * sig = 0;\r
- int argoff = $min_args;\r
- CODE:\r
- {\r
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);\r
- RETVAL = (*env)->CallByteMethodA(env, obj,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jbyte\r
-CallByteMethodA(obj,methodID,args)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jmethodID methodID\r
- char * sig = 0;\r
- jvalue * args\r
- CODE:\r
- {\r
- RETVAL = (*env)->CallByteMethodA(env, obj,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jchar\r
-CallCharMethod(obj,methodID,...)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jmethodID methodID\r
- char * sig = 0;\r
- int argoff = $min_args;\r
- CODE:\r
- {\r
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);\r
- RETVAL = (*env)->CallCharMethodA(env, obj,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jchar\r
-CallCharMethodA(obj,methodID,args)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jmethodID methodID\r
- char * sig = 0;\r
- jvalue * args\r
- CODE:\r
- {\r
- RETVAL = (*env)->CallCharMethodA(env, obj,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jshort\r
-CallShortMethod(obj,methodID,...)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jmethodID methodID\r
- char * sig = 0;\r
- int argoff = $min_args;\r
- CODE:\r
- {\r
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);\r
- RETVAL = (*env)->CallShortMethodA(env, obj,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jshort\r
-CallShortMethodA(obj,methodID,args)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jmethodID methodID\r
- char * sig = 0;\r
- jvalue * args\r
- CODE:\r
- {\r
- RETVAL = (*env)->CallShortMethodA(env, obj,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jint\r
-CallIntMethod(obj,methodID,...)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jmethodID methodID\r
- char * sig = 0;\r
- int argoff = $min_args;\r
- CODE:\r
- {\r
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);\r
- RETVAL = (*env)->CallIntMethodA(env, obj,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jint\r
-CallIntMethodA(obj,methodID,args)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jmethodID methodID\r
- char * sig = 0;\r
- jvalue * args\r
- CODE:\r
- {\r
- RETVAL = (*env)->CallIntMethodA(env, obj,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jlong\r
-CallLongMethod(obj,methodID,...)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jmethodID methodID\r
- char * sig = 0;\r
- int argoff = $min_args;\r
- CODE:\r
- {\r
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);\r
- RETVAL = (*env)->CallLongMethodA(env, obj,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jlong\r
-CallLongMethodA(obj,methodID,args)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jmethodID methodID\r
- char * sig = 0;\r
- jvalue * args\r
- CODE:\r
- {\r
- RETVAL = (*env)->CallLongMethodA(env, obj,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jfloat\r
-CallFloatMethod(obj,methodID,...)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jmethodID methodID\r
- char * sig = 0;\r
- int argoff = $min_args;\r
- CODE:\r
- {\r
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);\r
- RETVAL = (*env)->CallFloatMethodA(env, obj,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jfloat\r
-CallFloatMethodA(obj,methodID,args)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jmethodID methodID\r
- char * sig = 0;\r
- jvalue * args\r
- CODE:\r
- {\r
- RETVAL = (*env)->CallFloatMethodA(env, obj,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jdouble\r
-CallDoubleMethod(obj,methodID,...)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jmethodID methodID\r
- char * sig = 0;\r
- int argoff = $min_args;\r
- CODE:\r
- {\r
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);\r
- RETVAL = (*env)->CallDoubleMethodA(env, obj,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jdouble\r
-CallDoubleMethodA(obj,methodID,args)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jmethodID methodID\r
- char * sig = 0;\r
- jvalue * args\r
- CODE:\r
- {\r
- RETVAL = (*env)->CallDoubleMethodA(env, obj,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-void\r
-CallVoidMethod(obj,methodID,...)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jmethodID methodID\r
- char * sig = 0;\r
- int argoff = $min_args;\r
- CODE:\r
- {\r
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);\r
- (*env)->CallVoidMethodA(env, obj,methodID,args);\r
- RESTOREENV;\r
- }\r
-\r
-void\r
-CallVoidMethodA(obj,methodID,args)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jmethodID methodID\r
- char * sig = 0;\r
- jvalue * args\r
- CODE:\r
- {\r
- (*env)->CallVoidMethodA(env, obj,methodID,args);\r
- RESTOREENV;\r
- }\r
-\r
-jobject\r
-CallNonvirtualObjectMethod(obj,clazz,methodID,...)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jclass clazz\r
- jmethodID methodID\r
- char * sig = 0;\r
- int argoff = $min_args;\r
- CODE:\r
- {\r
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);\r
- RETVAL = (*env)->CallNonvirtualObjectMethodA(env, obj,clazz,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jobject\r
-CallNonvirtualObjectMethodA(obj,clazz,methodID,args)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jclass clazz\r
- jmethodID methodID\r
- char * sig = 0;\r
- jvalue * args\r
- CODE:\r
- {\r
- RETVAL = (*env)->CallNonvirtualObjectMethodA(env, obj,clazz,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jboolean\r
-CallNonvirtualBooleanMethod(obj,clazz,methodID,...)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jclass clazz\r
- jmethodID methodID\r
- char * sig = 0;\r
- int argoff = $min_args;\r
- CODE:\r
- {\r
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);\r
- RETVAL = (*env)->CallNonvirtualBooleanMethodA(env, obj,clazz,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jboolean\r
-CallNonvirtualBooleanMethodA(obj,clazz,methodID, args)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jclass clazz\r
- jmethodID methodID\r
- char * sig = 0;\r
- jvalue * args\r
- CODE:\r
- {\r
- RETVAL = (*env)->CallNonvirtualBooleanMethodA(env, obj,clazz,methodID, args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jbyte\r
-CallNonvirtualByteMethod(obj,clazz,methodID,...)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jclass clazz\r
- jmethodID methodID\r
- char * sig = 0;\r
- int argoff = $min_args;\r
- CODE:\r
- {\r
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);\r
- RETVAL = (*env)->CallNonvirtualByteMethodA(env, obj,clazz,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jbyte\r
-CallNonvirtualByteMethodA(obj,clazz,methodID,args)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jclass clazz\r
- jmethodID methodID\r
- char * sig = 0;\r
- jvalue * args\r
- CODE:\r
- {\r
- RETVAL = (*env)->CallNonvirtualByteMethodA(env, obj,clazz,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jchar\r
-CallNonvirtualCharMethod(obj,clazz,methodID,...)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jclass clazz\r
- jmethodID methodID\r
- char * sig = 0;\r
- int argoff = $min_args;\r
- CODE:\r
- {\r
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);\r
- RETVAL = (*env)->CallNonvirtualCharMethodA(env, obj,clazz,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jchar\r
-CallNonvirtualCharMethodA(obj,clazz,methodID,args)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jclass clazz\r
- jmethodID methodID\r
- char * sig = 0;\r
- jvalue * args\r
- CODE:\r
- {\r
- RETVAL = (*env)->CallNonvirtualCharMethodA(env, obj,clazz,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jshort\r
-CallNonvirtualShortMethod(obj,clazz,methodID,...)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jclass clazz\r
- jmethodID methodID\r
- char * sig = 0;\r
- int argoff = $min_args;\r
- CODE:\r
- {\r
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);\r
- RETVAL = (*env)->CallNonvirtualShortMethodA(env, obj,clazz,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jshort\r
-CallNonvirtualShortMethodA(obj,clazz,methodID,args)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jclass clazz\r
- jmethodID methodID\r
- char * sig = 0;\r
- jvalue * args\r
- CODE:\r
- {\r
- RETVAL = (*env)->CallNonvirtualShortMethodA(env, obj,clazz,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jint\r
-CallNonvirtualIntMethod(obj,clazz,methodID,...)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jclass clazz\r
- jmethodID methodID\r
- char * sig = 0;\r
- int argoff = $min_args;\r
- CODE:\r
- {\r
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);\r
- RETVAL = (*env)->CallNonvirtualIntMethodA(env, obj,clazz,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jint\r
-CallNonvirtualIntMethodA(obj,clazz,methodID,args)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jclass clazz\r
- jmethodID methodID\r
- char * sig = 0;\r
- jvalue * args\r
- CODE:\r
- {\r
- RETVAL = (*env)->CallNonvirtualIntMethodA(env, obj,clazz,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jlong\r
-CallNonvirtualLongMethod(obj,clazz,methodID,...)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jclass clazz\r
- jmethodID methodID\r
- char * sig = 0;\r
- int argoff = $min_args;\r
- CODE:\r
- {\r
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);\r
- RETVAL = (*env)->CallNonvirtualLongMethodA(env, obj,clazz,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jlong\r
-CallNonvirtualLongMethodA(obj,clazz,methodID,args)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jclass clazz\r
- jmethodID methodID\r
- char * sig = 0;\r
- jvalue * args\r
- CODE:\r
- {\r
- RETVAL = (*env)->CallNonvirtualLongMethodA(env, obj,clazz,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jfloat\r
-CallNonvirtualFloatMethod(obj,clazz,methodID,...)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jclass clazz\r
- jmethodID methodID\r
- char * sig = 0;\r
- int argoff = $min_args;\r
- CODE:\r
- {\r
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);\r
- RETVAL = (*env)->CallNonvirtualFloatMethodA(env, obj,clazz,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jfloat\r
-CallNonvirtualFloatMethodA(obj,clazz,methodID,args)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jclass clazz\r
- jmethodID methodID\r
- char * sig = 0;\r
- jvalue * args\r
- CODE:\r
- {\r
- RETVAL = (*env)->CallNonvirtualFloatMethodA(env, obj,clazz,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jdouble\r
-CallNonvirtualDoubleMethod(obj,clazz,methodID,...)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jclass clazz\r
- jmethodID methodID\r
- char * sig = 0;\r
- int argoff = $min_args;\r
- CODE:\r
- {\r
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);\r
- RETVAL = (*env)->CallNonvirtualDoubleMethodA(env, obj,clazz,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jdouble\r
-CallNonvirtualDoubleMethodA(obj,clazz,methodID,args)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jclass clazz\r
- jmethodID methodID\r
- char * sig = 0;\r
- jvalue * args\r
- CODE:\r
- {\r
- RETVAL = (*env)->CallNonvirtualDoubleMethodA(env, obj,clazz,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-void\r
-CallNonvirtualVoidMethod(obj,clazz,methodID,...)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jclass clazz\r
- jmethodID methodID\r
- char * sig = 0;\r
- int argoff = $min_args;\r
- CODE:\r
- {\r
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);\r
- (*env)->CallNonvirtualVoidMethodA(env, obj,clazz,methodID,args);\r
- RESTOREENV;\r
- }\r
-\r
-void\r
-CallNonvirtualVoidMethodA(obj,clazz,methodID,args)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jclass clazz\r
- jmethodID methodID\r
- char * sig = 0;\r
- jvalue * args\r
- CODE:\r
- {\r
- (*env)->CallNonvirtualVoidMethodA(env, obj,clazz,methodID,args);\r
- RESTOREENV;\r
- }\r
-\r
-jfieldID\r
-GetFieldID(clazz,name,sig)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- const char * name\r
- const char * sig\r
- CODE:\r
- {\r
- RETVAL = (*env)->GetFieldID(env, clazz,name,sig);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jobject\r
-GetObjectField(obj,fieldID)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jfieldID fieldID\r
- char * sig = 0;\r
- CODE:\r
- {\r
- RETVAL = (*env)->GetObjectField(env, obj,fieldID);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jboolean\r
-GetBooleanField(obj,fieldID)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jfieldID fieldID\r
- char * sig = 0;\r
- CODE:\r
- {\r
- RETVAL = (*env)->GetBooleanField(env, obj,fieldID);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jbyte\r
-GetByteField(obj,fieldID)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jfieldID fieldID\r
- char * sig = 0;\r
- CODE:\r
- {\r
- RETVAL = (*env)->GetByteField(env, obj,fieldID);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jchar\r
-GetCharField(obj,fieldID)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jfieldID fieldID\r
- char * sig = 0;\r
- CODE:\r
- {\r
- RETVAL = (*env)->GetCharField(env, obj,fieldID);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jshort\r
-GetShortField(obj,fieldID)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jfieldID fieldID\r
- char * sig = 0;\r
- CODE:\r
- {\r
- RETVAL = (*env)->GetShortField(env, obj,fieldID);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jint\r
-GetIntField(obj,fieldID)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jfieldID fieldID\r
- char * sig = 0;\r
- CODE:\r
- {\r
- RETVAL = (*env)->GetIntField(env, obj,fieldID);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jlong\r
-GetLongField(obj,fieldID)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jfieldID fieldID\r
- char * sig = 0;\r
- CODE:\r
- {\r
- RETVAL = (*env)->GetLongField(env, obj,fieldID);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jfloat\r
-GetFloatField(obj,fieldID)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jfieldID fieldID\r
- char * sig = 0;\r
- CODE:\r
- {\r
- RETVAL = (*env)->GetFloatField(env, obj,fieldID);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jdouble\r
-GetDoubleField(obj,fieldID)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jfieldID fieldID\r
- char * sig = 0;\r
- CODE:\r
- {\r
- RETVAL = (*env)->GetDoubleField(env, obj,fieldID);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-void\r
-SetObjectField(obj,fieldID,val)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jfieldID fieldID\r
- char * sig = 0;\r
- jobject val\r
- CODE:\r
- {\r
- (*env)->SetObjectField(env, obj,fieldID,val);\r
- RESTOREENV;\r
- }\r
-\r
-void\r
-SetBooleanField(obj,fieldID,val)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jfieldID fieldID\r
- char * sig = 0;\r
- jboolean val\r
- CODE:\r
- {\r
- (*env)->SetBooleanField(env, obj,fieldID,val);\r
- RESTOREENV;\r
- }\r
-\r
-void\r
-SetByteField(obj,fieldID,val)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jfieldID fieldID\r
- char * sig = 0;\r
- jbyte val\r
- CODE:\r
- {\r
- (*env)->SetByteField(env, obj,fieldID,val);\r
- RESTOREENV;\r
- }\r
-\r
-void\r
-SetCharField(obj,fieldID,val)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jfieldID fieldID\r
- char * sig = 0;\r
- jchar val\r
- CODE:\r
- {\r
- (*env)->SetCharField(env, obj,fieldID,val);\r
- RESTOREENV;\r
- }\r
-\r
-void\r
-SetShortField(obj,fieldID,val)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jfieldID fieldID\r
- char * sig = 0;\r
- jshort val\r
- CODE:\r
- {\r
- (*env)->SetShortField(env, obj,fieldID,val);\r
- RESTOREENV;\r
- }\r
-\r
-void\r
-SetIntField(obj,fieldID,val)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jfieldID fieldID\r
- char * sig = 0;\r
- jint val\r
- CODE:\r
- {\r
- (*env)->SetIntField(env, obj,fieldID,val);\r
- RESTOREENV;\r
- }\r
-\r
-void\r
-SetLongField(obj,fieldID,val)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jfieldID fieldID\r
- char * sig = 0;\r
- jlong val\r
- CODE:\r
- {\r
- (*env)->SetLongField(env, obj,fieldID,val);\r
- RESTOREENV;\r
- }\r
-\r
-void\r
-SetFloatField(obj,fieldID,val)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jfieldID fieldID\r
- char * sig = 0;\r
- jfloat val\r
- CODE:\r
- {\r
- (*env)->SetFloatField(env, obj,fieldID,val);\r
- RESTOREENV;\r
- }\r
-\r
-void\r
-SetDoubleField(obj,fieldID,val)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- jfieldID fieldID\r
- char * sig = 0;\r
- jdouble val\r
- CODE:\r
- {\r
- (*env)->SetDoubleField(env, obj,fieldID,val);\r
- RESTOREENV;\r
- }\r
-\r
-jmethodID\r
-GetStaticMethodID(clazz,name,sig)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- const char * name\r
- const char * sig\r
- CODE:\r
- {\r
- RETVAL = (*env)->GetStaticMethodID(env, clazz,name,sig);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jobject\r
-CallStaticObjectMethod(clazz,methodID,...)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- jmethodID methodID\r
- char * sig = 0;\r
- int argoff = $min_args;\r
- CODE:\r
- {\r
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);\r
- RETVAL = (*env)->CallStaticObjectMethodA(env, clazz,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jobject\r
-CallStaticObjectMethodA(clazz,methodID,args)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- jmethodID methodID\r
- char * sig = 0;\r
- jvalue * args\r
- CODE:\r
- {\r
- RETVAL = (*env)->CallStaticObjectMethodA(env, clazz,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jboolean\r
-CallStaticBooleanMethod(clazz,methodID,...)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- jmethodID methodID\r
- char * sig = 0;\r
- int argoff = $min_args;\r
- CODE:\r
- {\r
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);\r
- RETVAL = (*env)->CallStaticBooleanMethodA(env, clazz,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jboolean\r
-CallStaticBooleanMethodA(clazz,methodID,args)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- jmethodID methodID\r
- char * sig = 0;\r
- jvalue * args\r
- CODE:\r
- {\r
- RETVAL = (*env)->CallStaticBooleanMethodA(env, clazz,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jbyte\r
-CallStaticByteMethod(clazz,methodID,...)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- jmethodID methodID\r
- char * sig = 0;\r
- int argoff = $min_args;\r
- CODE:\r
- {\r
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);\r
- RETVAL = (*env)->CallStaticByteMethodA(env, clazz,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jbyte\r
-CallStaticByteMethodA(clazz,methodID,args)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- jmethodID methodID\r
- char * sig = 0;\r
- jvalue * args\r
- CODE:\r
- {\r
- RETVAL = (*env)->CallStaticByteMethodA(env, clazz,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jchar\r
-CallStaticCharMethod(clazz,methodID,...)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- jmethodID methodID\r
- char * sig = 0;\r
- int argoff = $min_args;\r
- CODE:\r
- {\r
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);\r
- RETVAL = (*env)->CallStaticCharMethodA(env, clazz,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jchar\r
-CallStaticCharMethodA(clazz,methodID,args)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- jmethodID methodID\r
- char * sig = 0;\r
- jvalue * args\r
- CODE:\r
- {\r
- RETVAL = (*env)->CallStaticCharMethodA(env, clazz,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jshort\r
-CallStaticShortMethod(clazz,methodID,...)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- jmethodID methodID\r
- char * sig = 0;\r
- int argoff = $min_args;\r
- CODE:\r
- {\r
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);\r
- RETVAL = (*env)->CallStaticShortMethodA(env, clazz,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jshort\r
-CallStaticShortMethodA(clazz,methodID,args)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- jmethodID methodID\r
- char * sig = 0;\r
- jvalue * args\r
- CODE:\r
- {\r
- RETVAL = (*env)->CallStaticShortMethodA(env, clazz,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jint\r
-CallStaticIntMethod(clazz,methodID,...)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- jmethodID methodID\r
- char * sig = 0;\r
- int argoff = $min_args;\r
- CODE:\r
- {\r
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);\r
- RETVAL = (*env)->CallStaticIntMethodA(env, clazz,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jint\r
-CallStaticIntMethodA(clazz,methodID,args)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- jmethodID methodID\r
- char * sig = 0;\r
- jvalue * args\r
- CODE:\r
- {\r
- RETVAL = (*env)->CallStaticIntMethodA(env, clazz,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jlong\r
-CallStaticLongMethod(clazz,methodID,...)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- jmethodID methodID\r
- char * sig = 0;\r
- int argoff = $min_args;\r
- CODE:\r
- {\r
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);\r
- RETVAL = (*env)->CallStaticLongMethodA(env, clazz,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jlong\r
-CallStaticLongMethodA(clazz,methodID,args)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- jmethodID methodID\r
- char * sig = 0;\r
- jvalue * args\r
- CODE:\r
- {\r
- RETVAL = (*env)->CallStaticLongMethodA(env, clazz,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jfloat\r
-CallStaticFloatMethod(clazz,methodID,...)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- jmethodID methodID\r
- char * sig = 0;\r
- int argoff = $min_args;\r
- CODE:\r
- {\r
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);\r
- RETVAL = (*env)->CallStaticFloatMethodA(env, clazz,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jfloat\r
-CallStaticFloatMethodA(clazz,methodID,args)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- jmethodID methodID\r
- char * sig = 0;\r
- jvalue * args\r
- CODE:\r
- {\r
- RETVAL = (*env)->CallStaticFloatMethodA(env, clazz,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jdouble\r
-CallStaticDoubleMethod(clazz,methodID,...)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- jmethodID methodID\r
- char * sig = 0;\r
- int argoff = $min_args;\r
- CODE:\r
- {\r
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);\r
- RETVAL = (*env)->CallStaticDoubleMethodA(env, clazz,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jdouble\r
-CallStaticDoubleMethodA(clazz,methodID,args)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- jmethodID methodID\r
- char * sig = 0;\r
- jvalue * args\r
- CODE:\r
- {\r
- RETVAL = (*env)->CallStaticDoubleMethodA(env, clazz,methodID,args);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-void\r
-CallStaticVoidMethod(cls,methodID,...)\r
- JNIEnv * env = FETCHENV;\r
- jclass cls\r
- jmethodID methodID\r
- char * sig = 0;\r
- int argoff = $min_args;\r
- CODE:\r
- {\r
- jvalue * args = makeargs(sig, &ST(argoff), items - argoff);\r
- (*env)->CallStaticVoidMethodA(env, cls,methodID,args);\r
- RESTOREENV;\r
- }\r
-\r
-void\r
-CallStaticVoidMethodA(cls,methodID,args)\r
- JNIEnv * env = FETCHENV;\r
- jclass cls\r
- jmethodID methodID\r
- char * sig = 0;\r
- jvalue * args\r
- CODE:\r
- {\r
- (*env)->CallStaticVoidMethodA(env, cls,methodID,args);\r
- RESTOREENV;\r
- }\r
-\r
-jfieldID\r
-GetStaticFieldID(clazz,name,sig)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- const char * name\r
- const char * sig\r
- CODE:\r
- {\r
- RETVAL = (*env)->GetStaticFieldID(env, clazz,name,sig);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jobject\r
-GetStaticObjectField(clazz,fieldID)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- jfieldID fieldID\r
- char * sig = 0;\r
- CODE:\r
- {\r
- RETVAL = (*env)->GetStaticObjectField(env, clazz,fieldID);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jboolean\r
-GetStaticBooleanField(clazz,fieldID)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- jfieldID fieldID\r
- char * sig = 0;\r
- CODE:\r
- {\r
- RETVAL = (*env)->GetStaticBooleanField(env, clazz,fieldID);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jbyte\r
-GetStaticByteField(clazz,fieldID)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- jfieldID fieldID\r
- char * sig = 0;\r
- CODE:\r
- {\r
- RETVAL = (*env)->GetStaticByteField(env, clazz,fieldID);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jchar\r
-GetStaticCharField(clazz,fieldID)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- jfieldID fieldID\r
- char * sig = 0;\r
- CODE:\r
- {\r
- RETVAL = (*env)->GetStaticCharField(env, clazz,fieldID);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jshort\r
-GetStaticShortField(clazz,fieldID)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- jfieldID fieldID\r
- char * sig = 0;\r
- CODE:\r
- {\r
- RETVAL = (*env)->GetStaticShortField(env, clazz,fieldID);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jint\r
-GetStaticIntField(clazz,fieldID)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- jfieldID fieldID\r
- char * sig = 0;\r
- CODE:\r
- {\r
- RETVAL = (*env)->GetStaticIntField(env, clazz,fieldID);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jlong\r
-GetStaticLongField(clazz,fieldID)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- jfieldID fieldID\r
- char * sig = 0;\r
- CODE:\r
- {\r
- RETVAL = (*env)->GetStaticLongField(env, clazz,fieldID);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jfloat\r
-GetStaticFloatField(clazz,fieldID)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- jfieldID fieldID\r
- char * sig = 0;\r
- CODE:\r
- {\r
- RETVAL = (*env)->GetStaticFloatField(env, clazz,fieldID);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jdouble\r
-GetStaticDoubleField(clazz,fieldID)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- jfieldID fieldID\r
- char * sig = 0;\r
- CODE:\r
- {\r
- RETVAL = (*env)->GetStaticDoubleField(env, clazz,fieldID);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-void\r
-SetStaticObjectField(clazz,fieldID,value)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- jfieldID fieldID\r
- char * sig = 0;\r
- jobject value\r
- CODE:\r
- {\r
- (*env)->SetStaticObjectField(env, clazz,fieldID,value);\r
- RESTOREENV;\r
- }\r
-\r
-void\r
-SetStaticBooleanField(clazz,fieldID,value)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- jfieldID fieldID\r
- char * sig = 0;\r
- jboolean value\r
- CODE:\r
- {\r
- (*env)->SetStaticBooleanField(env, clazz,fieldID,value);\r
- RESTOREENV;\r
- }\r
-\r
-void\r
-SetStaticByteField(clazz,fieldID,value)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- jfieldID fieldID\r
- char * sig = 0;\r
- jbyte value\r
- CODE:\r
- {\r
- (*env)->SetStaticByteField(env, clazz,fieldID,value);\r
- RESTOREENV;\r
- }\r
-\r
-void\r
-SetStaticCharField(clazz,fieldID,value)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- jfieldID fieldID\r
- char * sig = 0;\r
- jchar value\r
- CODE:\r
- {\r
- (*env)->SetStaticCharField(env, clazz,fieldID,value);\r
- RESTOREENV;\r
- }\r
-\r
-void\r
-SetStaticShortField(clazz,fieldID,value)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- jfieldID fieldID\r
- char * sig = 0;\r
- jshort value\r
- CODE:\r
- {\r
- (*env)->SetStaticShortField(env, clazz,fieldID,value);\r
- RESTOREENV;\r
- }\r
-\r
-void\r
-SetStaticIntField(clazz,fieldID,value)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- jfieldID fieldID\r
- char * sig = 0;\r
- jint value\r
- CODE:\r
- {\r
- (*env)->SetStaticIntField(env, clazz,fieldID,value);\r
- RESTOREENV;\r
- }\r
-\r
-void\r
-SetStaticLongField(clazz,fieldID,value)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- jfieldID fieldID\r
- char * sig = 0;\r
- jlong value\r
- CODE:\r
- {\r
- (*env)->SetStaticLongField(env, clazz,fieldID,value);\r
- RESTOREENV;\r
- }\r
-\r
-void\r
-SetStaticFloatField(clazz,fieldID,value)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- jfieldID fieldID\r
- char * sig = 0;\r
- jfloat value\r
- CODE:\r
- {\r
- (*env)->SetStaticFloatField(env, clazz,fieldID,value);\r
- RESTOREENV;\r
- }\r
-\r
-void\r
-SetStaticDoubleField(clazz,fieldID,value)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- jfieldID fieldID\r
- char * sig = 0;\r
- jdouble value\r
- CODE:\r
- {\r
- (*env)->SetStaticDoubleField(env, clazz,fieldID,value);\r
- RESTOREENV;\r
- }\r
-\r
-jstring\r
-NewString(unicode)\r
- JNIEnv * env = FETCHENV;\r
- STRLEN tmplen = NO_INIT;\r
- jsize unicode_len_ = NO_INIT;\r
- const jchar * unicode\r
- CODE:\r
- {\r
- RETVAL = (*env)->NewString(env, unicode, unicode_len_);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jsize\r
-GetStringLength(str)\r
- JNIEnv * env = FETCHENV;\r
- jstring str\r
- CODE:\r
- {\r
- RETVAL = (*env)->GetStringLength(env, str);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-const jchar *\r
-GetStringChars(str)\r
- JNIEnv * env = FETCHENV;\r
- jstring str\r
- jboolean isCopy = NO_INIT;\r
- jsize RETVAL_len_ = NO_INIT;\r
- CODE:\r
- {\r
- RETVAL = (*env)->GetStringChars(env, str,&isCopy);\r
- RETVAL_len_ = (*env)->GetStringLength(env, str);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
- CLEANUP:\r
- (*env)->ReleaseStringChars(env, str,RETVAL);\r
-\r
-jstring\r
-NewStringUTF(utf)\r
- JNIEnv * env = FETCHENV;\r
- const char * utf\r
- CODE:\r
- {\r
- RETVAL = (*env)->NewStringUTF(env, utf);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jsize\r
-GetStringUTFLength(str)\r
- JNIEnv * env = FETCHENV;\r
- jstring str\r
- CODE:\r
- {\r
- RETVAL = (*env)->GetStringUTFLength(env, str);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-const char *\r
-GetStringUTFChars(str)\r
- JNIEnv * env = FETCHENV;\r
- jstring str\r
- jboolean isCopy = NO_INIT;\r
- CODE:\r
- {\r
- RETVAL = (*env)->GetStringUTFChars(env, str,&isCopy);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
- CLEANUP:\r
- (*env)->ReleaseStringUTFChars(env, str, RETVAL);\r
-\r
-\r
-jsize\r
-GetArrayLength(array)\r
- JNIEnv * env = FETCHENV;\r
- jarray array\r
- CODE:\r
- {\r
- RETVAL = (*env)->GetArrayLength(env, array);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jobjectArray\r
-NewObjectArray(len,clazz,init)\r
- JNIEnv * env = FETCHENV;\r
- jsize len\r
- jclass clazz\r
- jobject init\r
- CODE:\r
- {\r
- RETVAL = (*env)->NewObjectArray(env, len,clazz,init);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jobject\r
-GetObjectArrayElement(array,index)\r
- JNIEnv * env = FETCHENV;\r
- jobjectArray array\r
- jsize index\r
- CODE:\r
- {\r
- RETVAL = (*env)->GetObjectArrayElement(env, array,index);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-void\r
-SetObjectArrayElement(array,index,val)\r
- JNIEnv * env = FETCHENV;\r
- jobjectArray array\r
- jsize index\r
- jobject val\r
- CODE:\r
- {\r
- (*env)->SetObjectArrayElement(env, array,index,val);\r
- RESTOREENV;\r
- }\r
-\r
-jbooleanArray\r
-NewBooleanArray(len)\r
- JNIEnv * env = FETCHENV;\r
- jsize len\r
- CODE:\r
- {\r
- RETVAL = (*env)->NewBooleanArray(env, len);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jbyteArray\r
-NewByteArray(len)\r
- JNIEnv * env = FETCHENV;\r
- jsize len\r
- CODE:\r
- {\r
- RETVAL = (*env)->NewByteArray(env, len);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jcharArray\r
-NewCharArray(len)\r
- JNIEnv * env = FETCHENV;\r
- jsize len\r
- CODE:\r
- {\r
- RETVAL = (*env)->NewCharArray(env, len);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jshortArray\r
-NewShortArray(len)\r
- JNIEnv * env = FETCHENV;\r
- jsize len\r
- CODE:\r
- {\r
- RETVAL = (*env)->NewShortArray(env, len);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jintArray\r
-NewIntArray(len)\r
- JNIEnv * env = FETCHENV;\r
- jsize len\r
- CODE:\r
- {\r
- RETVAL = (*env)->NewIntArray(env, len);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jlongArray\r
-NewLongArray(len)\r
- JNIEnv * env = FETCHENV;\r
- jsize len\r
- CODE:\r
- {\r
- RETVAL = (*env)->NewLongArray(env, len);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jfloatArray\r
-NewFloatArray(len)\r
- JNIEnv * env = FETCHENV;\r
- jsize len\r
- CODE:\r
- {\r
- RETVAL = (*env)->NewFloatArray(env, len);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jdoubleArray\r
-NewDoubleArray(len)\r
- JNIEnv * env = FETCHENV;\r
- jsize len\r
- CODE:\r
- {\r
- RETVAL = (*env)->NewDoubleArray(env, len);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-jboolean *\r
-GetBooleanArrayElements(array)\r
- JNIEnv * env = FETCHENV;\r
- jsize RETVAL_len_ = NO_INIT;\r
- jbooleanArray array\r
- jboolean isCopy = NO_INIT;\r
- PPCODE:\r
- {\r
- RETVAL = (*env)->GetBooleanArrayElements(env, array,&isCopy);\r
- RETVAL_len_ = (*env)->GetArrayLength(env, array);\r
- if (GIMME == G_ARRAY) {\r
- int i;\r
- jboolean* r = RETVAL;\r
- EXTEND(sp, RETVAL_len_);\r
- for (i = RETVAL_len_; i; --i) {\r
- PUSHs(sv_2mortal(newSViv(*r++)));\r
- }\r
- }\r
- else {\r
- if (RETVAL_len_) {\r
- PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,\r
- (STRLEN)RETVAL_len_ * sizeof(jboolean))));\r
- }\r
- else\r
- PUSHs(&PL_sv_no);\r
- }\r
- (*env)->ReleaseBooleanArrayElements(env, array,RETVAL,JNI_ABORT);\r
- RESTOREENV;\r
- }\r
-\r
-jbyte *\r
-GetByteArrayElements(array)\r
- JNIEnv * env = FETCHENV;\r
- jsize RETVAL_len_ = NO_INIT;\r
- jbyteArray array\r
- jboolean isCopy = NO_INIT;\r
- PPCODE:\r
- {\r
- RETVAL = (*env)->GetByteArrayElements(env, array,&isCopy);\r
- RETVAL_len_ = (*env)->GetArrayLength(env, array);\r
- if (GIMME == G_ARRAY) {\r
- int i;\r
- jbyte* r = RETVAL;\r
- EXTEND(sp, RETVAL_len_);\r
- for (i = RETVAL_len_; i; --i) {\r
- PUSHs(sv_2mortal(newSViv(*r++)));\r
- }\r
- }\r
- else {\r
- if (RETVAL_len_) {\r
- PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,\r
- (STRLEN)RETVAL_len_ * sizeof(jbyte))));\r
- }\r
- else\r
- PUSHs(&PL_sv_no);\r
- }\r
- (*env)->ReleaseByteArrayElements(env, array,RETVAL,JNI_ABORT);\r
- RESTOREENV;\r
- }\r
-\r
-jchar *\r
-GetCharArrayElements(array)\r
- JNIEnv * env = FETCHENV;\r
- jsize RETVAL_len_ = NO_INIT;\r
- jcharArray array\r
- jboolean isCopy = NO_INIT;\r
- PPCODE:\r
- {\r
- RETVAL = (*env)->GetCharArrayElements(env, array,&isCopy);\r
- RETVAL_len_ = (*env)->GetArrayLength(env, array);\r
- if (GIMME == G_ARRAY) {\r
- int i;\r
- jchar* r = RETVAL;\r
- EXTEND(sp, RETVAL_len_);\r
- for (i = RETVAL_len_; i; --i) {\r
- PUSHs(sv_2mortal(newSViv(*r++)));\r
- }\r
- }\r
- else {\r
- if (RETVAL_len_) {\r
- PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,\r
- (STRLEN)RETVAL_len_ * sizeof(jchar))));\r
- }\r
- else\r
- PUSHs(&PL_sv_no);\r
- }\r
- (*env)->ReleaseCharArrayElements(env, array,RETVAL,JNI_ABORT);\r
- RESTOREENV;\r
- }\r
-\r
-jshort *\r
-GetShortArrayElements(array)\r
- JNIEnv * env = FETCHENV;\r
- jsize RETVAL_len_ = NO_INIT;\r
- jshortArray array\r
- jboolean isCopy = NO_INIT;\r
- PPCODE:\r
- {\r
- RETVAL = (*env)->GetShortArrayElements(env, array,&isCopy);\r
- RETVAL_len_ = (*env)->GetArrayLength(env, array);\r
- if (GIMME == G_ARRAY) {\r
- int i;\r
- jshort* r = RETVAL;\r
- EXTEND(sp, RETVAL_len_);\r
- for (i = RETVAL_len_; i; --i) {\r
- PUSHs(sv_2mortal(newSViv(*r++)));\r
- }\r
- }\r
- else {\r
- if (RETVAL_len_) {\r
- PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,\r
- (STRLEN)RETVAL_len_ * sizeof(jshort))));\r
- }\r
- else\r
- PUSHs(&PL_sv_no);\r
- }\r
- (*env)->ReleaseShortArrayElements(env, array,RETVAL,JNI_ABORT);\r
- RESTOREENV;\r
- }\r
-\r
-jint *\r
-GetIntArrayElements(array)\r
- JNIEnv * env = FETCHENV;\r
- jsize RETVAL_len_ = NO_INIT;\r
- jintArray array\r
- jboolean isCopy = NO_INIT;\r
- PPCODE:\r
- {\r
- RETVAL = (*env)->GetIntArrayElements(env, array,&isCopy);\r
- RETVAL_len_ = (*env)->GetArrayLength(env, array);\r
- if (GIMME == G_ARRAY) {\r
- int i;\r
- jint* r = RETVAL;\r
- EXTEND(sp, RETVAL_len_);\r
- for (i = RETVAL_len_; i; --i) {\r
- PUSHs(sv_2mortal(newSViv(*r++)));\r
- }\r
- }\r
- else {\r
- if (RETVAL_len_) {\r
- PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,\r
- (STRLEN)RETVAL_len_ * sizeof(jint))));\r
- }\r
- else\r
- PUSHs(&PL_sv_no);\r
- }\r
- (*env)->ReleaseIntArrayElements(env, array,RETVAL,JNI_ABORT);\r
- RESTOREENV;\r
- }\r
-\r
-jlong *\r
-GetLongArrayElements(array)\r
- JNIEnv * env = FETCHENV;\r
- jsize RETVAL_len_ = NO_INIT;\r
- jlongArray array\r
- jboolean isCopy = NO_INIT;\r
- PPCODE:\r
- {\r
- RETVAL = (*env)->GetLongArrayElements(env, array,&isCopy);\r
- RETVAL_len_ = (*env)->GetArrayLength(env, array);\r
- if (GIMME == G_ARRAY) {\r
- int i;\r
- jlong* r = RETVAL;\r
- EXTEND(sp, RETVAL_len_);\r
- for (i = RETVAL_len_; i; --i) {\r
- PUSHs(sv_2mortal(newSViv(*r++)));\r
- }\r
- }\r
- else {\r
- if (RETVAL_len_) {\r
- PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,\r
- (STRLEN)RETVAL_len_ * sizeof(jlong))));\r
- }\r
- else\r
- PUSHs(&PL_sv_no);\r
- }\r
- (*env)->ReleaseLongArrayElements(env, array,RETVAL,JNI_ABORT);\r
- RESTOREENV;\r
- }\r
-\r
-jfloat *\r
-GetFloatArrayElements(array)\r
- JNIEnv * env = FETCHENV;\r
- jsize RETVAL_len_ = NO_INIT;\r
- jfloatArray array\r
- jboolean isCopy = NO_INIT;\r
- PPCODE:\r
- {\r
- RETVAL = (*env)->GetFloatArrayElements(env, array,&isCopy);\r
- RETVAL_len_ = (*env)->GetArrayLength(env, array);\r
- if (GIMME == G_ARRAY) {\r
- int i;\r
- jfloat* r = RETVAL;\r
- EXTEND(sp, RETVAL_len_);\r
- for (i = RETVAL_len_; i; --i) {\r
- PUSHs(sv_2mortal(newSVnv(*r++)));\r
- }\r
- }\r
- else {\r
- if (RETVAL_len_) {\r
- PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,\r
- (STRLEN)RETVAL_len_ * sizeof(jfloat))));\r
- }\r
- else\r
- PUSHs(&PL_sv_no);\r
- }\r
- (*env)->ReleaseFloatArrayElements(env, array,RETVAL,JNI_ABORT);\r
- RESTOREENV;\r
- }\r
-\r
-jdouble *\r
-GetDoubleArrayElements(array)\r
- JNIEnv * env = FETCHENV;\r
- jsize RETVAL_len_ = NO_INIT;\r
- jdoubleArray array\r
- jboolean isCopy = NO_INIT;\r
- PPCODE:\r
- {\r
- RETVAL = (*env)->GetDoubleArrayElements(env, array,&isCopy);\r
- RETVAL_len_ = (*env)->GetArrayLength(env, array);\r
- if (GIMME == G_ARRAY) {\r
- int i;\r
- jdouble* r = RETVAL;\r
- EXTEND(sp, RETVAL_len_);\r
- for (i = RETVAL_len_; i; --i) {\r
- PUSHs(sv_2mortal(newSVnv(*r++)));\r
- }\r
- }\r
- else {\r
- if (RETVAL_len_) {\r
- PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,\r
- (STRLEN)RETVAL_len_ * sizeof(jdouble))));\r
- }\r
- else\r
- PUSHs(&PL_sv_no);\r
- }\r
- (*env)->ReleaseDoubleArrayElements(env, array,RETVAL,JNI_ABORT);\r
- RESTOREENV;\r
- }\r
-\r
-void\r
-GetBooleanArrayRegion(array,start,len,buf)\r
- JNIEnv * env = FETCHENV;\r
- jbooleanArray array\r
- jsize start\r
- jsize len\r
- STRLEN tmplen = len * sizeof(jboolean) + 1;\r
- char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);\r
- jboolean * buf = (jboolean*)sv_grow(ST(3),len * sizeof(jboolean)+1);\r
- CODE:\r
- {\r
- (*env)->GetBooleanArrayRegion(env, array,start,len,buf);\r
- SvCUR_set(ST(3), len * sizeof(jboolean));\r
- *SvEND(ST(3)) = '\0';\r
- RESTOREENV;\r
- }\r
-\r
-void\r
-GetByteArrayRegion(array,start,len,buf)\r
- JNIEnv * env = FETCHENV;\r
- jbyteArray array\r
- jsize start\r
- jsize len\r
- STRLEN tmplen = len * sizeof(jboolean) + 1;\r
- char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);\r
- jbyte * buf = (jbyte*)sv_grow(ST(3),len * sizeof(jbyte)+1);\r
- CODE:\r
- {\r
- (*env)->GetByteArrayRegion(env, array,start,len,buf);\r
- SvCUR_set(ST(3), len * sizeof(jbyte));\r
- *SvEND(ST(3)) = '\0';\r
- RESTOREENV;\r
- }\r
-\r
-void\r
-GetCharArrayRegion(array,start,len,buf)\r
- JNIEnv * env = FETCHENV;\r
- jcharArray array\r
- jsize start\r
- jsize len\r
- STRLEN tmplen = len * sizeof(jboolean) + 1;\r
- char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);\r
- jchar * buf = (jchar*)sv_grow(ST(3),len * sizeof(jchar)+1);\r
- CODE:\r
- {\r
- (*env)->GetCharArrayRegion(env, array,start,len,buf);\r
- SvCUR_set(ST(3), len * sizeof(jchar));\r
- *SvEND(ST(3)) = '\0';\r
- RESTOREENV;\r
- }\r
-\r
-void\r
-GetShortArrayRegion(array,start,len,buf)\r
- JNIEnv * env = FETCHENV;\r
- jshortArray array\r
- jsize start\r
- jsize len\r
- STRLEN tmplen = len * sizeof(jboolean) + 1;\r
- char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);\r
- jshort * buf = (jshort*)sv_grow(ST(3),len * sizeof(jshort)+1);\r
- CODE:\r
- {\r
- (*env)->GetShortArrayRegion(env, array,start,len,buf);\r
- SvCUR_set(ST(3), len * sizeof(jshort));\r
- *SvEND(ST(3)) = '\0';\r
- RESTOREENV;\r
- }\r
-\r
-void\r
-GetIntArrayRegion(array,start,len,buf)\r
- JNIEnv * env = FETCHENV;\r
- jintArray array\r
- jsize start\r
- jsize len\r
- STRLEN tmplen = len * sizeof(jboolean) + 1;\r
- char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);\r
- jint * buf = (jint*)sv_grow(ST(3),len * sizeof(jint)+1);\r
- CODE:\r
- {\r
- (*env)->GetIntArrayRegion(env, array,start,len,buf);\r
- SvCUR_set(ST(3), len * sizeof(jint));\r
- *SvEND(ST(3)) = '\0';\r
- RESTOREENV;\r
- }\r
-\r
-void\r
-GetLongArrayRegion(array,start,len,buf)\r
- JNIEnv * env = FETCHENV;\r
- jlongArray array\r
- jsize start\r
- jsize len\r
- STRLEN tmplen = len * sizeof(jboolean) + 1;\r
- char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);\r
- jlong * buf = (jlong*)sv_grow(ST(3),len * sizeof(jlong)+1);\r
- CODE:\r
- {\r
- (*env)->GetLongArrayRegion(env, array,start,len,buf);\r
- SvCUR_set(ST(3), len * sizeof(jlong));\r
- *SvEND(ST(3)) = '\0';\r
- RESTOREENV;\r
- }\r
-\r
-void\r
-GetFloatArrayRegion(array,start,len,buf)\r
- JNIEnv * env = FETCHENV;\r
- jfloatArray array\r
- jsize start\r
- jsize len\r
- STRLEN tmplen = len * sizeof(jboolean) + 1;\r
- char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);\r
- jfloat * buf = (jfloat*)sv_grow(ST(3),len * sizeof(jfloat)+1);\r
- CODE:\r
- {\r
- (*env)->GetFloatArrayRegion(env, array,start,len,buf);\r
- SvCUR_set(ST(3), len * sizeof(jfloat));\r
- *SvEND(ST(3)) = '\0';\r
- RESTOREENV;\r
- }\r
-\r
-void\r
-GetDoubleArrayRegion(array,start,len,buf)\r
- JNIEnv * env = FETCHENV;\r
- jdoubleArray array\r
- jsize start\r
- jsize len\r
- STRLEN tmplen = len * sizeof(jboolean) + 1;\r
- char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);\r
- jdouble * buf = (jdouble*)sv_grow(ST(3),len * sizeof(jdouble)+1);\r
- CODE:\r
- {\r
- (*env)->GetDoubleArrayRegion(env, array,start,len,buf);\r
- SvCUR_set(ST(3), len * sizeof(jdouble));\r
- *SvEND(ST(3)) = '\0';\r
- RESTOREENV;\r
- }\r
-\r
-void\r
-SetBooleanArrayRegion(array,start,len,buf)\r
- JNIEnv * env = FETCHENV;\r
- STRLEN tmplen = NO_INIT;\r
- jbooleanArray array\r
- jsize start\r
- jsize len\r
- jsize buf_len_ = NO_INIT;\r
- jboolean * buf\r
- CODE:\r
- {\r
- if (buf_len_ < len)\r
- croak("string is too short");\r
- else if (buf_len_ > len && PL_dowarn)\r
- warn("string is too long");\r
- (*env)->SetBooleanArrayRegion(env, array,start,len,buf);\r
- RESTOREENV;\r
- }\r
-\r
-void\r
-SetByteArrayRegion(array,start,len,buf)\r
- JNIEnv * env = FETCHENV;\r
- STRLEN tmplen = NO_INIT;\r
- jbyteArray array\r
- jsize start\r
- jsize len\r
- jsize buf_len_ = NO_INIT;\r
- jbyte * buf\r
- CODE:\r
- {\r
- if (buf_len_ < len)\r
- croak("string is too short");\r
- else if (buf_len_ > len && PL_dowarn)\r
- warn("string is too long");\r
- (*env)->SetByteArrayRegion(env, array,start,len,buf);\r
- RESTOREENV;\r
- }\r
-\r
-void\r
-SetCharArrayRegion(array,start,len,buf)\r
- JNIEnv * env = FETCHENV;\r
- STRLEN tmplen = NO_INIT;\r
- jcharArray array\r
- jsize start\r
- jsize len\r
- jsize buf_len_ = NO_INIT;\r
- jchar * buf\r
- CODE:\r
- {\r
- if (buf_len_ < len)\r
- croak("string is too short");\r
- else if (buf_len_ > len && PL_dowarn)\r
- warn("string is too long");\r
- (*env)->SetCharArrayRegion(env, array,start,len,buf);\r
- RESTOREENV;\r
- }\r
-\r
-void\r
-SetShortArrayRegion(array,start,len,buf)\r
- JNIEnv * env = FETCHENV;\r
- STRLEN tmplen = NO_INIT;\r
- jshortArray array\r
- jsize start\r
- jsize len\r
- jsize buf_len_ = NO_INIT;\r
- jshort * buf\r
- CODE:\r
- {\r
- if (buf_len_ < len)\r
- croak("string is too short");\r
- else if (buf_len_ > len && PL_dowarn)\r
- warn("string is too long");\r
- (*env)->SetShortArrayRegion(env, array,start,len,buf);\r
- RESTOREENV;\r
- }\r
-\r
-void\r
-SetIntArrayRegion(array,start,len,buf)\r
- JNIEnv * env = FETCHENV;\r
- STRLEN tmplen = NO_INIT;\r
- jintArray array\r
- jsize start\r
- jsize len\r
- jsize buf_len_ = NO_INIT;\r
- jint * buf\r
- CODE:\r
- {\r
- if (buf_len_ < len)\r
- croak("string is too short");\r
- else if (buf_len_ > len && PL_dowarn)\r
- warn("string is too long");\r
- (*env)->SetIntArrayRegion(env, array,start,len,buf);\r
- RESTOREENV;\r
- }\r
-\r
-void\r
-SetLongArrayRegion(array,start,len,buf)\r
- JNIEnv * env = FETCHENV;\r
- STRLEN tmplen = NO_INIT;\r
- jlongArray array\r
- jsize start\r
- jsize len\r
- jsize buf_len_ = NO_INIT;\r
- jlong * buf\r
- CODE:\r
- {\r
- if (buf_len_ < len)\r
- croak("string is too short");\r
- else if (buf_len_ > len && PL_dowarn)\r
- warn("string is too long");\r
- (*env)->SetLongArrayRegion(env, array,start,len,buf);\r
- RESTOREENV;\r
- }\r
-\r
-void\r
-SetFloatArrayRegion(array,start,len,buf)\r
- JNIEnv * env = FETCHENV;\r
- STRLEN tmplen = NO_INIT;\r
- jfloatArray array\r
- jsize start\r
- jsize len\r
- jsize buf_len_ = NO_INIT;\r
- jfloat * buf\r
- CODE:\r
- {\r
- if (buf_len_ < len)\r
- croak("string is too short");\r
- else if (buf_len_ > len && PL_dowarn)\r
- warn("string is too long");\r
- (*env)->SetFloatArrayRegion(env, array,start,len,buf);\r
- RESTOREENV;\r
- }\r
-\r
-void\r
-SetDoubleArrayRegion(array,start,len,buf)\r
- JNIEnv * env = FETCHENV;\r
- STRLEN tmplen = NO_INIT;\r
- jdoubleArray array\r
- jsize start\r
- jsize len\r
- jsize buf_len_ = NO_INIT;\r
- jdouble * buf\r
- CODE:\r
- {\r
- if (buf_len_ < len)\r
- croak("string is too short");\r
- else if (buf_len_ > len && PL_dowarn)\r
- warn("string is too long");\r
- (*env)->SetDoubleArrayRegion(env, array,start,len,buf);\r
- RESTOREENV;\r
- }\r
-\r
-SysRet\r
-RegisterNatives(clazz,methods,nMethods)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- JNINativeMethod * methods\r
- jint nMethods\r
- CODE:\r
- {\r
- RETVAL = (*env)->RegisterNatives(env, clazz,methods,nMethods);\r
- }\r
-\r
-SysRet\r
-UnregisterNatives(clazz)\r
- JNIEnv * env = FETCHENV;\r
- jclass clazz\r
- CODE:\r
- {\r
- RETVAL = (*env)->UnregisterNatives(env, clazz);\r
- }\r
- OUTPUT:\r
- RETVAL \r
- \r
-SysRet\r
-MonitorEnter(obj)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- CODE:\r
- {\r
- RETVAL = (*env)->MonitorEnter(env, obj);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-SysRet\r
-MonitorExit(obj)\r
- JNIEnv * env = FETCHENV;\r
- jobject obj\r
- CODE:\r
- {\r
- RETVAL = (*env)->MonitorExit(env, obj);\r
- RESTOREENV;\r
- }\r
- OUTPUT:\r
- RETVAL\r
-\r
-JavaVM *\r
-GetJavaVM(...)\r
- JNIEnv * env = FETCHENV;\r
- CODE:\r
- {\r
-#ifdef JPL_DEBUG\r
- jpldebug = 1;\r
-#else\r
- jpldebug = 0;\r
-#endif\r
- if (env) { /* We're embedded. */\r
- if ((*env)->GetJavaVM(env, &RETVAL) < 0)\r
- RETVAL = 0;\r
- }\r
- else { /* We're embedding. */\r
-#ifdef KAFFE\r
- JavaVMInitArgs vm_args;\r
-#else\r
- JDK1_1InitArgs vm_args;\r
-#endif\r
- char *lib;\r
- if (jpldebug) {\r
- fprintf(stderr, "We're embedding Java in Perl.\n");\r
- }\r
-\r
- if (items--) {\r
- ++mark;\r
- lib = SvPV(*mark, PL_na);\r
- }\r
- else\r
- lib = 0;\r
- if (jpldebug) {\r
- fprintf(stderr, "lib is %s.\n", lib);\r
- }\r
-#ifdef WIN32\r
- if (LoadLibrary("jvm.dll")) {\r
- if (!LoadLibrary("javai.dll")) {\r
- warn("Can't load javai.dll");\r
- }\r
- } else {\r
- if (lib && !LoadLibrary(lib))\r
- croak("Can't load javai.dll"); \r
- }\r
-#else\r
- if (jpldebug) {\r
- fprintf(stderr, "Opening Java shared library.\n");\r
- }\r
-#ifdef KAFFE\r
- if (!dlopen("libkaffevm.so", RTLD_LAZY|RTLD_GLOBAL)) {\r
-#else\r
- if (!dlopen("libjava.so", RTLD_LAZY|RTLD_GLOBAL)) {\r
-#endif\r
- if (lib && !dlopen(lib, RTLD_LAZY|RTLD_GLOBAL))\r
- croak("Can't load Java shared library.");\r
- }\r
-#endif\r
- /* Kaffe seems to get very upset if vm_args.version isn't set */\r
-#ifdef KAFFE\r
- vm_args.version = JNI_VERSION_1_1;\r
-#endif\r
- JNI_GetDefaultJavaVMInitArgs(&vm_args);\r
- vm_args.exit = &call_my_exit;\r
- if (jpldebug) {\r
- fprintf(stderr, "items = %d\n", items);\r
- fprintf(stderr, "mark = %s\n", SvPV(*mark, PL_na));\r
- }\r
- while (items > 1) {\r
- char *s;\r
- ++mark;\r
- s = SvPV(*mark,PL_na);\r
- ++mark;\r
- if (jpldebug) {\r
- fprintf(stderr, "*s = %s\n", s);\r
- fprintf(stderr, "val = %s\n", SvPV(*mark, PL_na));\r
- }\r
- items -= 2;\r
- if (strEQ(s, "checkSource"))\r
- vm_args.checkSource = (jint)SvIV(*mark);\r
- else if (strEQ(s, "nativeStackSize"))\r
- vm_args.nativeStackSize = (jint)SvIV(*mark);\r
- else if (strEQ(s, "javaStackSize"))\r
- vm_args.javaStackSize = (jint)SvIV(*mark);\r
- else if (strEQ(s, "minHeapSize"))\r
- vm_args.minHeapSize = (jint)SvIV(*mark);\r
- else if (strEQ(s, "maxHeapSize"))\r
- vm_args.maxHeapSize = (jint)SvIV(*mark);\r
- else if (strEQ(s, "verifyMode"))\r
- vm_args.verifyMode = (jint)SvIV(*mark);\r
- else if (strEQ(s, "classpath"))\r
- vm_args.classpath = savepv(SvPV(*mark,PL_na));\r
- else if (strEQ(s, "enableClassGC"))\r
- vm_args.enableClassGC = (jint)SvIV(*mark);\r
- else if (strEQ(s, "enableVerboseGC"))\r
- vm_args.enableVerboseGC = (jint)SvIV(*mark);\r
- else if (strEQ(s, "disableAsyncGC"))\r
- vm_args.disableAsyncGC = (jint)SvIV(*mark);\r
-#ifdef KAFFE\r
- else if (strEQ(s, "libraryhome"))\r
- vm_args.libraryhome = savepv(SvPV(*mark,PL_na));\r
- else if (strEQ(s, "classhome"))\r
- vm_args.classhome = savepv(SvPV(*mark,PL_na));\r
- else if (strEQ(s, "enableVerboseJIT"))\r
- vm_args.enableVerboseJIT = (jint)SvIV(*mark); \r
- else if (strEQ(s, "enableVerboseClassloading"))\r
- vm_args.enableVerboseClassloading = (jint)SvIV(*mark); \r
- else if (strEQ(s, "enableVerboseCall"))\r
- vm_args.enableVerboseCall = (jint)SvIV(*mark); \r
- else if (strEQ(s, "allocHeapSize"))\r
- vm_args.allocHeapSize = (jint)SvIV(*mark); \r
-#else\r
- else if (strEQ(s, "verbose"))\r
- vm_args.verbose = (jint)SvIV(*mark); \r
- else if (strEQ(s, "debugging"))\r
- vm_args.debugging = (jboolean)SvIV(*mark);\r
- else if (strEQ(s, "debugPort"))\r
- vm_args.debugPort = (jint)SvIV(*mark); \r
-#endif\r
- else\r
- croak("unrecognized option: %s", s);\r
- }\r
-\r
- if (jpldebug) {\r
- fprintf(stderr, "Creating Java VM...\n");\r
- fprintf(stderr, "Working CLASSPATH: %s\n", \r
- vm_args.classpath);\r
- }\r
- if (JNI_CreateJavaVM(&RETVAL, &jplcurenv, &vm_args) < 0) {\r
- croak("Unable to create instance of JVM");\r
- }\r
- if (jpldebug) {\r
- fprintf(stderr, "Created Java VM.\n");\r
- }\r
-\r
- }\r
- }\r
-\r
+/*
+ * Copyright 1997, O'Reilly & Associate, Inc.
+ *
+ * This package may be copied under the same terms as Perl itself.
+ */
+
+#include "EXTERN.h"
+#include "perl.h"
+#include "XSUB.h"
+
+#include <stdio.h>
+#include <jni.h>
+
+#ifndef PERL_VERSION
+# include <patchlevel.h>
+# define PERL_REVISION 5
+# define PERL_VERSION PATCHLEVEL
+# define PERL_SUBVERSION SUBVERSION
+#endif
+
+#if PERL_REVISION == 5 && (PERL_VERSION < 4 || (PERL_VERSION == 4 && PERL_SUBVERSION <= 75))
+# define PL_na na
+# define PL_sv_no sv_no
+# define PL_sv_undef sv_undef
+# define PL_dowarn dowarn
+#endif
+
+#ifndef newSVpvn
+# define newSVpvn(a,b) newSVpv(a,b)
+#endif
+
+#ifndef pTHX
+# define pTHX void
+# define pTHX_
+# define aTHX
+# define aTHX_
+# define dTHX extern int JNI___notused
+#endif
+
+#ifndef WIN32
+# include <dlfcn.h>
+#endif
+
+#ifdef EMBEDDEDPERL
+extern JNIEnv* jplcurenv;
+extern int jpldebug;
+#else
+JNIEnv* jplcurenv;
+int jpldebug = 1;
+#endif
+
+#define SysRet jint
+
+#ifdef WIN32
+static void JNICALL call_my_exit(jint status)
+{
+ my_exit(status);
+}
+#else
+static void call_my_exit(jint status)
+{
+ my_exit(status);
+}
+#endif
+
+jvalue*
+makeargs(char *sig, SV** svp, int items)
+{
+ jvalue* jv = (jvalue*)safemalloc(sizeof(jvalue) * items);
+ int ix = 0;
+ char *s = sig;
+ JNIEnv* env = jplcurenv;
+ char *start;
+ STRLEN n_a;
+
+ if (jpldebug)
+ fprintf(stderr, "sig = %s, items = %d\n", sig, items);
+ if (*s++ != '(')
+ goto cleanup;
+
+ while (items--) {
+ SV *sv = *svp++;
+ start = s;
+ switch (*s++) {
+ case 'Z':
+ jv[ix++].z = (jboolean)(SvIV(sv) != 0);
+ break;
+ case 'B':
+ jv[ix++].b = (jbyte)SvIV(sv);
+ break;
+ case 'C':
+ jv[ix++].c = (jchar)SvIV(sv);
+ break;
+ case 'S':
+ jv[ix++].s = (jshort)SvIV(sv);
+ break;
+ case 'I':
+ jv[ix++].i = (jint)SvIV(sv);
+ break;
+ case 'J':
+ jv[ix++].j = (jlong)SvNV(sv);
+ break;
+ case 'F':
+ jv[ix++].f = (jfloat)SvNV(sv);
+ break;
+ case 'D':
+ jv[ix++].d = (jdouble)SvNV(sv);
+ break;
+ case '[':
+ switch (*s++) {
+ case 'Z':
+ if (SvROK(sv)) {
+ SV* rv = (SV*)SvRV(sv);
+ if (SvOBJECT(rv))
+ jv[ix++].l = (jobject)(void*)SvIV(rv);
+ else if (SvTYPE(rv) == SVt_PVAV) {
+ jsize len = av_len((AV*)rv) + 1;
+ jboolean* buf = (jboolean*)malloc(len * sizeof(jboolean));
+ int i;
+ SV** esv;
+
+ jbooleanArray ja = (*env)->NewBooleanArray(env, len);
+ for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
+ buf[i] = (jboolean)SvIV(*esv);
+ (*env)->SetBooleanArrayRegion(env, ja, 0, len, buf);
+ free((void*)buf);
+ jv[ix++].l = (jobject)ja;
+ }
+ else
+ jv[ix++].l = (jobject)(void*)0;
+ }
+ else if (SvPOK(sv)) {
+ jsize len = sv_len(sv) / sizeof(jboolean);
+
+ jbooleanArray ja = (*env)->NewBooleanArray(env, len);
+ (*env)->SetBooleanArrayRegion(env, ja, 0, len, (jboolean*)SvPV(sv,n_a));
+ jv[ix++].l = (jobject)ja;
+ }
+ else
+ jv[ix++].l = (jobject)(void*)0;
+ break;
+ case 'B':
+ if (SvROK(sv)) {
+ SV* rv = (SV*)SvRV(sv);
+ if (SvOBJECT(rv))
+ jv[ix++].l = (jobject)(void*)SvIV(rv);
+ else if (SvTYPE(rv) == SVt_PVAV) {
+ jsize len = av_len((AV*)rv) + 1;
+ jbyte* buf = (jbyte*)malloc(len * sizeof(jbyte));
+ int i;
+ SV** esv;
+
+ jbyteArray ja = (*env)->NewByteArray(env, len);
+ for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
+ buf[i] = (jbyte)SvIV(*esv);
+ (*env)->SetByteArrayRegion(env, ja, 0, len, buf);
+ free((void*)buf);
+ jv[ix++].l = (jobject)ja;
+ }
+ else
+ jv[ix++].l = (jobject)(void*)0;
+ }
+ else if (SvPOK(sv)) {
+ jsize len = sv_len(sv) / sizeof(jbyte);
+
+ jbyteArray ja = (*env)->NewByteArray(env, len);
+ (*env)->SetByteArrayRegion(env, ja, 0, len, (jbyte*)SvPV(sv,n_a));
+ jv[ix++].l = (jobject)ja;
+ }
+ else
+ jv[ix++].l = (jobject)(void*)0;
+ break;
+ case 'C':
+ if (SvROK(sv)) {
+ SV* rv = (SV*)SvRV(sv);
+ if (SvOBJECT(rv))
+ jv[ix++].l = (jobject)(void*)SvIV(rv);
+ else if (SvTYPE(rv) == SVt_PVAV) {
+ jsize len = av_len((AV*)rv) + 1;
+ jchar* buf = (jchar*)malloc(len * sizeof(jchar));
+ int i;
+ SV** esv;
+
+ jcharArray ja = (*env)->NewCharArray(env, len);
+ for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
+ buf[i] = (jchar)SvIV(*esv);
+ (*env)->SetCharArrayRegion(env, ja, 0, len, buf);
+ free((void*)buf);
+ jv[ix++].l = (jobject)ja;
+ }
+ else
+ jv[ix++].l = (jobject)(void*)0;
+ }
+ else if (SvPOK(sv)) {
+ jsize len = sv_len(sv) / sizeof(jchar);
+
+ jcharArray ja = (*env)->NewCharArray(env, len);
+ (*env)->SetCharArrayRegion(env, ja, 0, len, (jchar*)SvPV(sv,n_a));
+ jv[ix++].l = (jobject)ja;
+ }
+ else
+ jv[ix++].l = (jobject)(void*)0;
+ break;
+ case 'S':
+ if (SvROK(sv)) {
+ SV* rv = (SV*)SvRV(sv);
+ if (SvOBJECT(rv))
+ jv[ix++].l = (jobject)(void*)SvIV(rv);
+ else if (SvTYPE(rv) == SVt_PVAV) {
+ jsize len = av_len((AV*)rv) + 1;
+ jshort* buf = (jshort*)malloc(len * sizeof(jshort));
+ int i;
+ SV** esv;
+
+ jshortArray ja = (*env)->NewShortArray(env, len);
+ for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
+ buf[i] = (jshort)SvIV(*esv);
+ (*env)->SetShortArrayRegion(env, ja, 0, len, buf);
+ free((void*)buf);
+ jv[ix++].l = (jobject)ja;
+ }
+ else
+ jv[ix++].l = (jobject)(void*)0;
+ }
+ else if (SvPOK(sv)) {
+ jsize len = sv_len(sv) / sizeof(jshort);
+
+ jshortArray ja = (*env)->NewShortArray(env, len);
+ (*env)->SetShortArrayRegion(env, ja, 0, len, (jshort*)SvPV(sv,n_a));
+ jv[ix++].l = (jobject)ja;
+ }
+ else
+ jv[ix++].l = (jobject)(void*)0;
+ break;
+ case 'I':
+ if (SvROK(sv)) {
+ SV* rv = (SV*)SvRV(sv);
+ if (SvOBJECT(rv))
+ jv[ix++].l = (jobject)(void*)SvIV(rv);
+ else if (SvTYPE(rv) == SVt_PVAV) {
+ jsize len = av_len((AV*)rv) + 1;
+ jint* buf = (jint*)malloc(len * sizeof(jint));
+ int i;
+ SV** esv;
+
+ jintArray ja = (*env)->NewIntArray(env, len);
+ for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
+ buf[i] = (jint)SvIV(*esv);
+ (*env)->SetIntArrayRegion(env, ja, 0, len, buf);
+ free((void*)buf);
+ jv[ix++].l = (jobject)ja;
+ }
+ else
+ jv[ix++].l = (jobject)(void*)0;
+ }
+ else if (SvPOK(sv)) {
+ jsize len = sv_len(sv) / sizeof(jint);
+
+ jintArray ja = (*env)->NewIntArray(env, len);
+ (*env)->SetIntArrayRegion(env, ja, 0, len, (jint*)SvPV(sv,n_a));
+ jv[ix++].l = (jobject)ja;
+ }
+ else
+ jv[ix++].l = (jobject)(void*)0;
+ break;
+ case 'J':
+ if (SvROK(sv)) {
+ SV* rv = (SV*)SvRV(sv);
+ if (SvOBJECT(rv))
+ jv[ix++].l = (jobject)(void*)SvIV(rv);
+ else if (SvTYPE(rv) == SVt_PVAV) {
+ jsize len = av_len((AV*)rv) + 1;
+ jlong* buf = (jlong*)malloc(len * sizeof(jlong));
+ int i;
+ SV** esv;
+
+ jlongArray ja = (*env)->NewLongArray(env, len);
+ for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
+ buf[i] = (jlong)SvNV(*esv);
+ (*env)->SetLongArrayRegion(env, ja, 0, len, buf);
+ free((void*)buf);
+ jv[ix++].l = (jobject)ja;
+ }
+ else
+ jv[ix++].l = (jobject)(void*)0;
+ }
+ else if (SvPOK(sv)) {
+ jsize len = sv_len(sv) / sizeof(jlong);
+
+ jlongArray ja = (*env)->NewLongArray(env, len);
+ (*env)->SetLongArrayRegion(env, ja, 0, len, (jlong*)SvPV(sv,n_a));
+ jv[ix++].l = (jobject)ja;
+ }
+ else
+ jv[ix++].l = (jobject)(void*)0;
+ break;
+ case 'F':
+ if (SvROK(sv)) {
+ SV* rv = (SV*)SvRV(sv);
+ if (SvOBJECT(rv))
+ jv[ix++].l = (jobject)(void*)SvIV(rv);
+ else if (SvTYPE(rv) == SVt_PVAV) {
+ jsize len = av_len((AV*)rv) + 1;
+ jfloat* buf = (jfloat*)malloc(len * sizeof(jfloat));
+ int i;
+ SV** esv;
+
+ jfloatArray ja = (*env)->NewFloatArray(env, len);
+ for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
+ buf[i] = (jfloat)SvNV(*esv);
+ (*env)->SetFloatArrayRegion(env, ja, 0, len, buf);
+ free((void*)buf);
+ jv[ix++].l = (jobject)ja;
+ }
+ else
+ jv[ix++].l = (jobject)(void*)0;
+ }
+ else if (SvPOK(sv)) {
+ jsize len = sv_len(sv) / sizeof(jfloat);
+
+ jfloatArray ja = (*env)->NewFloatArray(env, len);
+ (*env)->SetFloatArrayRegion(env, ja, 0, len, (jfloat*)SvPV(sv,n_a));
+ jv[ix++].l = (jobject)ja;
+ }
+ else
+ jv[ix++].l = (jobject)(void*)0;
+ break;
+ case 'D':
+ if (SvROK(sv)) {
+ SV* rv = (SV*)SvRV(sv);
+ if (SvOBJECT(rv))
+ jv[ix++].l = (jobject)(void*)SvIV(rv);
+ else if (SvTYPE(rv) == SVt_PVAV) {
+ jsize len = av_len((AV*)rv) + 1;
+ jdouble* buf = (jdouble*)malloc(len * sizeof(jdouble));
+ int i;
+ SV** esv;
+
+ jdoubleArray ja = (*env)->NewDoubleArray(env, len);
+ for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
+ buf[i] = (jdouble)SvNV(*esv);
+ (*env)->SetDoubleArrayRegion(env, ja, 0, len, buf);
+ free((void*)buf);
+ jv[ix++].l = (jobject)ja;
+ }
+ else
+ jv[ix++].l = (jobject)(void*)0;
+ }
+ else if (SvPOK(sv)) {
+ jsize len = sv_len(sv) / sizeof(jdouble);
+
+ jdoubleArray ja = (*env)->NewDoubleArray(env, len);
+ (*env)->SetDoubleArrayRegion(env, ja, 0, len, (jdouble*)SvPV(sv,n_a));
+ jv[ix++].l = (jobject)ja;
+ }
+ else
+ jv[ix++].l = (jobject)(void*)0;
+ break;
+ case 'L':
+ while (*s != ';') s++;
+ s++;
+ if (strnEQ(start, "[Ljava/lang/String;", 19)) {
+ if (SvROK(sv)) {
+ SV* rv = (SV*)SvRV(sv);
+ if (SvOBJECT(rv))
+ jv[ix++].l = (jobject)(void*)SvIV(rv);
+ else if (SvTYPE(rv) == SVt_PVAV) {
+ jsize len = av_len((AV*)rv) + 1;
+ int i;
+ SV** esv;
+ static jclass jcl = 0;
+ jobjectArray ja;
+
+ if (!jcl)
+ jcl = (*env)->FindClass(env, "java/lang/String");
+ ja = (*env)->NewObjectArray(env, len, jcl, 0);
+ for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) {
+ jobject str = (jobject)(*env)->NewStringUTF(env, SvPV(*esv,n_a));
+ (*env)->SetObjectArrayElement(env, ja, i, str);
+ }
+ jv[ix++].l = (jobject)ja;
+ }
+ else
+ jv[ix++].l = (jobject)(void*)0;
+ }
+ else
+ jv[ix++].l = (jobject)(void*)0;
+ break;
+ }
+ /* FALL THROUGH */
+ default:
+ if (SvROK(sv)) {
+ SV* rv = (SV*)SvRV(sv);
+ if (SvOBJECT(rv))
+ jv[ix++].l = (jobject)(void*)SvIV(rv);
+ else if (SvTYPE(rv) == SVt_PVAV) {
+ jsize len = av_len((AV*)rv) + 1;
+ int i;
+ SV** esv;
+ static jclass jcl = 0;
+ jobjectArray ja;
+
+ if (!jcl)
+ jcl = (*env)->FindClass(env, "java/lang/Object");
+ ja = (*env)->NewObjectArray(env, len, jcl, 0);
+ for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) {
+ if (SvROK(*esv) && (rv = SvRV(*esv)) && SvOBJECT(rv)) {
+ (*env)->SetObjectArrayElement(env, ja, i, (jobject)(void*)SvIV(rv));
+ }
+ else {
+ jobject str = (jobject)(*env)->NewStringUTF(env, SvPV(*esv,n_a));
+ (*env)->SetObjectArrayElement(env, ja, i, str);
+ }
+ }
+ jv[ix++].l = (jobject)ja;
+ }
+ else
+ jv[ix++].l = (jobject)(void*)0;
+ }
+ else
+ jv[ix++].l = (jobject)(void*)0;
+ break;
+ }
+ break;
+ case 'L':
+ if (!SvROK(sv) || strnEQ(s, "java/lang/String;", 17)) {
+ s += 17;
+ jv[ix++].l = (jobject)(*env)->NewStringUTF(env, (char*) SvPV(sv,n_a));
+ break;
+ }
+ while (*s != ';') s++;
+ s++;
+ if (SvROK(sv)) {
+ SV* rv = SvRV(sv);
+ jv[ix++].l = (jobject)(void*)SvIV(rv);
+ }
+ break;
+ case ')':
+ croak("too many arguments, signature: %s", sig);
+ goto cleanup;
+ default:
+ croak("panic: malformed signature: %s", s-1);
+ goto cleanup;
+ }
+
+ }
+ if (*s != ')') {
+ croak("not enough arguments, signature: %s", sig);
+ goto cleanup;
+ }
+ return jv;
+
+cleanup:
+ safefree((char*)jv);
+ return 0;
+}
+
+static int
+not_here(char *s)
+{
+ croak("%s not implemented on this architecture", s);
+ return -1;
+}
+
+static double
+constant(char *name, int arg)
+{
+ errno = 0;
+ switch (*name) {
+ case 'A':
+ break;
+ case 'B':
+ break;
+ case 'C':
+ break;
+ case 'D':
+ break;
+ case 'E':
+ break;
+ case 'F':
+ break;
+ case 'G':
+ break;
+ case 'H':
+ break;
+ case 'I':
+ break;
+ case 'J':
+ if (strEQ(name, "JNI_ABORT"))
+#ifdef JNI_ABORT
+ return JNI_ABORT;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "JNI_COMMIT"))
+#ifdef JNI_COMMIT
+ return JNI_COMMIT;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "JNI_ERR"))
+#ifdef JNI_ERR
+ return JNI_ERR;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "JNI_FALSE"))
+#ifdef JNI_FALSE
+ return JNI_FALSE;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "JNI_H"))
+#ifdef JNI_H
+#ifdef WIN32
+ return 1;
+#else
+ return JNI_H;
+#endif
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "JNI_OK"))
+#ifdef JNI_OK
+ return JNI_OK;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "JNI_TRUE"))
+#ifdef JNI_TRUE
+ return JNI_TRUE;
+#else
+ goto not_there;
+#endif
+ break;
+ case 'K':
+ break;
+ case 'L':
+ break;
+ case 'M':
+ break;
+ case 'N':
+ break;
+ case 'O':
+ break;
+ case 'P':
+ break;
+ case 'Q':
+ break;
+ case 'R':
+ break;
+ case 'S':
+ break;
+ case 'T':
+ break;
+ case 'U':
+ break;
+ case 'V':
+ break;
+ case 'W':
+ break;
+ case 'X':
+ break;
+ case 'Y':
+ break;
+ case 'Z':
+ break;
+ }
+ errno = EINVAL;
+ return 0;
+
+not_there:
+ errno = ENOENT;
+ return 0;
+}
+
+#define FETCHENV jplcurenv
+#define RESTOREENV jplcurenv = env
+
+MODULE = JNI PACKAGE = JNI
+
+PROTOTYPES: ENABLE
+
+double
+constant(name,arg)
+ char * name
+ int arg
+
+jint
+GetVersion()
+ JNIEnv * env = FETCHENV;
+ CODE:
+ {
+ RETVAL = (*env)->GetVersion(env);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jclass
+DefineClass(name, loader, buf)
+ JNIEnv * env = FETCHENV;
+ STRLEN tmplen = NO_INIT;
+ jsize buf_len_ = NO_INIT;
+ const char * name
+ jobject loader
+ const jbyte * buf
+ CODE:
+ {
+#ifdef KAFFE
+ RETVAL = (*env)->DefineClass(env, loader, buf, (jsize)buf_len_);
+#else
+ RETVAL = (*env)->DefineClass(env, name, loader, buf, (jsize)buf_len_);
+#endif
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jclass
+FindClass(name)
+ JNIEnv * env = FETCHENV;
+ const char * name
+ CODE:
+ {
+ RETVAL = (*env)->FindClass(env, name);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jclass
+GetSuperclass(sub)
+ JNIEnv * env = FETCHENV;
+ jclass sub
+ CODE:
+ {
+ RETVAL = (*env)->GetSuperclass(env, sub);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jboolean
+IsAssignableFrom(sub, sup)
+ JNIEnv * env = FETCHENV;
+ jclass sub
+ jclass sup
+ CODE:
+ {
+ RETVAL = (*env)->IsAssignableFrom(env, sub, sup);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+SysRet
+Throw(obj)
+ JNIEnv * env = FETCHENV;
+ jthrowable obj
+ CODE:
+ {
+ RETVAL = (*env)->Throw(env, obj);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+SysRet
+ThrowNew(clazz, msg)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ const char * msg
+ CODE:
+ {
+ RETVAL = (*env)->ThrowNew(env, clazz, msg);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jthrowable
+ExceptionOccurred()
+ JNIEnv * env = FETCHENV;
+ CODE:
+ {
+ RETVAL = (*env)->ExceptionOccurred(env);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+void
+ExceptionDescribe()
+ JNIEnv * env = FETCHENV;
+ CODE:
+ {
+ (*env)->ExceptionDescribe(env);
+ RESTOREENV;
+ }
+
+void
+ExceptionClear()
+ JNIEnv * env = FETCHENV;
+ CODE:
+ {
+ (*env)->ExceptionClear(env);
+ RESTOREENV;
+ }
+
+void
+FatalError(msg)
+ JNIEnv * env = FETCHENV;
+ const char * msg
+ CODE:
+ {
+ (*env)->FatalError(env, msg);
+ RESTOREENV;
+ }
+
+jobject
+NewGlobalRef(lobj)
+ JNIEnv * env = FETCHENV;
+ jobject lobj
+ CODE:
+ {
+ RETVAL = (*env)->NewGlobalRef(env, lobj);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+void
+DeleteGlobalRef(gref)
+ JNIEnv * env = FETCHENV;
+ jobject gref
+ CODE:
+ {
+ (*env)->DeleteGlobalRef(env, gref);
+ RESTOREENV;
+ }
+
+void
+DeleteLocalRef(obj)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ CODE:
+ {
+ (*env)->DeleteLocalRef(env, obj);
+ RESTOREENV;
+ }
+
+jboolean
+IsSameObject(obj1,obj2)
+ JNIEnv * env = FETCHENV;
+ jobject obj1
+ jobject obj2
+ CODE:
+ {
+ RETVAL = (*env)->IsSameObject(env, obj1,obj2);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jobject
+AllocObject(clazz)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ CODE:
+ {
+ RETVAL = (*env)->AllocObject(env, clazz);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jobject
+NewObject(clazz,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->NewObjectA(env, clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jobject
+NewObjectA(clazz,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->NewObjectA(env, clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jclass
+GetObjectClass(obj)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ CODE:
+ {
+ RETVAL = (*env)->GetObjectClass(env, obj);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jboolean
+IsInstanceOf(obj,clazz)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ CODE:
+ {
+ RETVAL = (*env)->IsInstanceOf(env, obj,clazz);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jmethodID
+GetMethodID(clazz,name,sig)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ const char * name
+ const char * sig
+ CODE:
+ {
+ RETVAL = (*env)->GetMethodID(env, clazz,name,sig);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jobject
+CallObjectMethod(obj,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallObjectMethodA(env, obj,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jobject
+CallObjectMethodA(obj,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallObjectMethodA(env, obj,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jboolean
+CallBooleanMethod(obj,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallBooleanMethodA(env, obj,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jboolean
+CallBooleanMethodA(obj,methodID, args)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallBooleanMethodA(env, obj,methodID, args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jbyte
+CallByteMethod(obj,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallByteMethodA(env, obj,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jbyte
+CallByteMethodA(obj,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallByteMethodA(env, obj,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jchar
+CallCharMethod(obj,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallCharMethodA(env, obj,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jchar
+CallCharMethodA(obj,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallCharMethodA(env, obj,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jshort
+CallShortMethod(obj,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallShortMethodA(env, obj,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jshort
+CallShortMethodA(obj,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallShortMethodA(env, obj,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jint
+CallIntMethod(obj,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallIntMethodA(env, obj,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jint
+CallIntMethodA(obj,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallIntMethodA(env, obj,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jlong
+CallLongMethod(obj,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallLongMethodA(env, obj,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jlong
+CallLongMethodA(obj,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallLongMethodA(env, obj,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jfloat
+CallFloatMethod(obj,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallFloatMethodA(env, obj,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jfloat
+CallFloatMethodA(obj,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallFloatMethodA(env, obj,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jdouble
+CallDoubleMethod(obj,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallDoubleMethodA(env, obj,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jdouble
+CallDoubleMethodA(obj,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallDoubleMethodA(env, obj,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+void
+CallVoidMethod(obj,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ (*env)->CallVoidMethodA(env, obj,methodID,args);
+ RESTOREENV;
+ }
+
+void
+CallVoidMethodA(obj,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ (*env)->CallVoidMethodA(env, obj,methodID,args);
+ RESTOREENV;
+ }
+
+jobject
+CallNonvirtualObjectMethod(obj,clazz,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallNonvirtualObjectMethodA(env, obj,clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jobject
+CallNonvirtualObjectMethodA(obj,clazz,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallNonvirtualObjectMethodA(env, obj,clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jboolean
+CallNonvirtualBooleanMethod(obj,clazz,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallNonvirtualBooleanMethodA(env, obj,clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jboolean
+CallNonvirtualBooleanMethodA(obj,clazz,methodID, args)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallNonvirtualBooleanMethodA(env, obj,clazz,methodID, args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jbyte
+CallNonvirtualByteMethod(obj,clazz,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallNonvirtualByteMethodA(env, obj,clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jbyte
+CallNonvirtualByteMethodA(obj,clazz,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallNonvirtualByteMethodA(env, obj,clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jchar
+CallNonvirtualCharMethod(obj,clazz,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallNonvirtualCharMethodA(env, obj,clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jchar
+CallNonvirtualCharMethodA(obj,clazz,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallNonvirtualCharMethodA(env, obj,clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jshort
+CallNonvirtualShortMethod(obj,clazz,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallNonvirtualShortMethodA(env, obj,clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jshort
+CallNonvirtualShortMethodA(obj,clazz,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallNonvirtualShortMethodA(env, obj,clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jint
+CallNonvirtualIntMethod(obj,clazz,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallNonvirtualIntMethodA(env, obj,clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jint
+CallNonvirtualIntMethodA(obj,clazz,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallNonvirtualIntMethodA(env, obj,clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jlong
+CallNonvirtualLongMethod(obj,clazz,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallNonvirtualLongMethodA(env, obj,clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jlong
+CallNonvirtualLongMethodA(obj,clazz,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallNonvirtualLongMethodA(env, obj,clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jfloat
+CallNonvirtualFloatMethod(obj,clazz,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallNonvirtualFloatMethodA(env, obj,clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jfloat
+CallNonvirtualFloatMethodA(obj,clazz,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallNonvirtualFloatMethodA(env, obj,clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jdouble
+CallNonvirtualDoubleMethod(obj,clazz,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallNonvirtualDoubleMethodA(env, obj,clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jdouble
+CallNonvirtualDoubleMethodA(obj,clazz,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallNonvirtualDoubleMethodA(env, obj,clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+void
+CallNonvirtualVoidMethod(obj,clazz,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ (*env)->CallNonvirtualVoidMethodA(env, obj,clazz,methodID,args);
+ RESTOREENV;
+ }
+
+void
+CallNonvirtualVoidMethodA(obj,clazz,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ (*env)->CallNonvirtualVoidMethodA(env, obj,clazz,methodID,args);
+ RESTOREENV;
+ }
+
+jfieldID
+GetFieldID(clazz,name,sig)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ const char * name
+ const char * sig
+ CODE:
+ {
+ RETVAL = (*env)->GetFieldID(env, clazz,name,sig);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jobject
+GetObjectField(obj,fieldID)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jfieldID fieldID
+ char * sig = 0;
+ CODE:
+ {
+ RETVAL = (*env)->GetObjectField(env, obj,fieldID);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jboolean
+GetBooleanField(obj,fieldID)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jfieldID fieldID
+ char * sig = 0;
+ CODE:
+ {
+ RETVAL = (*env)->GetBooleanField(env, obj,fieldID);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jbyte
+GetByteField(obj,fieldID)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jfieldID fieldID
+ char * sig = 0;
+ CODE:
+ {
+ RETVAL = (*env)->GetByteField(env, obj,fieldID);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jchar
+GetCharField(obj,fieldID)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jfieldID fieldID
+ char * sig = 0;
+ CODE:
+ {
+ RETVAL = (*env)->GetCharField(env, obj,fieldID);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jshort
+GetShortField(obj,fieldID)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jfieldID fieldID
+ char * sig = 0;
+ CODE:
+ {
+ RETVAL = (*env)->GetShortField(env, obj,fieldID);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jint
+GetIntField(obj,fieldID)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jfieldID fieldID
+ char * sig = 0;
+ CODE:
+ {
+ RETVAL = (*env)->GetIntField(env, obj,fieldID);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jlong
+GetLongField(obj,fieldID)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jfieldID fieldID
+ char * sig = 0;
+ CODE:
+ {
+ RETVAL = (*env)->GetLongField(env, obj,fieldID);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jfloat
+GetFloatField(obj,fieldID)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jfieldID fieldID
+ char * sig = 0;
+ CODE:
+ {
+ RETVAL = (*env)->GetFloatField(env, obj,fieldID);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jdouble
+GetDoubleField(obj,fieldID)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jfieldID fieldID
+ char * sig = 0;
+ CODE:
+ {
+ RETVAL = (*env)->GetDoubleField(env, obj,fieldID);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+void
+SetObjectField(obj,fieldID,val)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jfieldID fieldID
+ char * sig = 0;
+ jobject val
+ CODE:
+ {
+ (*env)->SetObjectField(env, obj,fieldID,val);
+ RESTOREENV;
+ }
+
+void
+SetBooleanField(obj,fieldID,val)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jfieldID fieldID
+ char * sig = 0;
+ jboolean val
+ CODE:
+ {
+ (*env)->SetBooleanField(env, obj,fieldID,val);
+ RESTOREENV;
+ }
+
+void
+SetByteField(obj,fieldID,val)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jfieldID fieldID
+ char * sig = 0;
+ jbyte val
+ CODE:
+ {
+ (*env)->SetByteField(env, obj,fieldID,val);
+ RESTOREENV;
+ }
+
+void
+SetCharField(obj,fieldID,val)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jfieldID fieldID
+ char * sig = 0;
+ jchar val
+ CODE:
+ {
+ (*env)->SetCharField(env, obj,fieldID,val);
+ RESTOREENV;
+ }
+
+void
+SetShortField(obj,fieldID,val)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jfieldID fieldID
+ char * sig = 0;
+ jshort val
+ CODE:
+ {
+ (*env)->SetShortField(env, obj,fieldID,val);
+ RESTOREENV;
+ }
+
+void
+SetIntField(obj,fieldID,val)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jfieldID fieldID
+ char * sig = 0;
+ jint val
+ CODE:
+ {
+ (*env)->SetIntField(env, obj,fieldID,val);
+ RESTOREENV;
+ }
+
+void
+SetLongField(obj,fieldID,val)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jfieldID fieldID
+ char * sig = 0;
+ jlong val
+ CODE:
+ {
+ (*env)->SetLongField(env, obj,fieldID,val);
+ RESTOREENV;
+ }
+
+void
+SetFloatField(obj,fieldID,val)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jfieldID fieldID
+ char * sig = 0;
+ jfloat val
+ CODE:
+ {
+ (*env)->SetFloatField(env, obj,fieldID,val);
+ RESTOREENV;
+ }
+
+void
+SetDoubleField(obj,fieldID,val)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ jfieldID fieldID
+ char * sig = 0;
+ jdouble val
+ CODE:
+ {
+ (*env)->SetDoubleField(env, obj,fieldID,val);
+ RESTOREENV;
+ }
+
+jmethodID
+GetStaticMethodID(clazz,name,sig)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ const char * name
+ const char * sig
+ CODE:
+ {
+ RETVAL = (*env)->GetStaticMethodID(env, clazz,name,sig);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jobject
+CallStaticObjectMethod(clazz,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallStaticObjectMethodA(env, clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jobject
+CallStaticObjectMethodA(clazz,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallStaticObjectMethodA(env, clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jboolean
+CallStaticBooleanMethod(clazz,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallStaticBooleanMethodA(env, clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jboolean
+CallStaticBooleanMethodA(clazz,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallStaticBooleanMethodA(env, clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jbyte
+CallStaticByteMethod(clazz,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallStaticByteMethodA(env, clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jbyte
+CallStaticByteMethodA(clazz,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallStaticByteMethodA(env, clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jchar
+CallStaticCharMethod(clazz,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallStaticCharMethodA(env, clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jchar
+CallStaticCharMethodA(clazz,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallStaticCharMethodA(env, clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jshort
+CallStaticShortMethod(clazz,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallStaticShortMethodA(env, clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jshort
+CallStaticShortMethodA(clazz,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallStaticShortMethodA(env, clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jint
+CallStaticIntMethod(clazz,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallStaticIntMethodA(env, clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jint
+CallStaticIntMethodA(clazz,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallStaticIntMethodA(env, clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jlong
+CallStaticLongMethod(clazz,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallStaticLongMethodA(env, clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jlong
+CallStaticLongMethodA(clazz,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallStaticLongMethodA(env, clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jfloat
+CallStaticFloatMethod(clazz,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallStaticFloatMethodA(env, clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jfloat
+CallStaticFloatMethodA(clazz,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallStaticFloatMethodA(env, clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jdouble
+CallStaticDoubleMethod(clazz,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ RETVAL = (*env)->CallStaticDoubleMethodA(env, clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jdouble
+CallStaticDoubleMethodA(clazz,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ RETVAL = (*env)->CallStaticDoubleMethodA(env, clazz,methodID,args);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+void
+CallStaticVoidMethod(cls,methodID,...)
+ JNIEnv * env = FETCHENV;
+ jclass cls
+ jmethodID methodID
+ char * sig = 0;
+ int argoff = $min_args;
+ CODE:
+ {
+ jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+ (*env)->CallStaticVoidMethodA(env, cls,methodID,args);
+ RESTOREENV;
+ }
+
+void
+CallStaticVoidMethodA(cls,methodID,args)
+ JNIEnv * env = FETCHENV;
+ jclass cls
+ jmethodID methodID
+ char * sig = 0;
+ jvalue * args
+ CODE:
+ {
+ (*env)->CallStaticVoidMethodA(env, cls,methodID,args);
+ RESTOREENV;
+ }
+
+jfieldID
+GetStaticFieldID(clazz,name,sig)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ const char * name
+ const char * sig
+ CODE:
+ {
+ RETVAL = (*env)->GetStaticFieldID(env, clazz,name,sig);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jobject
+GetStaticObjectField(clazz,fieldID)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jfieldID fieldID
+ char * sig = 0;
+ CODE:
+ {
+ RETVAL = (*env)->GetStaticObjectField(env, clazz,fieldID);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jboolean
+GetStaticBooleanField(clazz,fieldID)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jfieldID fieldID
+ char * sig = 0;
+ CODE:
+ {
+ RETVAL = (*env)->GetStaticBooleanField(env, clazz,fieldID);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jbyte
+GetStaticByteField(clazz,fieldID)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jfieldID fieldID
+ char * sig = 0;
+ CODE:
+ {
+ RETVAL = (*env)->GetStaticByteField(env, clazz,fieldID);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jchar
+GetStaticCharField(clazz,fieldID)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jfieldID fieldID
+ char * sig = 0;
+ CODE:
+ {
+ RETVAL = (*env)->GetStaticCharField(env, clazz,fieldID);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jshort
+GetStaticShortField(clazz,fieldID)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jfieldID fieldID
+ char * sig = 0;
+ CODE:
+ {
+ RETVAL = (*env)->GetStaticShortField(env, clazz,fieldID);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jint
+GetStaticIntField(clazz,fieldID)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jfieldID fieldID
+ char * sig = 0;
+ CODE:
+ {
+ RETVAL = (*env)->GetStaticIntField(env, clazz,fieldID);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jlong
+GetStaticLongField(clazz,fieldID)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jfieldID fieldID
+ char * sig = 0;
+ CODE:
+ {
+ RETVAL = (*env)->GetStaticLongField(env, clazz,fieldID);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jfloat
+GetStaticFloatField(clazz,fieldID)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jfieldID fieldID
+ char * sig = 0;
+ CODE:
+ {
+ RETVAL = (*env)->GetStaticFloatField(env, clazz,fieldID);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jdouble
+GetStaticDoubleField(clazz,fieldID)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jfieldID fieldID
+ char * sig = 0;
+ CODE:
+ {
+ RETVAL = (*env)->GetStaticDoubleField(env, clazz,fieldID);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+void
+SetStaticObjectField(clazz,fieldID,value)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jfieldID fieldID
+ char * sig = 0;
+ jobject value
+ CODE:
+ {
+ (*env)->SetStaticObjectField(env, clazz,fieldID,value);
+ RESTOREENV;
+ }
+
+void
+SetStaticBooleanField(clazz,fieldID,value)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jfieldID fieldID
+ char * sig = 0;
+ jboolean value
+ CODE:
+ {
+ (*env)->SetStaticBooleanField(env, clazz,fieldID,value);
+ RESTOREENV;
+ }
+
+void
+SetStaticByteField(clazz,fieldID,value)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jfieldID fieldID
+ char * sig = 0;
+ jbyte value
+ CODE:
+ {
+ (*env)->SetStaticByteField(env, clazz,fieldID,value);
+ RESTOREENV;
+ }
+
+void
+SetStaticCharField(clazz,fieldID,value)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jfieldID fieldID
+ char * sig = 0;
+ jchar value
+ CODE:
+ {
+ (*env)->SetStaticCharField(env, clazz,fieldID,value);
+ RESTOREENV;
+ }
+
+void
+SetStaticShortField(clazz,fieldID,value)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jfieldID fieldID
+ char * sig = 0;
+ jshort value
+ CODE:
+ {
+ (*env)->SetStaticShortField(env, clazz,fieldID,value);
+ RESTOREENV;
+ }
+
+void
+SetStaticIntField(clazz,fieldID,value)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jfieldID fieldID
+ char * sig = 0;
+ jint value
+ CODE:
+ {
+ (*env)->SetStaticIntField(env, clazz,fieldID,value);
+ RESTOREENV;
+ }
+
+void
+SetStaticLongField(clazz,fieldID,value)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jfieldID fieldID
+ char * sig = 0;
+ jlong value
+ CODE:
+ {
+ (*env)->SetStaticLongField(env, clazz,fieldID,value);
+ RESTOREENV;
+ }
+
+void
+SetStaticFloatField(clazz,fieldID,value)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jfieldID fieldID
+ char * sig = 0;
+ jfloat value
+ CODE:
+ {
+ (*env)->SetStaticFloatField(env, clazz,fieldID,value);
+ RESTOREENV;
+ }
+
+void
+SetStaticDoubleField(clazz,fieldID,value)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ jfieldID fieldID
+ char * sig = 0;
+ jdouble value
+ CODE:
+ {
+ (*env)->SetStaticDoubleField(env, clazz,fieldID,value);
+ RESTOREENV;
+ }
+
+jstring
+NewString(unicode)
+ JNIEnv * env = FETCHENV;
+ STRLEN tmplen = NO_INIT;
+ jsize unicode_len_ = NO_INIT;
+ const jchar * unicode
+ CODE:
+ {
+ RETVAL = (*env)->NewString(env, unicode, unicode_len_);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jsize
+GetStringLength(str)
+ JNIEnv * env = FETCHENV;
+ jstring str
+ CODE:
+ {
+ RETVAL = (*env)->GetStringLength(env, str);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+const jchar *
+GetStringChars(str)
+ JNIEnv * env = FETCHENV;
+ jstring str
+ jboolean isCopy = NO_INIT;
+ jsize RETVAL_len_ = NO_INIT;
+ CODE:
+ {
+ RETVAL = (*env)->GetStringChars(env, str,&isCopy);
+ RETVAL_len_ = (*env)->GetStringLength(env, str);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+ CLEANUP:
+ (*env)->ReleaseStringChars(env, str,RETVAL);
+
+jstring
+NewStringUTF(utf)
+ JNIEnv * env = FETCHENV;
+ const char * utf
+ CODE:
+ {
+ RETVAL = (*env)->NewStringUTF(env, utf);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jsize
+GetStringUTFLength(str)
+ JNIEnv * env = FETCHENV;
+ jstring str
+ CODE:
+ {
+ RETVAL = (*env)->GetStringUTFLength(env, str);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+const char *
+GetStringUTFChars(str)
+ JNIEnv * env = FETCHENV;
+ jstring str
+ jboolean isCopy = NO_INIT;
+ CODE:
+ {
+ RETVAL = (*env)->GetStringUTFChars(env, str,&isCopy);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+ CLEANUP:
+ (*env)->ReleaseStringUTFChars(env, str, RETVAL);
+
+
+jsize
+GetArrayLength(array)
+ JNIEnv * env = FETCHENV;
+ jarray array
+ CODE:
+ {
+ RETVAL = (*env)->GetArrayLength(env, array);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jobjectArray
+NewObjectArray(len,clazz,init)
+ JNIEnv * env = FETCHENV;
+ jsize len
+ jclass clazz
+ jobject init
+ CODE:
+ {
+ RETVAL = (*env)->NewObjectArray(env, len,clazz,init);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jobject
+GetObjectArrayElement(array,index)
+ JNIEnv * env = FETCHENV;
+ jobjectArray array
+ jsize index
+ CODE:
+ {
+ RETVAL = (*env)->GetObjectArrayElement(env, array,index);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+void
+SetObjectArrayElement(array,index,val)
+ JNIEnv * env = FETCHENV;
+ jobjectArray array
+ jsize index
+ jobject val
+ CODE:
+ {
+ (*env)->SetObjectArrayElement(env, array,index,val);
+ RESTOREENV;
+ }
+
+jbooleanArray
+NewBooleanArray(len)
+ JNIEnv * env = FETCHENV;
+ jsize len
+ CODE:
+ {
+ RETVAL = (*env)->NewBooleanArray(env, len);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jbyteArray
+NewByteArray(len)
+ JNIEnv * env = FETCHENV;
+ jsize len
+ CODE:
+ {
+ RETVAL = (*env)->NewByteArray(env, len);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jcharArray
+NewCharArray(len)
+ JNIEnv * env = FETCHENV;
+ jsize len
+ CODE:
+ {
+ RETVAL = (*env)->NewCharArray(env, len);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jshortArray
+NewShortArray(len)
+ JNIEnv * env = FETCHENV;
+ jsize len
+ CODE:
+ {
+ RETVAL = (*env)->NewShortArray(env, len);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jintArray
+NewIntArray(len)
+ JNIEnv * env = FETCHENV;
+ jsize len
+ CODE:
+ {
+ RETVAL = (*env)->NewIntArray(env, len);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jlongArray
+NewLongArray(len)
+ JNIEnv * env = FETCHENV;
+ jsize len
+ CODE:
+ {
+ RETVAL = (*env)->NewLongArray(env, len);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jfloatArray
+NewFloatArray(len)
+ JNIEnv * env = FETCHENV;
+ jsize len
+ CODE:
+ {
+ RETVAL = (*env)->NewFloatArray(env, len);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jdoubleArray
+NewDoubleArray(len)
+ JNIEnv * env = FETCHENV;
+ jsize len
+ CODE:
+ {
+ RETVAL = (*env)->NewDoubleArray(env, len);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+jboolean *
+GetBooleanArrayElements(array)
+ JNIEnv * env = FETCHENV;
+ jsize RETVAL_len_ = NO_INIT;
+ jbooleanArray array
+ jboolean isCopy = NO_INIT;
+ PPCODE:
+ {
+ RETVAL = (*env)->GetBooleanArrayElements(env, array,&isCopy);
+ RETVAL_len_ = (*env)->GetArrayLength(env, array);
+ if (GIMME == G_ARRAY) {
+ int i;
+ jboolean* r = RETVAL;
+ EXTEND(sp, RETVAL_len_);
+ for (i = RETVAL_len_; i; --i) {
+ PUSHs(sv_2mortal(newSViv(*r++)));
+ }
+ }
+ else {
+ if (RETVAL_len_) {
+ PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,
+ (STRLEN)RETVAL_len_ * sizeof(jboolean))));
+ }
+ else
+ PUSHs(&PL_sv_no);
+ }
+ (*env)->ReleaseBooleanArrayElements(env, array,RETVAL,JNI_ABORT);
+ RESTOREENV;
+ }
+
+jbyte *
+GetByteArrayElements(array)
+ JNIEnv * env = FETCHENV;
+ jsize RETVAL_len_ = NO_INIT;
+ jbyteArray array
+ jboolean isCopy = NO_INIT;
+ PPCODE:
+ {
+ RETVAL = (*env)->GetByteArrayElements(env, array,&isCopy);
+ RETVAL_len_ = (*env)->GetArrayLength(env, array);
+ if (GIMME == G_ARRAY) {
+ int i;
+ jbyte* r = RETVAL;
+ EXTEND(sp, RETVAL_len_);
+ for (i = RETVAL_len_; i; --i) {
+ PUSHs(sv_2mortal(newSViv(*r++)));
+ }
+ }
+ else {
+ if (RETVAL_len_) {
+ PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,
+ (STRLEN)RETVAL_len_ * sizeof(jbyte))));
+ }
+ else
+ PUSHs(&PL_sv_no);
+ }
+ (*env)->ReleaseByteArrayElements(env, array,RETVAL,JNI_ABORT);
+ RESTOREENV;
+ }
+
+jchar *
+GetCharArrayElements(array)
+ JNIEnv * env = FETCHENV;
+ jsize RETVAL_len_ = NO_INIT;
+ jcharArray array
+ jboolean isCopy = NO_INIT;
+ PPCODE:
+ {
+ RETVAL = (*env)->GetCharArrayElements(env, array,&isCopy);
+ RETVAL_len_ = (*env)->GetArrayLength(env, array);
+ if (GIMME == G_ARRAY) {
+ int i;
+ jchar* r = RETVAL;
+ EXTEND(sp, RETVAL_len_);
+ for (i = RETVAL_len_; i; --i) {
+ PUSHs(sv_2mortal(newSViv(*r++)));
+ }
+ }
+ else {
+ if (RETVAL_len_) {
+ PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,
+ (STRLEN)RETVAL_len_ * sizeof(jchar))));
+ }
+ else
+ PUSHs(&PL_sv_no);
+ }
+ (*env)->ReleaseCharArrayElements(env, array,RETVAL,JNI_ABORT);
+ RESTOREENV;
+ }
+
+jshort *
+GetShortArrayElements(array)
+ JNIEnv * env = FETCHENV;
+ jsize RETVAL_len_ = NO_INIT;
+ jshortArray array
+ jboolean isCopy = NO_INIT;
+ PPCODE:
+ {
+ RETVAL = (*env)->GetShortArrayElements(env, array,&isCopy);
+ RETVAL_len_ = (*env)->GetArrayLength(env, array);
+ if (GIMME == G_ARRAY) {
+ int i;
+ jshort* r = RETVAL;
+ EXTEND(sp, RETVAL_len_);
+ for (i = RETVAL_len_; i; --i) {
+ PUSHs(sv_2mortal(newSViv(*r++)));
+ }
+ }
+ else {
+ if (RETVAL_len_) {
+ PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,
+ (STRLEN)RETVAL_len_ * sizeof(jshort))));
+ }
+ else
+ PUSHs(&PL_sv_no);
+ }
+ (*env)->ReleaseShortArrayElements(env, array,RETVAL,JNI_ABORT);
+ RESTOREENV;
+ }
+
+jint *
+GetIntArrayElements(array)
+ JNIEnv * env = FETCHENV;
+ jsize RETVAL_len_ = NO_INIT;
+ jintArray array
+ jboolean isCopy = NO_INIT;
+ PPCODE:
+ {
+ RETVAL = (*env)->GetIntArrayElements(env, array,&isCopy);
+ RETVAL_len_ = (*env)->GetArrayLength(env, array);
+ if (GIMME == G_ARRAY) {
+ int i;
+ jint* r = RETVAL;
+ EXTEND(sp, RETVAL_len_);
+ for (i = RETVAL_len_; i; --i) {
+ PUSHs(sv_2mortal(newSViv(*r++)));
+ }
+ }
+ else {
+ if (RETVAL_len_) {
+ PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,
+ (STRLEN)RETVAL_len_ * sizeof(jint))));
+ }
+ else
+ PUSHs(&PL_sv_no);
+ }
+ (*env)->ReleaseIntArrayElements(env, array,RETVAL,JNI_ABORT);
+ RESTOREENV;
+ }
+
+jlong *
+GetLongArrayElements(array)
+ JNIEnv * env = FETCHENV;
+ jsize RETVAL_len_ = NO_INIT;
+ jlongArray array
+ jboolean isCopy = NO_INIT;
+ PPCODE:
+ {
+ RETVAL = (*env)->GetLongArrayElements(env, array,&isCopy);
+ RETVAL_len_ = (*env)->GetArrayLength(env, array);
+ if (GIMME == G_ARRAY) {
+ int i;
+ jlong* r = RETVAL;
+ EXTEND(sp, RETVAL_len_);
+ for (i = RETVAL_len_; i; --i) {
+ PUSHs(sv_2mortal(newSViv(*r++)));
+ }
+ }
+ else {
+ if (RETVAL_len_) {
+ PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,
+ (STRLEN)RETVAL_len_ * sizeof(jlong))));
+ }
+ else
+ PUSHs(&PL_sv_no);
+ }
+ (*env)->ReleaseLongArrayElements(env, array,RETVAL,JNI_ABORT);
+ RESTOREENV;
+ }
+
+jfloat *
+GetFloatArrayElements(array)
+ JNIEnv * env = FETCHENV;
+ jsize RETVAL_len_ = NO_INIT;
+ jfloatArray array
+ jboolean isCopy = NO_INIT;
+ PPCODE:
+ {
+ RETVAL = (*env)->GetFloatArrayElements(env, array,&isCopy);
+ RETVAL_len_ = (*env)->GetArrayLength(env, array);
+ if (GIMME == G_ARRAY) {
+ int i;
+ jfloat* r = RETVAL;
+ EXTEND(sp, RETVAL_len_);
+ for (i = RETVAL_len_; i; --i) {
+ PUSHs(sv_2mortal(newSVnv(*r++)));
+ }
+ }
+ else {
+ if (RETVAL_len_) {
+ PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,
+ (STRLEN)RETVAL_len_ * sizeof(jfloat))));
+ }
+ else
+ PUSHs(&PL_sv_no);
+ }
+ (*env)->ReleaseFloatArrayElements(env, array,RETVAL,JNI_ABORT);
+ RESTOREENV;
+ }
+
+jdouble *
+GetDoubleArrayElements(array)
+ JNIEnv * env = FETCHENV;
+ jsize RETVAL_len_ = NO_INIT;
+ jdoubleArray array
+ jboolean isCopy = NO_INIT;
+ PPCODE:
+ {
+ RETVAL = (*env)->GetDoubleArrayElements(env, array,&isCopy);
+ RETVAL_len_ = (*env)->GetArrayLength(env, array);
+ if (GIMME == G_ARRAY) {
+ int i;
+ jdouble* r = RETVAL;
+ EXTEND(sp, RETVAL_len_);
+ for (i = RETVAL_len_; i; --i) {
+ PUSHs(sv_2mortal(newSVnv(*r++)));
+ }
+ }
+ else {
+ if (RETVAL_len_) {
+ PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,
+ (STRLEN)RETVAL_len_ * sizeof(jdouble))));
+ }
+ else
+ PUSHs(&PL_sv_no);
+ }
+ (*env)->ReleaseDoubleArrayElements(env, array,RETVAL,JNI_ABORT);
+ RESTOREENV;
+ }
+
+void
+GetBooleanArrayRegion(array,start,len,buf)
+ JNIEnv * env = FETCHENV;
+ jbooleanArray array
+ jsize start
+ jsize len
+ STRLEN tmplen = len * sizeof(jboolean) + 1;
+ char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);
+ jboolean * buf = (jboolean*)sv_grow(ST(3),len * sizeof(jboolean)+1);
+ CODE:
+ {
+ (*env)->GetBooleanArrayRegion(env, array,start,len,buf);
+ SvCUR_set(ST(3), len * sizeof(jboolean));
+ *SvEND(ST(3)) = '\0';
+ RESTOREENV;
+ }
+
+void
+GetByteArrayRegion(array,start,len,buf)
+ JNIEnv * env = FETCHENV;
+ jbyteArray array
+ jsize start
+ jsize len
+ STRLEN tmplen = len * sizeof(jboolean) + 1;
+ char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);
+ jbyte * buf = (jbyte*)sv_grow(ST(3),len * sizeof(jbyte)+1);
+ CODE:
+ {
+ (*env)->GetByteArrayRegion(env, array,start,len,buf);
+ SvCUR_set(ST(3), len * sizeof(jbyte));
+ *SvEND(ST(3)) = '\0';
+ RESTOREENV;
+ }
+
+void
+GetCharArrayRegion(array,start,len,buf)
+ JNIEnv * env = FETCHENV;
+ jcharArray array
+ jsize start
+ jsize len
+ STRLEN tmplen = len * sizeof(jboolean) + 1;
+ char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);
+ jchar * buf = (jchar*)sv_grow(ST(3),len * sizeof(jchar)+1);
+ CODE:
+ {
+ (*env)->GetCharArrayRegion(env, array,start,len,buf);
+ SvCUR_set(ST(3), len * sizeof(jchar));
+ *SvEND(ST(3)) = '\0';
+ RESTOREENV;
+ }
+
+void
+GetShortArrayRegion(array,start,len,buf)
+ JNIEnv * env = FETCHENV;
+ jshortArray array
+ jsize start
+ jsize len
+ STRLEN tmplen = len * sizeof(jboolean) + 1;
+ char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);
+ jshort * buf = (jshort*)sv_grow(ST(3),len * sizeof(jshort)+1);
+ CODE:
+ {
+ (*env)->GetShortArrayRegion(env, array,start,len,buf);
+ SvCUR_set(ST(3), len * sizeof(jshort));
+ *SvEND(ST(3)) = '\0';
+ RESTOREENV;
+ }
+
+void
+GetIntArrayRegion(array,start,len,buf)
+ JNIEnv * env = FETCHENV;
+ jintArray array
+ jsize start
+ jsize len
+ STRLEN tmplen = len * sizeof(jboolean) + 1;
+ char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);
+ jint * buf = (jint*)sv_grow(ST(3),len * sizeof(jint)+1);
+ CODE:
+ {
+ (*env)->GetIntArrayRegion(env, array,start,len,buf);
+ SvCUR_set(ST(3), len * sizeof(jint));
+ *SvEND(ST(3)) = '\0';
+ RESTOREENV;
+ }
+
+void
+GetLongArrayRegion(array,start,len,buf)
+ JNIEnv * env = FETCHENV;
+ jlongArray array
+ jsize start
+ jsize len
+ STRLEN tmplen = len * sizeof(jboolean) + 1;
+ char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);
+ jlong * buf = (jlong*)sv_grow(ST(3),len * sizeof(jlong)+1);
+ CODE:
+ {
+ (*env)->GetLongArrayRegion(env, array,start,len,buf);
+ SvCUR_set(ST(3), len * sizeof(jlong));
+ *SvEND(ST(3)) = '\0';
+ RESTOREENV;
+ }
+
+void
+GetFloatArrayRegion(array,start,len,buf)
+ JNIEnv * env = FETCHENV;
+ jfloatArray array
+ jsize start
+ jsize len
+ STRLEN tmplen = len * sizeof(jboolean) + 1;
+ char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);
+ jfloat * buf = (jfloat*)sv_grow(ST(3),len * sizeof(jfloat)+1);
+ CODE:
+ {
+ (*env)->GetFloatArrayRegion(env, array,start,len,buf);
+ SvCUR_set(ST(3), len * sizeof(jfloat));
+ *SvEND(ST(3)) = '\0';
+ RESTOREENV;
+ }
+
+void
+GetDoubleArrayRegion(array,start,len,buf)
+ JNIEnv * env = FETCHENV;
+ jdoubleArray array
+ jsize start
+ jsize len
+ STRLEN tmplen = len * sizeof(jboolean) + 1;
+ char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);
+ jdouble * buf = (jdouble*)sv_grow(ST(3),len * sizeof(jdouble)+1);
+ CODE:
+ {
+ (*env)->GetDoubleArrayRegion(env, array,start,len,buf);
+ SvCUR_set(ST(3), len * sizeof(jdouble));
+ *SvEND(ST(3)) = '\0';
+ RESTOREENV;
+ }
+
+void
+SetBooleanArrayRegion(array,start,len,buf)
+ JNIEnv * env = FETCHENV;
+ STRLEN tmplen = NO_INIT;
+ jbooleanArray array
+ jsize start
+ jsize len
+ jsize buf_len_ = NO_INIT;
+ jboolean * buf
+ CODE:
+ {
+ if (buf_len_ < len)
+ croak("string is too short");
+ else if (buf_len_ > len && PL_dowarn)
+ warn("string is too long");
+ (*env)->SetBooleanArrayRegion(env, array,start,len,buf);
+ RESTOREENV;
+ }
+
+void
+SetByteArrayRegion(array,start,len,buf)
+ JNIEnv * env = FETCHENV;
+ STRLEN tmplen = NO_INIT;
+ jbyteArray array
+ jsize start
+ jsize len
+ jsize buf_len_ = NO_INIT;
+ jbyte * buf
+ CODE:
+ {
+ if (buf_len_ < len)
+ croak("string is too short");
+ else if (buf_len_ > len && PL_dowarn)
+ warn("string is too long");
+ (*env)->SetByteArrayRegion(env, array,start,len,buf);
+ RESTOREENV;
+ }
+
+void
+SetCharArrayRegion(array,start,len,buf)
+ JNIEnv * env = FETCHENV;
+ STRLEN tmplen = NO_INIT;
+ jcharArray array
+ jsize start
+ jsize len
+ jsize buf_len_ = NO_INIT;
+ jchar * buf
+ CODE:
+ {
+ if (buf_len_ < len)
+ croak("string is too short");
+ else if (buf_len_ > len && PL_dowarn)
+ warn("string is too long");
+ (*env)->SetCharArrayRegion(env, array,start,len,buf);
+ RESTOREENV;
+ }
+
+void
+SetShortArrayRegion(array,start,len,buf)
+ JNIEnv * env = FETCHENV;
+ STRLEN tmplen = NO_INIT;
+ jshortArray array
+ jsize start
+ jsize len
+ jsize buf_len_ = NO_INIT;
+ jshort * buf
+ CODE:
+ {
+ if (buf_len_ < len)
+ croak("string is too short");
+ else if (buf_len_ > len && PL_dowarn)
+ warn("string is too long");
+ (*env)->SetShortArrayRegion(env, array,start,len,buf);
+ RESTOREENV;
+ }
+
+void
+SetIntArrayRegion(array,start,len,buf)
+ JNIEnv * env = FETCHENV;
+ STRLEN tmplen = NO_INIT;
+ jintArray array
+ jsize start
+ jsize len
+ jsize buf_len_ = NO_INIT;
+ jint * buf
+ CODE:
+ {
+ if (buf_len_ < len)
+ croak("string is too short");
+ else if (buf_len_ > len && PL_dowarn)
+ warn("string is too long");
+ (*env)->SetIntArrayRegion(env, array,start,len,buf);
+ RESTOREENV;
+ }
+
+void
+SetLongArrayRegion(array,start,len,buf)
+ JNIEnv * env = FETCHENV;
+ STRLEN tmplen = NO_INIT;
+ jlongArray array
+ jsize start
+ jsize len
+ jsize buf_len_ = NO_INIT;
+ jlong * buf
+ CODE:
+ {
+ if (buf_len_ < len)
+ croak("string is too short");
+ else if (buf_len_ > len && PL_dowarn)
+ warn("string is too long");
+ (*env)->SetLongArrayRegion(env, array,start,len,buf);
+ RESTOREENV;
+ }
+
+void
+SetFloatArrayRegion(array,start,len,buf)
+ JNIEnv * env = FETCHENV;
+ STRLEN tmplen = NO_INIT;
+ jfloatArray array
+ jsize start
+ jsize len
+ jsize buf_len_ = NO_INIT;
+ jfloat * buf
+ CODE:
+ {
+ if (buf_len_ < len)
+ croak("string is too short");
+ else if (buf_len_ > len && PL_dowarn)
+ warn("string is too long");
+ (*env)->SetFloatArrayRegion(env, array,start,len,buf);
+ RESTOREENV;
+ }
+
+void
+SetDoubleArrayRegion(array,start,len,buf)
+ JNIEnv * env = FETCHENV;
+ STRLEN tmplen = NO_INIT;
+ jdoubleArray array
+ jsize start
+ jsize len
+ jsize buf_len_ = NO_INIT;
+ jdouble * buf
+ CODE:
+ {
+ if (buf_len_ < len)
+ croak("string is too short");
+ else if (buf_len_ > len && PL_dowarn)
+ warn("string is too long");
+ (*env)->SetDoubleArrayRegion(env, array,start,len,buf);
+ RESTOREENV;
+ }
+
+SysRet
+RegisterNatives(clazz,methods,nMethods)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ JNINativeMethod * methods
+ jint nMethods
+ CODE:
+ {
+ RETVAL = (*env)->RegisterNatives(env, clazz,methods,nMethods);
+ }
+
+SysRet
+UnregisterNatives(clazz)
+ JNIEnv * env = FETCHENV;
+ jclass clazz
+ CODE:
+ {
+ RETVAL = (*env)->UnregisterNatives(env, clazz);
+ }
+ OUTPUT:
+ RETVAL
+
+SysRet
+MonitorEnter(obj)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ CODE:
+ {
+ RETVAL = (*env)->MonitorEnter(env, obj);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+SysRet
+MonitorExit(obj)
+ JNIEnv * env = FETCHENV;
+ jobject obj
+ CODE:
+ {
+ RETVAL = (*env)->MonitorExit(env, obj);
+ RESTOREENV;
+ }
+ OUTPUT:
+ RETVAL
+
+JavaVM *
+GetJavaVM(...)
+ JNIEnv * env = FETCHENV;
+ CODE:
+ {
+#ifdef JPL_DEBUG
+ jpldebug = 1;
+#else
+ jpldebug = 0;
+#endif
+ if (env) { /* We're embedded. */
+ if ((*env)->GetJavaVM(env, &RETVAL) < 0)
+ RETVAL = 0;
+ }
+ else { /* We're embedding. */
+#ifdef KAFFE
+ JavaVMInitArgs vm_args;
+#else
+ JDK1_1InitArgs vm_args;
+#endif
+ char *lib;
+ if (jpldebug) {
+ fprintf(stderr, "We're embedding Java in Perl.\n");
+ }
+
+ if (items--) {
+ ++mark;
+ lib = SvPV(*mark, PL_na);
+ }
+ else
+ lib = 0;
+ if (jpldebug) {
+ fprintf(stderr, "lib is %s.\n", lib);
+ }
+#ifdef WIN32
+ if (LoadLibrary("jvm.dll")) {
+ if (!LoadLibrary("javai.dll")) {
+ warn("Can't load javai.dll");
+ }
+ } else {
+ if (lib && !LoadLibrary(lib))
+ croak("Can't load javai.dll");
+ }
+#else
+ if (jpldebug) {
+ fprintf(stderr, "Opening Java shared library.\n");
+ }
+#ifdef KAFFE
+ if (!dlopen("libkaffevm.so", RTLD_LAZY|RTLD_GLOBAL)) {
+#else
+ if (!dlopen("libjava.so", RTLD_LAZY|RTLD_GLOBAL)) {
+#endif
+ if (lib && !dlopen(lib, RTLD_LAZY|RTLD_GLOBAL))
+ croak("Can't load Java shared library.");
+ }
+#endif
+ /* Kaffe seems to get very upset if vm_args.version isn't set */
+#ifdef KAFFE
+ vm_args.version = JNI_VERSION_1_1;
+#endif
+ JNI_GetDefaultJavaVMInitArgs(&vm_args);
+ vm_args.exit = &call_my_exit;
+ if (jpldebug) {
+ fprintf(stderr, "items = %d\n", items);
+ fprintf(stderr, "mark = %s\n", SvPV(*mark, PL_na));
+ }
+ while (items > 1) {
+ char *s;
+ ++mark;
+ s = SvPV(*mark,PL_na);
+ ++mark;
+ if (jpldebug) {
+ fprintf(stderr, "*s = %s\n", s);
+ fprintf(stderr, "val = %s\n", SvPV(*mark, PL_na));
+ }
+ items -= 2;
+ if (strEQ(s, "checkSource"))
+ vm_args.checkSource = (jint)SvIV(*mark);
+ else if (strEQ(s, "nativeStackSize"))
+ vm_args.nativeStackSize = (jint)SvIV(*mark);
+ else if (strEQ(s, "javaStackSize"))
+ vm_args.javaStackSize = (jint)SvIV(*mark);
+ else if (strEQ(s, "minHeapSize"))
+ vm_args.minHeapSize = (jint)SvIV(*mark);
+ else if (strEQ(s, "maxHeapSize"))
+ vm_args.maxHeapSize = (jint)SvIV(*mark);
+ else if (strEQ(s, "verifyMode"))
+ vm_args.verifyMode = (jint)SvIV(*mark);
+ else if (strEQ(s, "classpath"))
+ vm_args.classpath = savepv(SvPV(*mark,PL_na));
+ else if (strEQ(s, "enableClassGC"))
+ vm_args.enableClassGC = (jint)SvIV(*mark);
+ else if (strEQ(s, "enableVerboseGC"))
+ vm_args.enableVerboseGC = (jint)SvIV(*mark);
+ else if (strEQ(s, "disableAsyncGC"))
+ vm_args.disableAsyncGC = (jint)SvIV(*mark);
+#ifdef KAFFE
+ else if (strEQ(s, "libraryhome"))
+ vm_args.libraryhome = savepv(SvPV(*mark,PL_na));
+ else if (strEQ(s, "classhome"))
+ vm_args.classhome = savepv(SvPV(*mark,PL_na));
+ else if (strEQ(s, "enableVerboseJIT"))
+ vm_args.enableVerboseJIT = (jint)SvIV(*mark);
+ else if (strEQ(s, "enableVerboseClassloading"))
+ vm_args.enableVerboseClassloading = (jint)SvIV(*mark);
+ else if (strEQ(s, "enableVerboseCall"))
+ vm_args.enableVerboseCall = (jint)SvIV(*mark);
+ else if (strEQ(s, "allocHeapSize"))
+ vm_args.allocHeapSize = (jint)SvIV(*mark);
+#else
+ else if (strEQ(s, "verbose"))
+ vm_args.verbose = (jint)SvIV(*mark);
+ else if (strEQ(s, "debugging"))
+ vm_args.debugging = (jboolean)SvIV(*mark);
+ else if (strEQ(s, "debugPort"))
+ vm_args.debugPort = (jint)SvIV(*mark);
+#endif
+ else
+ croak("unrecognized option: %s", s);
+ }
+
+ if (jpldebug) {
+ fprintf(stderr, "Creating Java VM...\n");
+ fprintf(stderr, "Working CLASSPATH: %s\n",
+ vm_args.classpath);
+ }
+ if (JNI_CreateJavaVM(&RETVAL, &jplcurenv, &vm_args) < 0) {
+ croak("Unable to create instance of JVM");
+ }
+ if (jpldebug) {
+ fprintf(stderr, "Created Java VM.\n");
+ }
+
+ }
+ }
+