2 * Copyright 1997, O'Reilly & Associate, Inc.
4 * This package may be copied under the same terms as Perl itself.
15 extern JNIEnv* jplcurenv;
21 call_my_exit(jint status)
27 makeargs(char *sig, SV** svp, int items)
29 jvalue* jv = (jvalue*)safemalloc(sizeof(jvalue) * items);
32 JNIEnv* env = jplcurenv;
37 fprintf(stderr, "sig = %s, items = %d\n", sig, items);
46 jv[ix++].z = (jboolean)(SvIV(sv) != 0);
49 jv[ix++].b = (jbyte)SvIV(sv);
52 jv[ix++].c = (jchar)SvIV(sv);
55 jv[ix++].s = (jshort)SvIV(sv);
58 jv[ix++].i = (jint)SvIV(sv);
61 jv[ix++].j = (jlong)SvNV(sv);
64 jv[ix++].f = (jfloat)SvNV(sv);
67 jv[ix++].d = (jdouble)SvNV(sv);
73 SV* rv = (SV*)SvRV(sv);
75 jv[ix++].l = (jobject)(void*)SvIV(rv);
76 else if (SvTYPE(rv) == SVt_PVAV) {
77 jsize len = av_len((AV*)rv) + 1;
78 jboolean* buf = (jboolean*)malloc(len * sizeof(jboolean));
82 jbooleanArray ja = (*env)->NewBooleanArray(env, len);
83 for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
84 buf[i] = (jboolean)SvIV(*esv);
85 (*env)->SetBooleanArrayRegion(env, ja, 0, len, buf);
87 jv[ix++].l = (jobject)ja;
90 jv[ix++].l = (jobject)(void*)0;
93 jsize len = sv_len(sv) / sizeof(jboolean);
95 jbooleanArray ja = (*env)->NewBooleanArray(env, len);
96 (*env)->SetBooleanArrayRegion(env, ja, 0, len, (jboolean*)SvPV(sv,n_a));
97 jv[ix++].l = (jobject)ja;
100 jv[ix++].l = (jobject)(void*)0;
104 SV* rv = (SV*)SvRV(sv);
106 jv[ix++].l = (jobject)(void*)SvIV(rv);
107 else if (SvTYPE(rv) == SVt_PVAV) {
108 jsize len = av_len((AV*)rv) + 1;
109 jbyte* buf = (jbyte*)malloc(len * sizeof(jbyte));
113 jbyteArray ja = (*env)->NewByteArray(env, len);
114 for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
115 buf[i] = (jbyte)SvIV(*esv);
116 (*env)->SetByteArrayRegion(env, ja, 0, len, buf);
118 jv[ix++].l = (jobject)ja;
121 jv[ix++].l = (jobject)(void*)0;
123 else if (SvPOK(sv)) {
124 jsize len = sv_len(sv) / sizeof(jbyte);
126 jbyteArray ja = (*env)->NewByteArray(env, len);
127 (*env)->SetByteArrayRegion(env, ja, 0, len, (jbyte*)SvPV(sv,n_a));
128 jv[ix++].l = (jobject)ja;
131 jv[ix++].l = (jobject)(void*)0;
135 SV* rv = (SV*)SvRV(sv);
137 jv[ix++].l = (jobject)(void*)SvIV(rv);
138 else if (SvTYPE(rv) == SVt_PVAV) {
139 jsize len = av_len((AV*)rv) + 1;
140 jchar* buf = (jchar*)malloc(len * sizeof(jchar));
144 jcharArray ja = (*env)->NewCharArray(env, len);
145 for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
146 buf[i] = (jchar)SvIV(*esv);
147 (*env)->SetCharArrayRegion(env, ja, 0, len, buf);
149 jv[ix++].l = (jobject)ja;
152 jv[ix++].l = (jobject)(void*)0;
154 else if (SvPOK(sv)) {
155 jsize len = sv_len(sv) / sizeof(jchar);
157 jcharArray ja = (*env)->NewCharArray(env, len);
158 (*env)->SetCharArrayRegion(env, ja, 0, len, (jchar*)SvPV(sv,n_a));
159 jv[ix++].l = (jobject)ja;
162 jv[ix++].l = (jobject)(void*)0;
166 SV* rv = (SV*)SvRV(sv);
168 jv[ix++].l = (jobject)(void*)SvIV(rv);
169 else if (SvTYPE(rv) == SVt_PVAV) {
170 jsize len = av_len((AV*)rv) + 1;
171 jshort* buf = (jshort*)malloc(len * sizeof(jshort));
175 jshortArray ja = (*env)->NewShortArray(env, len);
176 for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
177 buf[i] = (jshort)SvIV(*esv);
178 (*env)->SetShortArrayRegion(env, ja, 0, len, buf);
180 jv[ix++].l = (jobject)ja;
183 jv[ix++].l = (jobject)(void*)0;
185 else if (SvPOK(sv)) {
186 jsize len = sv_len(sv) / sizeof(jshort);
188 jshortArray ja = (*env)->NewShortArray(env, len);
189 (*env)->SetShortArrayRegion(env, ja, 0, len, (jshort*)SvPV(sv,n_a));
190 jv[ix++].l = (jobject)ja;
193 jv[ix++].l = (jobject)(void*)0;
197 SV* rv = (SV*)SvRV(sv);
199 jv[ix++].l = (jobject)(void*)SvIV(rv);
200 else if (SvTYPE(rv) == SVt_PVAV) {
201 jsize len = av_len((AV*)rv) + 1;
202 jint* buf = (jint*)malloc(len * sizeof(jint));
206 jintArray ja = (*env)->NewIntArray(env, len);
207 for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
208 buf[i] = (jint)SvIV(*esv);
209 (*env)->SetIntArrayRegion(env, ja, 0, len, buf);
211 jv[ix++].l = (jobject)ja;
214 jv[ix++].l = (jobject)(void*)0;
216 else if (SvPOK(sv)) {
217 jsize len = sv_len(sv) / sizeof(jint);
219 jintArray ja = (*env)->NewIntArray(env, len);
220 (*env)->SetIntArrayRegion(env, ja, 0, len, (jint*)SvPV(sv,n_a));
221 jv[ix++].l = (jobject)ja;
224 jv[ix++].l = (jobject)(void*)0;
228 SV* rv = (SV*)SvRV(sv);
230 jv[ix++].l = (jobject)(void*)SvIV(rv);
231 else if (SvTYPE(rv) == SVt_PVAV) {
232 jsize len = av_len((AV*)rv) + 1;
233 jlong* buf = (jlong*)malloc(len * sizeof(jlong));
237 jlongArray ja = (*env)->NewLongArray(env, len);
238 for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
239 buf[i] = (jlong)SvNV(*esv);
240 (*env)->SetLongArrayRegion(env, ja, 0, len, buf);
242 jv[ix++].l = (jobject)ja;
245 jv[ix++].l = (jobject)(void*)0;
247 else if (SvPOK(sv)) {
248 jsize len = sv_len(sv) / sizeof(jlong);
250 jlongArray ja = (*env)->NewLongArray(env, len);
251 (*env)->SetLongArrayRegion(env, ja, 0, len, (jlong*)SvPV(sv,n_a));
252 jv[ix++].l = (jobject)ja;
255 jv[ix++].l = (jobject)(void*)0;
259 SV* rv = (SV*)SvRV(sv);
261 jv[ix++].l = (jobject)(void*)SvIV(rv);
262 else if (SvTYPE(rv) == SVt_PVAV) {
263 jsize len = av_len((AV*)rv) + 1;
264 jfloat* buf = (jfloat*)malloc(len * sizeof(jfloat));
268 jfloatArray ja = (*env)->NewFloatArray(env, len);
269 for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
270 buf[i] = (jfloat)SvNV(*esv);
271 (*env)->SetFloatArrayRegion(env, ja, 0, len, buf);
273 jv[ix++].l = (jobject)ja;
276 jv[ix++].l = (jobject)(void*)0;
278 else if (SvPOK(sv)) {
279 jsize len = sv_len(sv) / sizeof(jfloat);
281 jfloatArray ja = (*env)->NewFloatArray(env, len);
282 (*env)->SetFloatArrayRegion(env, ja, 0, len, (jfloat*)SvPV(sv,n_a));
283 jv[ix++].l = (jobject)ja;
286 jv[ix++].l = (jobject)(void*)0;
290 SV* rv = (SV*)SvRV(sv);
292 jv[ix++].l = (jobject)(void*)SvIV(rv);
293 else if (SvTYPE(rv) == SVt_PVAV) {
294 jsize len = av_len((AV*)rv) + 1;
295 jdouble* buf = (jdouble*)malloc(len * sizeof(jdouble));
299 jdoubleArray ja = (*env)->NewDoubleArray(env, len);
300 for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
301 buf[i] = (jdouble)SvNV(*esv);
302 (*env)->SetDoubleArrayRegion(env, ja, 0, len, buf);
304 jv[ix++].l = (jobject)ja;
307 jv[ix++].l = (jobject)(void*)0;
309 else if (SvPOK(sv)) {
310 jsize len = sv_len(sv) / sizeof(jdouble);
312 jdoubleArray ja = (*env)->NewDoubleArray(env, len);
313 (*env)->SetDoubleArrayRegion(env, ja, 0, len, (jdouble*)SvPV(sv,n_a));
314 jv[ix++].l = (jobject)ja;
317 jv[ix++].l = (jobject)(void*)0;
320 while (*s != ';') s++;
322 if (strnEQ(start, "[Ljava/lang/String;", 19)) {
324 SV* rv = (SV*)SvRV(sv);
326 jv[ix++].l = (jobject)(void*)SvIV(rv);
327 else if (SvTYPE(rv) == SVt_PVAV) {
328 jsize len = av_len((AV*)rv) + 1;
331 static jclass jcl = 0;
335 jcl = (*env)->FindClass(env, "java/lang/String");
336 ja = (*env)->NewObjectArray(env, len, jcl, 0);
337 for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) {
338 jobject str = (jobject)(*env)->NewStringUTF(env, SvPV(*esv,n_a));
339 (*env)->SetObjectArrayElement(env, ja, i, str);
341 jv[ix++].l = (jobject)ja;
344 jv[ix++].l = (jobject)(void*)0;
347 jv[ix++].l = (jobject)(void*)0;
353 SV* rv = (SV*)SvRV(sv);
355 jv[ix++].l = (jobject)(void*)SvIV(rv);
356 else if (SvTYPE(rv) == SVt_PVAV) {
357 jsize len = av_len((AV*)rv) + 1;
360 static jclass jcl = 0;
364 jcl = (*env)->FindClass(env, "java/lang/Object");
365 ja = (*env)->NewObjectArray(env, len, jcl, 0);
366 for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) {
367 if (SvROK(*esv) && (rv = SvRV(*esv)) && SvOBJECT(rv)) {
368 (*env)->SetObjectArrayElement(env, ja, i,
369 (jobject)(void*)SvIV(rv));
372 jobject str = (jobject)(*env)->NewStringUTF(env,
374 (*env)->SetObjectArrayElement(env, ja, i, str);
377 jv[ix++].l = (jobject)ja;
380 jv[ix++].l = (jobject)(void*)0;
383 jv[ix++].l = (jobject)(void*)0;
388 if (!SvROK(sv) || strnEQ(s, "java/lang/String;", 17)) {
390 jv[ix++].l = (jobject)(*env)->NewStringUTF(env,
391 (char*) SvPV(sv,n_a));
394 while (*s != ';') s++;
398 jv[ix++].l = (jobject)(void*)SvIV(rv);
402 croak("too many arguments, signature: %s", sig);
405 croak("panic: malformed signature: %s", s-1);
411 croak("not enough arguments, signature: %s", sig);
424 croak("%s not implemented on this architecture", s);
429 constant(char *name, int arg)
452 if (strEQ(name, "JNI_ABORT"))
458 if (strEQ(name, "JNI_COMMIT"))
464 if (strEQ(name, "JNI_ERR"))
470 if (strEQ(name, "JNI_FALSE"))
476 if (strEQ(name, "JNI_H"))
482 if (strEQ(name, "JNI_OK"))
488 if (strEQ(name, "JNI_TRUE"))
536 #define FETCHENV jplcurenv
537 #define RESTOREENV jplcurenv = env
539 MODULE = JNI PACKAGE = JNI
550 JNIEnv * env = FETCHENV;
553 RETVAL = (*env)->GetVersion(env);
560 DefineClass(name, loader, buf)
561 JNIEnv * env = FETCHENV;
562 STRLEN tmplen = NO_INIT;
563 jsize buf_len_ = NO_INIT;
569 RETVAL = (*env)->DefineClass(env, name, loader, buf, (jsize)buf_len_);
577 JNIEnv * env = FETCHENV;
581 RETVAL = (*env)->FindClass(env, name);
589 JNIEnv * env = FETCHENV;
593 RETVAL = (*env)->GetSuperclass(env, sub);
600 IsAssignableFrom(sub, sup)
601 JNIEnv * env = FETCHENV;
606 RETVAL = (*env)->IsAssignableFrom(env, sub, sup);
614 JNIEnv * env = FETCHENV;
618 RETVAL = (*env)->Throw(env, obj);
626 JNIEnv * env = FETCHENV;
631 RETVAL = (*env)->ThrowNew(env, clazz, msg);
639 JNIEnv * env = FETCHENV;
642 RETVAL = (*env)->ExceptionOccurred(env);
650 JNIEnv * env = FETCHENV;
653 (*env)->ExceptionDescribe(env);
659 JNIEnv * env = FETCHENV;
662 (*env)->ExceptionClear(env);
668 JNIEnv * env = FETCHENV;
672 (*env)->FatalError(env, msg);
678 JNIEnv * env = FETCHENV;
682 RETVAL = (*env)->NewGlobalRef(env, lobj);
689 DeleteGlobalRef(gref)
690 JNIEnv * env = FETCHENV;
694 (*env)->DeleteGlobalRef(env, gref);
700 JNIEnv * env = FETCHENV;
704 (*env)->DeleteLocalRef(env, obj);
709 IsSameObject(obj1,obj2)
710 JNIEnv * env = FETCHENV;
715 RETVAL = (*env)->IsSameObject(env, obj1,obj2);
723 JNIEnv * env = FETCHENV;
727 RETVAL = (*env)->AllocObject(env, clazz);
734 NewObject(clazz,methodID,...)
735 JNIEnv * env = FETCHENV;
739 int argoff = $min_args;
742 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
743 RETVAL = (*env)->NewObjectA(env, clazz,methodID,args);
750 NewObjectA(clazz,methodID,args)
751 JNIEnv * env = FETCHENV;
758 RETVAL = (*env)->NewObjectA(env, clazz,methodID,args);
766 JNIEnv * env = FETCHENV;
770 RETVAL = (*env)->GetObjectClass(env, obj);
777 IsInstanceOf(obj,clazz)
778 JNIEnv * env = FETCHENV;
783 RETVAL = (*env)->IsInstanceOf(env, obj,clazz);
790 GetMethodID(clazz,name,sig)
791 JNIEnv * env = FETCHENV;
797 RETVAL = (*env)->GetMethodID(env, clazz,name,sig);
804 CallObjectMethod(obj,methodID,...)
805 JNIEnv * env = FETCHENV;
809 int argoff = $min_args;
812 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
813 RETVAL = (*env)->CallObjectMethodA(env, obj,methodID,args);
820 CallObjectMethodA(obj,methodID,args)
821 JNIEnv * env = FETCHENV;
828 RETVAL = (*env)->CallObjectMethodA(env, obj,methodID,args);
835 CallBooleanMethod(obj,methodID,...)
836 JNIEnv * env = FETCHENV;
840 int argoff = $min_args;
843 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
844 RETVAL = (*env)->CallBooleanMethodA(env, obj,methodID,args);
851 CallBooleanMethodA(obj,methodID, args)
852 JNIEnv * env = FETCHENV;
859 RETVAL = (*env)->CallBooleanMethodA(env, obj,methodID, args);
866 CallByteMethod(obj,methodID,...)
867 JNIEnv * env = FETCHENV;
871 int argoff = $min_args;
874 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
875 RETVAL = (*env)->CallByteMethodA(env, obj,methodID,args);
882 CallByteMethodA(obj,methodID,args)
883 JNIEnv * env = FETCHENV;
890 RETVAL = (*env)->CallByteMethodA(env, obj,methodID,args);
897 CallCharMethod(obj,methodID,...)
898 JNIEnv * env = FETCHENV;
902 int argoff = $min_args;
905 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
906 RETVAL = (*env)->CallCharMethodA(env, obj,methodID,args);
913 CallCharMethodA(obj,methodID,args)
914 JNIEnv * env = FETCHENV;
921 RETVAL = (*env)->CallCharMethodA(env, obj,methodID,args);
928 CallShortMethod(obj,methodID,...)
929 JNIEnv * env = FETCHENV;
933 int argoff = $min_args;
936 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
937 RETVAL = (*env)->CallShortMethodA(env, obj,methodID,args);
944 CallShortMethodA(obj,methodID,args)
945 JNIEnv * env = FETCHENV;
952 RETVAL = (*env)->CallShortMethodA(env, obj,methodID,args);
959 CallIntMethod(obj,methodID,...)
960 JNIEnv * env = FETCHENV;
964 int argoff = $min_args;
967 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
968 RETVAL = (*env)->CallIntMethodA(env, obj,methodID,args);
975 CallIntMethodA(obj,methodID,args)
976 JNIEnv * env = FETCHENV;
983 RETVAL = (*env)->CallIntMethodA(env, obj,methodID,args);
990 CallLongMethod(obj,methodID,...)
991 JNIEnv * env = FETCHENV;
995 int argoff = $min_args;
998 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
999 RETVAL = (*env)->CallLongMethodA(env, obj,methodID,args);
1006 CallLongMethodA(obj,methodID,args)
1007 JNIEnv * env = FETCHENV;
1014 RETVAL = (*env)->CallLongMethodA(env, obj,methodID,args);
1021 CallFloatMethod(obj,methodID,...)
1022 JNIEnv * env = FETCHENV;
1026 int argoff = $min_args;
1029 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1030 RETVAL = (*env)->CallFloatMethodA(env, obj,methodID,args);
1037 CallFloatMethodA(obj,methodID,args)
1038 JNIEnv * env = FETCHENV;
1045 RETVAL = (*env)->CallFloatMethodA(env, obj,methodID,args);
1052 CallDoubleMethod(obj,methodID,...)
1053 JNIEnv * env = FETCHENV;
1057 int argoff = $min_args;
1060 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1061 RETVAL = (*env)->CallDoubleMethodA(env, obj,methodID,args);
1068 CallDoubleMethodA(obj,methodID,args)
1069 JNIEnv * env = FETCHENV;
1076 RETVAL = (*env)->CallDoubleMethodA(env, obj,methodID,args);
1083 CallVoidMethod(obj,methodID,...)
1084 JNIEnv * env = FETCHENV;
1088 int argoff = $min_args;
1091 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1092 (*env)->CallVoidMethodA(env, obj,methodID,args);
1097 CallVoidMethodA(obj,methodID,args)
1098 JNIEnv * env = FETCHENV;
1105 (*env)->CallVoidMethodA(env, obj,methodID,args);
1110 CallNonvirtualObjectMethod(obj,clazz,methodID,...)
1111 JNIEnv * env = FETCHENV;
1116 int argoff = $min_args;
1119 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1120 RETVAL = (*env)->CallNonvirtualObjectMethodA(env, obj,clazz,methodID,args);
1127 CallNonvirtualObjectMethodA(obj,clazz,methodID,args)
1128 JNIEnv * env = FETCHENV;
1136 RETVAL = (*env)->CallNonvirtualObjectMethodA(env, obj,clazz,methodID,args);
1143 CallNonvirtualBooleanMethod(obj,clazz,methodID,...)
1144 JNIEnv * env = FETCHENV;
1149 int argoff = $min_args;
1152 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1153 RETVAL = (*env)->CallNonvirtualBooleanMethodA(env, obj,clazz,methodID,args);
1160 CallNonvirtualBooleanMethodA(obj,clazz,methodID, args)
1161 JNIEnv * env = FETCHENV;
1169 RETVAL = (*env)->CallNonvirtualBooleanMethodA(env, obj,clazz,methodID, args);
1176 CallNonvirtualByteMethod(obj,clazz,methodID,...)
1177 JNIEnv * env = FETCHENV;
1182 int argoff = $min_args;
1185 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1186 RETVAL = (*env)->CallNonvirtualByteMethodA(env, obj,clazz,methodID,args);
1193 CallNonvirtualByteMethodA(obj,clazz,methodID,args)
1194 JNIEnv * env = FETCHENV;
1202 RETVAL = (*env)->CallNonvirtualByteMethodA(env, obj,clazz,methodID,args);
1209 CallNonvirtualCharMethod(obj,clazz,methodID,...)
1210 JNIEnv * env = FETCHENV;
1215 int argoff = $min_args;
1218 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1219 RETVAL = (*env)->CallNonvirtualCharMethodA(env, obj,clazz,methodID,args);
1226 CallNonvirtualCharMethodA(obj,clazz,methodID,args)
1227 JNIEnv * env = FETCHENV;
1235 RETVAL = (*env)->CallNonvirtualCharMethodA(env, obj,clazz,methodID,args);
1242 CallNonvirtualShortMethod(obj,clazz,methodID,...)
1243 JNIEnv * env = FETCHENV;
1248 int argoff = $min_args;
1251 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1252 RETVAL = (*env)->CallNonvirtualShortMethodA(env, obj,clazz,methodID,args);
1259 CallNonvirtualShortMethodA(obj,clazz,methodID,args)
1260 JNIEnv * env = FETCHENV;
1268 RETVAL = (*env)->CallNonvirtualShortMethodA(env, obj,clazz,methodID,args);
1275 CallNonvirtualIntMethod(obj,clazz,methodID,...)
1276 JNIEnv * env = FETCHENV;
1281 int argoff = $min_args;
1284 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1285 RETVAL = (*env)->CallNonvirtualIntMethodA(env, obj,clazz,methodID,args);
1292 CallNonvirtualIntMethodA(obj,clazz,methodID,args)
1293 JNIEnv * env = FETCHENV;
1301 RETVAL = (*env)->CallNonvirtualIntMethodA(env, obj,clazz,methodID,args);
1308 CallNonvirtualLongMethod(obj,clazz,methodID,...)
1309 JNIEnv * env = FETCHENV;
1314 int argoff = $min_args;
1317 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1318 RETVAL = (*env)->CallNonvirtualLongMethodA(env, obj,clazz,methodID,args);
1325 CallNonvirtualLongMethodA(obj,clazz,methodID,args)
1326 JNIEnv * env = FETCHENV;
1334 RETVAL = (*env)->CallNonvirtualLongMethodA(env, obj,clazz,methodID,args);
1341 CallNonvirtualFloatMethod(obj,clazz,methodID,...)
1342 JNIEnv * env = FETCHENV;
1347 int argoff = $min_args;
1350 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1351 RETVAL = (*env)->CallNonvirtualFloatMethodA(env, obj,clazz,methodID,args);
1358 CallNonvirtualFloatMethodA(obj,clazz,methodID,args)
1359 JNIEnv * env = FETCHENV;
1367 RETVAL = (*env)->CallNonvirtualFloatMethodA(env, obj,clazz,methodID,args);
1374 CallNonvirtualDoubleMethod(obj,clazz,methodID,...)
1375 JNIEnv * env = FETCHENV;
1380 int argoff = $min_args;
1383 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1384 RETVAL = (*env)->CallNonvirtualDoubleMethodA(env, obj,clazz,methodID,args);
1391 CallNonvirtualDoubleMethodA(obj,clazz,methodID,args)
1392 JNIEnv * env = FETCHENV;
1400 RETVAL = (*env)->CallNonvirtualDoubleMethodA(env, obj,clazz,methodID,args);
1407 CallNonvirtualVoidMethod(obj,clazz,methodID,...)
1408 JNIEnv * env = FETCHENV;
1413 int argoff = $min_args;
1416 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1417 (*env)->CallNonvirtualVoidMethodA(env, obj,clazz,methodID,args);
1422 CallNonvirtualVoidMethodA(obj,clazz,methodID,args)
1423 JNIEnv * env = FETCHENV;
1431 (*env)->CallNonvirtualVoidMethodA(env, obj,clazz,methodID,args);
1436 GetFieldID(clazz,name,sig)
1437 JNIEnv * env = FETCHENV;
1443 RETVAL = (*env)->GetFieldID(env, clazz,name,sig);
1450 GetObjectField(obj,fieldID)
1451 JNIEnv * env = FETCHENV;
1457 RETVAL = (*env)->GetObjectField(env, obj,fieldID);
1464 GetBooleanField(obj,fieldID)
1465 JNIEnv * env = FETCHENV;
1471 RETVAL = (*env)->GetBooleanField(env, obj,fieldID);
1478 GetByteField(obj,fieldID)
1479 JNIEnv * env = FETCHENV;
1485 RETVAL = (*env)->GetByteField(env, obj,fieldID);
1492 GetCharField(obj,fieldID)
1493 JNIEnv * env = FETCHENV;
1499 RETVAL = (*env)->GetCharField(env, obj,fieldID);
1506 GetShortField(obj,fieldID)
1507 JNIEnv * env = FETCHENV;
1513 RETVAL = (*env)->GetShortField(env, obj,fieldID);
1520 GetIntField(obj,fieldID)
1521 JNIEnv * env = FETCHENV;
1527 RETVAL = (*env)->GetIntField(env, obj,fieldID);
1534 GetLongField(obj,fieldID)
1535 JNIEnv * env = FETCHENV;
1541 RETVAL = (*env)->GetLongField(env, obj,fieldID);
1548 GetFloatField(obj,fieldID)
1549 JNIEnv * env = FETCHENV;
1555 RETVAL = (*env)->GetFloatField(env, obj,fieldID);
1562 GetDoubleField(obj,fieldID)
1563 JNIEnv * env = FETCHENV;
1569 RETVAL = (*env)->GetDoubleField(env, obj,fieldID);
1576 SetObjectField(obj,fieldID,val)
1577 JNIEnv * env = FETCHENV;
1584 (*env)->SetObjectField(env, obj,fieldID,val);
1589 SetBooleanField(obj,fieldID,val)
1590 JNIEnv * env = FETCHENV;
1597 (*env)->SetBooleanField(env, obj,fieldID,val);
1602 SetByteField(obj,fieldID,val)
1603 JNIEnv * env = FETCHENV;
1610 (*env)->SetByteField(env, obj,fieldID,val);
1615 SetCharField(obj,fieldID,val)
1616 JNIEnv * env = FETCHENV;
1623 (*env)->SetCharField(env, obj,fieldID,val);
1628 SetShortField(obj,fieldID,val)
1629 JNIEnv * env = FETCHENV;
1636 (*env)->SetShortField(env, obj,fieldID,val);
1641 SetIntField(obj,fieldID,val)
1642 JNIEnv * env = FETCHENV;
1649 (*env)->SetIntField(env, obj,fieldID,val);
1654 SetLongField(obj,fieldID,val)
1655 JNIEnv * env = FETCHENV;
1662 (*env)->SetLongField(env, obj,fieldID,val);
1667 SetFloatField(obj,fieldID,val)
1668 JNIEnv * env = FETCHENV;
1675 (*env)->SetFloatField(env, obj,fieldID,val);
1680 SetDoubleField(obj,fieldID,val)
1681 JNIEnv * env = FETCHENV;
1688 (*env)->SetDoubleField(env, obj,fieldID,val);
1693 GetStaticMethodID(clazz,name,sig)
1694 JNIEnv * env = FETCHENV;
1700 RETVAL = (*env)->GetStaticMethodID(env, clazz,name,sig);
1707 CallStaticObjectMethod(clazz,methodID,...)
1708 JNIEnv * env = FETCHENV;
1712 int argoff = $min_args;
1715 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1716 RETVAL = (*env)->CallStaticObjectMethodA(env, clazz,methodID,args);
1723 CallStaticObjectMethodA(clazz,methodID,args)
1724 JNIEnv * env = FETCHENV;
1731 RETVAL = (*env)->CallStaticObjectMethodA(env, clazz,methodID,args);
1738 CallStaticBooleanMethod(clazz,methodID,...)
1739 JNIEnv * env = FETCHENV;
1743 int argoff = $min_args;
1746 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1747 RETVAL = (*env)->CallStaticBooleanMethodA(env, clazz,methodID,args);
1754 CallStaticBooleanMethodA(clazz,methodID,args)
1755 JNIEnv * env = FETCHENV;
1762 RETVAL = (*env)->CallStaticBooleanMethodA(env, clazz,methodID,args);
1769 CallStaticByteMethod(clazz,methodID,...)
1770 JNIEnv * env = FETCHENV;
1774 int argoff = $min_args;
1777 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1778 RETVAL = (*env)->CallStaticByteMethodA(env, clazz,methodID,args);
1785 CallStaticByteMethodA(clazz,methodID,args)
1786 JNIEnv * env = FETCHENV;
1793 RETVAL = (*env)->CallStaticByteMethodA(env, clazz,methodID,args);
1800 CallStaticCharMethod(clazz,methodID,...)
1801 JNIEnv * env = FETCHENV;
1805 int argoff = $min_args;
1808 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1809 RETVAL = (*env)->CallStaticCharMethodA(env, clazz,methodID,args);
1816 CallStaticCharMethodA(clazz,methodID,args)
1817 JNIEnv * env = FETCHENV;
1824 RETVAL = (*env)->CallStaticCharMethodA(env, clazz,methodID,args);
1831 CallStaticShortMethod(clazz,methodID,...)
1832 JNIEnv * env = FETCHENV;
1836 int argoff = $min_args;
1839 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1840 RETVAL = (*env)->CallStaticShortMethodA(env, clazz,methodID,args);
1847 CallStaticShortMethodA(clazz,methodID,args)
1848 JNIEnv * env = FETCHENV;
1855 RETVAL = (*env)->CallStaticShortMethodA(env, clazz,methodID,args);
1862 CallStaticIntMethod(clazz,methodID,...)
1863 JNIEnv * env = FETCHENV;
1867 int argoff = $min_args;
1870 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1871 RETVAL = (*env)->CallStaticIntMethodA(env, clazz,methodID,args);
1878 CallStaticIntMethodA(clazz,methodID,args)
1879 JNIEnv * env = FETCHENV;
1886 RETVAL = (*env)->CallStaticIntMethodA(env, clazz,methodID,args);
1893 CallStaticLongMethod(clazz,methodID,...)
1894 JNIEnv * env = FETCHENV;
1898 int argoff = $min_args;
1901 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1902 RETVAL = (*env)->CallStaticLongMethodA(env, clazz,methodID,args);
1909 CallStaticLongMethodA(clazz,methodID,args)
1910 JNIEnv * env = FETCHENV;
1917 RETVAL = (*env)->CallStaticLongMethodA(env, clazz,methodID,args);
1924 CallStaticFloatMethod(clazz,methodID,...)
1925 JNIEnv * env = FETCHENV;
1929 int argoff = $min_args;
1932 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1933 RETVAL = (*env)->CallStaticFloatMethodA(env, clazz,methodID,args);
1940 CallStaticFloatMethodA(clazz,methodID,args)
1941 JNIEnv * env = FETCHENV;
1948 RETVAL = (*env)->CallStaticFloatMethodA(env, clazz,methodID,args);
1955 CallStaticDoubleMethod(clazz,methodID,...)
1956 JNIEnv * env = FETCHENV;
1960 int argoff = $min_args;
1963 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1964 RETVAL = (*env)->CallStaticDoubleMethodA(env, clazz,methodID,args);
1971 CallStaticDoubleMethodA(clazz,methodID,args)
1972 JNIEnv * env = FETCHENV;
1979 RETVAL = (*env)->CallStaticDoubleMethodA(env, clazz,methodID,args);
1986 CallStaticVoidMethod(cls,methodID,...)
1987 JNIEnv * env = FETCHENV;
1991 int argoff = $min_args;
1994 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1995 (*env)->CallStaticVoidMethodA(env, cls,methodID,args);
2000 CallStaticVoidMethodA(cls,methodID,args)
2001 JNIEnv * env = FETCHENV;
2008 (*env)->CallStaticVoidMethodA(env, cls,methodID,args);
2013 GetStaticFieldID(clazz,name,sig)
2014 JNIEnv * env = FETCHENV;
2020 RETVAL = (*env)->GetStaticFieldID(env, clazz,name,sig);
2027 GetStaticObjectField(clazz,fieldID)
2028 JNIEnv * env = FETCHENV;
2034 RETVAL = (*env)->GetStaticObjectField(env, clazz,fieldID);
2041 GetStaticBooleanField(clazz,fieldID)
2042 JNIEnv * env = FETCHENV;
2048 RETVAL = (*env)->GetStaticBooleanField(env, clazz,fieldID);
2055 GetStaticByteField(clazz,fieldID)
2056 JNIEnv * env = FETCHENV;
2062 RETVAL = (*env)->GetStaticByteField(env, clazz,fieldID);
2069 GetStaticCharField(clazz,fieldID)
2070 JNIEnv * env = FETCHENV;
2076 RETVAL = (*env)->GetStaticCharField(env, clazz,fieldID);
2083 GetStaticShortField(clazz,fieldID)
2084 JNIEnv * env = FETCHENV;
2090 RETVAL = (*env)->GetStaticShortField(env, clazz,fieldID);
2097 GetStaticIntField(clazz,fieldID)
2098 JNIEnv * env = FETCHENV;
2104 RETVAL = (*env)->GetStaticIntField(env, clazz,fieldID);
2111 GetStaticLongField(clazz,fieldID)
2112 JNIEnv * env = FETCHENV;
2118 RETVAL = (*env)->GetStaticLongField(env, clazz,fieldID);
2125 GetStaticFloatField(clazz,fieldID)
2126 JNIEnv * env = FETCHENV;
2132 RETVAL = (*env)->GetStaticFloatField(env, clazz,fieldID);
2139 GetStaticDoubleField(clazz,fieldID)
2140 JNIEnv * env = FETCHENV;
2146 RETVAL = (*env)->GetStaticDoubleField(env, clazz,fieldID);
2153 SetStaticObjectField(clazz,fieldID,value)
2154 JNIEnv * env = FETCHENV;
2161 (*env)->SetStaticObjectField(env, clazz,fieldID,value);
2166 SetStaticBooleanField(clazz,fieldID,value)
2167 JNIEnv * env = FETCHENV;
2174 (*env)->SetStaticBooleanField(env, clazz,fieldID,value);
2179 SetStaticByteField(clazz,fieldID,value)
2180 JNIEnv * env = FETCHENV;
2187 (*env)->SetStaticByteField(env, clazz,fieldID,value);
2192 SetStaticCharField(clazz,fieldID,value)
2193 JNIEnv * env = FETCHENV;
2200 (*env)->SetStaticCharField(env, clazz,fieldID,value);
2205 SetStaticShortField(clazz,fieldID,value)
2206 JNIEnv * env = FETCHENV;
2213 (*env)->SetStaticShortField(env, clazz,fieldID,value);
2218 SetStaticIntField(clazz,fieldID,value)
2219 JNIEnv * env = FETCHENV;
2226 (*env)->SetStaticIntField(env, clazz,fieldID,value);
2231 SetStaticLongField(clazz,fieldID,value)
2232 JNIEnv * env = FETCHENV;
2239 (*env)->SetStaticLongField(env, clazz,fieldID,value);
2244 SetStaticFloatField(clazz,fieldID,value)
2245 JNIEnv * env = FETCHENV;
2252 (*env)->SetStaticFloatField(env, clazz,fieldID,value);
2257 SetStaticDoubleField(clazz,fieldID,value)
2258 JNIEnv * env = FETCHENV;
2265 (*env)->SetStaticDoubleField(env, clazz,fieldID,value);
2271 JNIEnv * env = FETCHENV;
2272 STRLEN tmplen = NO_INIT;
2273 jsize unicode_len_ = NO_INIT;
2274 const jchar * unicode
2277 RETVAL = (*env)->NewString(env, unicode, unicode_len_);
2284 GetStringLength(str)
2285 JNIEnv * env = FETCHENV;
2289 RETVAL = (*env)->GetStringLength(env, str);
2297 JNIEnv * env = FETCHENV;
2299 jboolean isCopy = NO_INIT;
2300 jsize RETVAL_len_ = NO_INIT;
2303 RETVAL = (*env)->GetStringChars(env, str,&isCopy);
2304 RETVAL_len_ = (*env)->GetStringLength(env, str);
2310 (*env)->ReleaseStringChars(env, str,RETVAL);
2314 JNIEnv * env = FETCHENV;
2318 RETVAL = (*env)->NewStringUTF(env, utf);
2325 GetStringUTFLength(str)
2326 JNIEnv * env = FETCHENV;
2330 RETVAL = (*env)->GetStringUTFLength(env, str);
2337 GetStringUTFChars(str)
2338 JNIEnv * env = FETCHENV;
2340 jboolean isCopy = NO_INIT;
2343 RETVAL = (*env)->GetStringUTFChars(env, str,&isCopy);
2349 (*env)->ReleaseStringUTFChars(env, str, RETVAL);
2353 GetArrayLength(array)
2354 JNIEnv * env = FETCHENV;
2358 RETVAL = (*env)->GetArrayLength(env, array);
2365 NewObjectArray(len,clazz,init)
2366 JNIEnv * env = FETCHENV;
2372 RETVAL = (*env)->NewObjectArray(env, len,clazz,init);
2379 GetObjectArrayElement(array,index)
2380 JNIEnv * env = FETCHENV;
2385 RETVAL = (*env)->GetObjectArrayElement(env, array,index);
2392 SetObjectArrayElement(array,index,val)
2393 JNIEnv * env = FETCHENV;
2399 (*env)->SetObjectArrayElement(env, array,index,val);
2404 NewBooleanArray(len)
2405 JNIEnv * env = FETCHENV;
2409 RETVAL = (*env)->NewBooleanArray(env, len);
2417 JNIEnv * env = FETCHENV;
2421 RETVAL = (*env)->NewByteArray(env, len);
2429 JNIEnv * env = FETCHENV;
2433 RETVAL = (*env)->NewCharArray(env, len);
2441 JNIEnv * env = FETCHENV;
2445 RETVAL = (*env)->NewShortArray(env, len);
2453 JNIEnv * env = FETCHENV;
2457 RETVAL = (*env)->NewIntArray(env, len);
2465 JNIEnv * env = FETCHENV;
2469 RETVAL = (*env)->NewLongArray(env, len);
2477 JNIEnv * env = FETCHENV;
2481 RETVAL = (*env)->NewFloatArray(env, len);
2489 JNIEnv * env = FETCHENV;
2493 RETVAL = (*env)->NewDoubleArray(env, len);
2500 GetBooleanArrayElements(array)
2501 JNIEnv * env = FETCHENV;
2502 jsize RETVAL_len_ = NO_INIT;
2504 jboolean isCopy = NO_INIT;
2507 RETVAL = (*env)->GetBooleanArrayElements(env, array,&isCopy);
2508 RETVAL_len_ = (*env)->GetArrayLength(env, array);
2509 if (GIMME == G_ARRAY) {
2511 jboolean* r = RETVAL;
2512 EXTEND(sp, RETVAL_len_);
2513 for (i = RETVAL_len_; i; --i) {
2514 PUSHs(sv_2mortal(newSViv(*r++)));
2519 PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,
2520 (STRLEN)RETVAL_len_ * sizeof(jboolean))));
2525 (*env)->ReleaseBooleanArrayElements(env, array,RETVAL,JNI_ABORT);
2530 GetByteArrayElements(array)
2531 JNIEnv * env = FETCHENV;
2532 jsize RETVAL_len_ = NO_INIT;
2534 jboolean isCopy = NO_INIT;
2537 RETVAL = (*env)->GetByteArrayElements(env, array,&isCopy);
2538 RETVAL_len_ = (*env)->GetArrayLength(env, array);
2539 if (GIMME == G_ARRAY) {
2542 EXTEND(sp, RETVAL_len_);
2543 for (i = RETVAL_len_; i; --i) {
2544 PUSHs(sv_2mortal(newSViv(*r++)));
2549 PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,
2550 (STRLEN)RETVAL_len_ * sizeof(jbyte))));
2555 (*env)->ReleaseByteArrayElements(env, array,RETVAL,JNI_ABORT);
2560 GetCharArrayElements(array)
2561 JNIEnv * env = FETCHENV;
2562 jsize RETVAL_len_ = NO_INIT;
2564 jboolean isCopy = NO_INIT;
2567 RETVAL = (*env)->GetCharArrayElements(env, array,&isCopy);
2568 RETVAL_len_ = (*env)->GetArrayLength(env, array);
2569 if (GIMME == G_ARRAY) {
2572 EXTEND(sp, RETVAL_len_);
2573 for (i = RETVAL_len_; i; --i) {
2574 PUSHs(sv_2mortal(newSViv(*r++)));
2579 PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,
2580 (STRLEN)RETVAL_len_ * sizeof(jchar))));
2585 (*env)->ReleaseCharArrayElements(env, array,RETVAL,JNI_ABORT);
2590 GetShortArrayElements(array)
2591 JNIEnv * env = FETCHENV;
2592 jsize RETVAL_len_ = NO_INIT;
2594 jboolean isCopy = NO_INIT;
2597 RETVAL = (*env)->GetShortArrayElements(env, array,&isCopy);
2598 RETVAL_len_ = (*env)->GetArrayLength(env, array);
2599 if (GIMME == G_ARRAY) {
2602 EXTEND(sp, RETVAL_len_);
2603 for (i = RETVAL_len_; i; --i) {
2604 PUSHs(sv_2mortal(newSViv(*r++)));
2609 PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,
2610 (STRLEN)RETVAL_len_ * sizeof(jshort))));
2615 (*env)->ReleaseShortArrayElements(env, array,RETVAL,JNI_ABORT);
2620 GetIntArrayElements(array)
2621 JNIEnv * env = FETCHENV;
2622 jsize RETVAL_len_ = NO_INIT;
2624 jboolean isCopy = NO_INIT;
2627 RETVAL = (*env)->GetIntArrayElements(env, array,&isCopy);
2628 RETVAL_len_ = (*env)->GetArrayLength(env, array);
2629 if (GIMME == G_ARRAY) {
2632 EXTEND(sp, RETVAL_len_);
2633 for (i = RETVAL_len_; i; --i) {
2634 PUSHs(sv_2mortal(newSViv(*r++)));
2639 PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,
2640 (STRLEN)RETVAL_len_ * sizeof(jint))));
2645 (*env)->ReleaseIntArrayElements(env, array,RETVAL,JNI_ABORT);
2650 GetLongArrayElements(array)
2651 JNIEnv * env = FETCHENV;
2652 jsize RETVAL_len_ = NO_INIT;
2654 jboolean isCopy = NO_INIT;
2657 RETVAL = (*env)->GetLongArrayElements(env, array,&isCopy);
2658 RETVAL_len_ = (*env)->GetArrayLength(env, array);
2659 if (GIMME == G_ARRAY) {
2662 EXTEND(sp, RETVAL_len_);
2663 for (i = RETVAL_len_; i; --i) {
2664 PUSHs(sv_2mortal(newSViv(*r++)));
2669 PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,
2670 (STRLEN)RETVAL_len_ * sizeof(jlong))));
2675 (*env)->ReleaseLongArrayElements(env, array,RETVAL,JNI_ABORT);
2680 GetFloatArrayElements(array)
2681 JNIEnv * env = FETCHENV;
2682 jsize RETVAL_len_ = NO_INIT;
2684 jboolean isCopy = NO_INIT;
2687 RETVAL = (*env)->GetFloatArrayElements(env, array,&isCopy);
2688 RETVAL_len_ = (*env)->GetArrayLength(env, array);
2689 if (GIMME == G_ARRAY) {
2692 EXTEND(sp, RETVAL_len_);
2693 for (i = RETVAL_len_; i; --i) {
2694 PUSHs(sv_2mortal(newSVnv(*r++)));
2699 PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,
2700 (STRLEN)RETVAL_len_ * sizeof(jfloat))));
2705 (*env)->ReleaseFloatArrayElements(env, array,RETVAL,JNI_ABORT);
2710 GetDoubleArrayElements(array)
2711 JNIEnv * env = FETCHENV;
2712 jsize RETVAL_len_ = NO_INIT;
2714 jboolean isCopy = NO_INIT;
2717 RETVAL = (*env)->GetDoubleArrayElements(env, array,&isCopy);
2718 RETVAL_len_ = (*env)->GetArrayLength(env, array);
2719 if (GIMME == G_ARRAY) {
2721 jdouble* r = RETVAL;
2722 EXTEND(sp, RETVAL_len_);
2723 for (i = RETVAL_len_; i; --i) {
2724 PUSHs(sv_2mortal(newSVnv(*r++)));
2729 PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,
2730 (STRLEN)RETVAL_len_ * sizeof(jdouble))));
2735 (*env)->ReleaseDoubleArrayElements(env, array,RETVAL,JNI_ABORT);
2740 GetBooleanArrayRegion(array,start,len,buf)
2741 JNIEnv * env = FETCHENV;
2745 STRLEN tmplen = len * sizeof(jboolean) + 1;
2746 char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);
2747 jboolean * buf = (jboolean*)sv_grow(ST(3),len * sizeof(jboolean)+1);
2750 (*env)->GetBooleanArrayRegion(env, array,start,len,buf);
2751 SvCUR_set(ST(3), len * sizeof(jboolean));
2752 *SvEND(ST(3)) = '\0';
2757 GetByteArrayRegion(array,start,len,buf)
2758 JNIEnv * env = FETCHENV;
2762 STRLEN tmplen = len * sizeof(jboolean) + 1;
2763 char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);
2764 jbyte * buf = (jbyte*)sv_grow(ST(3),len * sizeof(jbyte)+1);
2767 (*env)->GetByteArrayRegion(env, array,start,len,buf);
2768 SvCUR_set(ST(3), len * sizeof(jbyte));
2769 *SvEND(ST(3)) = '\0';
2774 GetCharArrayRegion(array,start,len,buf)
2775 JNIEnv * env = FETCHENV;
2779 STRLEN tmplen = len * sizeof(jboolean) + 1;
2780 char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);
2781 jchar * buf = (jchar*)sv_grow(ST(3),len * sizeof(jchar)+1);
2784 (*env)->GetCharArrayRegion(env, array,start,len,buf);
2785 SvCUR_set(ST(3), len * sizeof(jchar));
2786 *SvEND(ST(3)) = '\0';
2791 GetShortArrayRegion(array,start,len,buf)
2792 JNIEnv * env = FETCHENV;
2796 STRLEN tmplen = len * sizeof(jboolean) + 1;
2797 char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);
2798 jshort * buf = (jshort*)sv_grow(ST(3),len * sizeof(jshort)+1);
2801 (*env)->GetShortArrayRegion(env, array,start,len,buf);
2802 SvCUR_set(ST(3), len * sizeof(jshort));
2803 *SvEND(ST(3)) = '\0';
2808 GetIntArrayRegion(array,start,len,buf)
2809 JNIEnv * env = FETCHENV;
2813 STRLEN tmplen = len * sizeof(jboolean) + 1;
2814 char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);
2815 jint * buf = (jint*)sv_grow(ST(3),len * sizeof(jint)+1);
2818 (*env)->GetIntArrayRegion(env, array,start,len,buf);
2819 SvCUR_set(ST(3), len * sizeof(jint));
2820 *SvEND(ST(3)) = '\0';
2825 GetLongArrayRegion(array,start,len,buf)
2826 JNIEnv * env = FETCHENV;
2830 STRLEN tmplen = len * sizeof(jboolean) + 1;
2831 char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);
2832 jlong * buf = (jlong*)sv_grow(ST(3),len * sizeof(jlong)+1);
2835 (*env)->GetLongArrayRegion(env, array,start,len,buf);
2836 SvCUR_set(ST(3), len * sizeof(jlong));
2837 *SvEND(ST(3)) = '\0';
2842 GetFloatArrayRegion(array,start,len,buf)
2843 JNIEnv * env = FETCHENV;
2847 STRLEN tmplen = len * sizeof(jboolean) + 1;
2848 char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);
2849 jfloat * buf = (jfloat*)sv_grow(ST(3),len * sizeof(jfloat)+1);
2852 (*env)->GetFloatArrayRegion(env, array,start,len,buf);
2853 SvCUR_set(ST(3), len * sizeof(jfloat));
2854 *SvEND(ST(3)) = '\0';
2859 GetDoubleArrayRegion(array,start,len,buf)
2860 JNIEnv * env = FETCHENV;
2864 STRLEN tmplen = len * sizeof(jboolean) + 1;
2865 char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);
2866 jdouble * buf = (jdouble*)sv_grow(ST(3),len * sizeof(jdouble)+1);
2869 (*env)->GetDoubleArrayRegion(env, array,start,len,buf);
2870 SvCUR_set(ST(3), len * sizeof(jdouble));
2871 *SvEND(ST(3)) = '\0';
2876 SetBooleanArrayRegion(array,start,len,buf)
2877 JNIEnv * env = FETCHENV;
2878 STRLEN tmplen = NO_INIT;
2882 jsize buf_len_ = NO_INIT;
2887 croak("string is too short");
2888 else if (buf_len_ > len && PL_dowarn)
2889 warn("string is too long");
2890 (*env)->SetBooleanArrayRegion(env, array,start,len,buf);
2895 SetByteArrayRegion(array,start,len,buf)
2896 JNIEnv * env = FETCHENV;
2897 STRLEN tmplen = NO_INIT;
2901 jsize buf_len_ = NO_INIT;
2906 croak("string is too short");
2907 else if (buf_len_ > len && PL_dowarn)
2908 warn("string is too long");
2909 (*env)->SetByteArrayRegion(env, array,start,len,buf);
2914 SetCharArrayRegion(array,start,len,buf)
2915 JNIEnv * env = FETCHENV;
2916 STRLEN tmplen = NO_INIT;
2920 jsize buf_len_ = NO_INIT;
2925 croak("string is too short");
2926 else if (buf_len_ > len && PL_dowarn)
2927 warn("string is too long");
2928 (*env)->SetCharArrayRegion(env, array,start,len,buf);
2933 SetShortArrayRegion(array,start,len,buf)
2934 JNIEnv * env = FETCHENV;
2935 STRLEN tmplen = NO_INIT;
2939 jsize buf_len_ = NO_INIT;
2944 croak("string is too short");
2945 else if (buf_len_ > len && PL_dowarn)
2946 warn("string is too long");
2947 (*env)->SetShortArrayRegion(env, array,start,len,buf);
2952 SetIntArrayRegion(array,start,len,buf)
2953 JNIEnv * env = FETCHENV;
2954 STRLEN tmplen = NO_INIT;
2958 jsize buf_len_ = NO_INIT;
2963 croak("string is too short");
2964 else if (buf_len_ > len && PL_dowarn)
2965 warn("string is too long");
2966 (*env)->SetIntArrayRegion(env, array,start,len,buf);
2971 SetLongArrayRegion(array,start,len,buf)
2972 JNIEnv * env = FETCHENV;
2973 STRLEN tmplen = NO_INIT;
2977 jsize buf_len_ = NO_INIT;
2982 croak("string is too short");
2983 else if (buf_len_ > len && PL_dowarn)
2984 warn("string is too long");
2985 (*env)->SetLongArrayRegion(env, array,start,len,buf);
2990 SetFloatArrayRegion(array,start,len,buf)
2991 JNIEnv * env = FETCHENV;
2992 STRLEN tmplen = NO_INIT;
2996 jsize buf_len_ = NO_INIT;
3001 croak("string is too short");
3002 else if (buf_len_ > len && PL_dowarn)
3003 warn("string is too long");
3004 (*env)->SetFloatArrayRegion(env, array,start,len,buf);
3009 SetDoubleArrayRegion(array,start,len,buf)
3010 JNIEnv * env = FETCHENV;
3011 STRLEN tmplen = NO_INIT;
3015 jsize buf_len_ = NO_INIT;
3020 croak("string is too short");
3021 else if (buf_len_ > len && PL_dowarn)
3022 warn("string is too long");
3023 (*env)->SetDoubleArrayRegion(env, array,start,len,buf);
3028 RegisterNatives(clazz,methods,nMethods)
3029 JNIEnv * env = FETCHENV;
3031 JNINativeMethod * methods
3035 RETVAL = (*env)->RegisterNatives(env, clazz,methods,nMethods);
3039 UnregisterNatives(clazz)
3040 JNIEnv * env = FETCHENV;
3044 RETVAL = (*env)->UnregisterNatives(env, clazz);
3051 JNIEnv * env = FETCHENV;
3055 RETVAL = (*env)->MonitorEnter(env, obj);
3063 JNIEnv * env = FETCHENV;
3067 RETVAL = (*env)->MonitorExit(env, obj);
3075 JNIEnv * env = FETCHENV;
3078 if (env) { /* We're embedded. */
3079 if ((*env)->GetJavaVM(env, &RETVAL) < 0)
3082 else { /* We're embedding. */
3083 JDK1_1InitArgs vm_args;
3088 lib = SvPV(*mark, PL_na);
3093 if (!dlopen("libjava.so", RTLD_LAZY|RTLD_GLOBAL)) {
3094 if (lib && !dlopen(lib, RTLD_LAZY|RTLD_GLOBAL))
3095 croak("Can't load libjava.so");
3098 JNI_GetDefaultJavaVMInitArgs(&vm_args);
3099 vm_args.exit = &call_my_exit;
3101 char *s = SvPV(*++mark,PL_na);
3103 if (strEQ(s, "checkSource"))
3104 vm_args.checkSource = (jint)SvIV(*++mark);
3105 else if (strEQ(s, "nativeStackSize"))
3106 vm_args.nativeStackSize = (jint)SvIV(*++mark);
3107 else if (strEQ(s, "javaStackSize"))
3108 vm_args.javaStackSize = (jint)SvIV(*++mark);
3109 else if (strEQ(s, "minHeapSize"))
3110 vm_args.minHeapSize = (jint)SvIV(*++mark);
3111 else if (strEQ(s, "maxHeapSize"))
3112 vm_args.maxHeapSize = (jint)SvIV(*++mark);
3113 else if (strEQ(s, "verifyMode"))
3114 vm_args.verifyMode = (jint)SvIV(*++mark);
3115 else if (strEQ(s, "classpath"))
3116 vm_args.classpath = savepv(SvPV(*++mark,PL_na));
3117 else if (strEQ(s, "enableClassGC"))
3118 vm_args.enableClassGC = (jint)SvIV(*++mark);
3119 else if (strEQ(s, "enableVerboseGC"))
3120 vm_args.enableVerboseGC = (jint)SvIV(*++mark);
3121 else if (strEQ(s, "disableAsyncGC"))
3122 vm_args.disableAsyncGC = (jint)SvIV(*++mark);
3123 else if (strEQ(s, "verbose"))
3124 vm_args.verbose = (jint)SvIV(*++mark);
3125 else if (strEQ(s, "debugging"))
3126 vm_args.debugging = (jboolean)SvIV(*++mark);
3127 else if (strEQ(s, "debugPort"))
3128 vm_args.debugPort = (jint)SvIV(*++mark);
3130 croak("unrecognized option: %s", s);
3132 JNI_CreateJavaVM(&RETVAL, &jplcurenv, &vm_args);