2 * Copyright 1997, O'Reilly & Associate, Inc.
4 * This package may be copied under the same terms as Perl itself.
15 extern JNIEnv* jplcurenv;
20 static void call_my_exit(jint status)
26 makeargs(char *sig, SV** svp, int items)
28 jvalue* jv = (jvalue*)safemalloc(sizeof(jvalue) * items);
31 JNIEnv* env = jplcurenv;
36 fprintf(stderr, "sig = %s, items = %d\n", sig, items);
45 jv[ix++].z = (jboolean)(SvIV(sv) != 0);
48 jv[ix++].b = (jbyte)SvIV(sv);
51 jv[ix++].c = (jchar)SvIV(sv);
54 jv[ix++].s = (jshort)SvIV(sv);
57 jv[ix++].i = (jint)SvIV(sv);
60 jv[ix++].j = (jlong)SvNV(sv);
63 jv[ix++].f = (jfloat)SvNV(sv);
66 jv[ix++].d = (jdouble)SvNV(sv);
72 SV* rv = (SV*)SvRV(sv);
74 jv[ix++].l = (jobject)(void*)SvIV(rv);
75 else if (SvTYPE(rv) == SVt_PVAV) {
76 jsize len = av_len((AV*)rv) + 1;
77 jboolean* buf = (jboolean*)malloc(len * sizeof(jboolean));
81 jbooleanArray ja = (*env)->NewBooleanArray(env, len);
82 for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
83 buf[i] = (jboolean)SvIV(*esv);
84 (*env)->SetBooleanArrayRegion(env, ja, 0, len, buf);
86 jv[ix++].l = (jobject)ja;
89 jv[ix++].l = (jobject)(void*)0;
92 jsize len = sv_len(sv) / sizeof(jboolean);
94 jbooleanArray ja = (*env)->NewBooleanArray(env, len);
95 (*env)->SetBooleanArrayRegion(env, ja, 0, len, (jboolean*)SvPV(sv,n_a));
96 jv[ix++].l = (jobject)ja;
99 jv[ix++].l = (jobject)(void*)0;
103 SV* rv = (SV*)SvRV(sv);
105 jv[ix++].l = (jobject)(void*)SvIV(rv);
106 else if (SvTYPE(rv) == SVt_PVAV) {
107 jsize len = av_len((AV*)rv) + 1;
108 jbyte* buf = (jbyte*)malloc(len * sizeof(jbyte));
112 jbyteArray ja = (*env)->NewByteArray(env, len);
113 for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
114 buf[i] = (jbyte)SvIV(*esv);
115 (*env)->SetByteArrayRegion(env, ja, 0, len, buf);
117 jv[ix++].l = (jobject)ja;
120 jv[ix++].l = (jobject)(void*)0;
122 else if (SvPOK(sv)) {
123 jsize len = sv_len(sv) / sizeof(jbyte);
125 jbyteArray ja = (*env)->NewByteArray(env, len);
126 (*env)->SetByteArrayRegion(env, ja, 0, len, (jbyte*)SvPV(sv,n_a));
127 jv[ix++].l = (jobject)ja;
130 jv[ix++].l = (jobject)(void*)0;
134 SV* rv = (SV*)SvRV(sv);
136 jv[ix++].l = (jobject)(void*)SvIV(rv);
137 else if (SvTYPE(rv) == SVt_PVAV) {
138 jsize len = av_len((AV*)rv) + 1;
139 jchar* buf = (jchar*)malloc(len * sizeof(jchar));
143 jcharArray ja = (*env)->NewCharArray(env, len);
144 for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
145 buf[i] = (jchar)SvIV(*esv);
146 (*env)->SetCharArrayRegion(env, ja, 0, len, buf);
148 jv[ix++].l = (jobject)ja;
151 jv[ix++].l = (jobject)(void*)0;
153 else if (SvPOK(sv)) {
154 jsize len = sv_len(sv) / sizeof(jchar);
156 jcharArray ja = (*env)->NewCharArray(env, len);
157 (*env)->SetCharArrayRegion(env, ja, 0, len, (jchar*)SvPV(sv,n_a));
158 jv[ix++].l = (jobject)ja;
161 jv[ix++].l = (jobject)(void*)0;
165 SV* rv = (SV*)SvRV(sv);
167 jv[ix++].l = (jobject)(void*)SvIV(rv);
168 else if (SvTYPE(rv) == SVt_PVAV) {
169 jsize len = av_len((AV*)rv) + 1;
170 jshort* buf = (jshort*)malloc(len * sizeof(jshort));
174 jshortArray ja = (*env)->NewShortArray(env, len);
175 for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
176 buf[i] = (jshort)SvIV(*esv);
177 (*env)->SetShortArrayRegion(env, ja, 0, len, buf);
179 jv[ix++].l = (jobject)ja;
182 jv[ix++].l = (jobject)(void*)0;
184 else if (SvPOK(sv)) {
185 jsize len = sv_len(sv) / sizeof(jshort);
187 jshortArray ja = (*env)->NewShortArray(env, len);
188 (*env)->SetShortArrayRegion(env, ja, 0, len, (jshort*)SvPV(sv,n_a));
189 jv[ix++].l = (jobject)ja;
192 jv[ix++].l = (jobject)(void*)0;
196 SV* rv = (SV*)SvRV(sv);
198 jv[ix++].l = (jobject)(void*)SvIV(rv);
199 else if (SvTYPE(rv) == SVt_PVAV) {
200 jsize len = av_len((AV*)rv) + 1;
201 jint* buf = (jint*)malloc(len * sizeof(jint));
205 jintArray ja = (*env)->NewIntArray(env, len);
206 for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
207 buf[i] = (jint)SvIV(*esv);
208 (*env)->SetIntArrayRegion(env, ja, 0, len, buf);
210 jv[ix++].l = (jobject)ja;
213 jv[ix++].l = (jobject)(void*)0;
215 else if (SvPOK(sv)) {
216 jsize len = sv_len(sv) / sizeof(jint);
218 jintArray ja = (*env)->NewIntArray(env, len);
219 (*env)->SetIntArrayRegion(env, ja, 0, len, (jint*)SvPV(sv,n_a));
220 jv[ix++].l = (jobject)ja;
223 jv[ix++].l = (jobject)(void*)0;
227 SV* rv = (SV*)SvRV(sv);
229 jv[ix++].l = (jobject)(void*)SvIV(rv);
230 else if (SvTYPE(rv) == SVt_PVAV) {
231 jsize len = av_len((AV*)rv) + 1;
232 jlong* buf = (jlong*)malloc(len * sizeof(jlong));
236 jlongArray ja = (*env)->NewLongArray(env, len);
237 for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
238 buf[i] = (jlong)SvNV(*esv);
239 (*env)->SetLongArrayRegion(env, ja, 0, len, buf);
241 jv[ix++].l = (jobject)ja;
244 jv[ix++].l = (jobject)(void*)0;
246 else if (SvPOK(sv)) {
247 jsize len = sv_len(sv) / sizeof(jlong);
249 jlongArray ja = (*env)->NewLongArray(env, len);
250 (*env)->SetLongArrayRegion(env, ja, 0, len, (jlong*)SvPV(sv,n_a));
251 jv[ix++].l = (jobject)ja;
254 jv[ix++].l = (jobject)(void*)0;
258 SV* rv = (SV*)SvRV(sv);
260 jv[ix++].l = (jobject)(void*)SvIV(rv);
261 else if (SvTYPE(rv) == SVt_PVAV) {
262 jsize len = av_len((AV*)rv) + 1;
263 jfloat* buf = (jfloat*)malloc(len * sizeof(jfloat));
267 jfloatArray ja = (*env)->NewFloatArray(env, len);
268 for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
269 buf[i] = (jfloat)SvNV(*esv);
270 (*env)->SetFloatArrayRegion(env, ja, 0, len, buf);
272 jv[ix++].l = (jobject)ja;
275 jv[ix++].l = (jobject)(void*)0;
277 else if (SvPOK(sv)) {
278 jsize len = sv_len(sv) / sizeof(jfloat);
280 jfloatArray ja = (*env)->NewFloatArray(env, len);
281 (*env)->SetFloatArrayRegion(env, ja, 0, len, (jfloat*)SvPV(sv,n_a));
282 jv[ix++].l = (jobject)ja;
285 jv[ix++].l = (jobject)(void*)0;
289 SV* rv = (SV*)SvRV(sv);
291 jv[ix++].l = (jobject)(void*)SvIV(rv);
292 else if (SvTYPE(rv) == SVt_PVAV) {
293 jsize len = av_len((AV*)rv) + 1;
294 jdouble* buf = (jdouble*)malloc(len * sizeof(jdouble));
298 jdoubleArray ja = (*env)->NewDoubleArray(env, len);
299 for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
300 buf[i] = (jdouble)SvNV(*esv);
301 (*env)->SetDoubleArrayRegion(env, ja, 0, len, buf);
303 jv[ix++].l = (jobject)ja;
306 jv[ix++].l = (jobject)(void*)0;
308 else if (SvPOK(sv)) {
309 jsize len = sv_len(sv) / sizeof(jdouble);
311 jdoubleArray ja = (*env)->NewDoubleArray(env, len);
312 (*env)->SetDoubleArrayRegion(env, ja, 0, len, (jdouble*)SvPV(sv,n_a));
313 jv[ix++].l = (jobject)ja;
316 jv[ix++].l = (jobject)(void*)0;
319 while (*s != ';') s++;
321 if (strnEQ(start, "[Ljava/lang/String;", 19)) {
323 SV* rv = (SV*)SvRV(sv);
325 jv[ix++].l = (jobject)(void*)SvIV(rv);
326 else if (SvTYPE(rv) == SVt_PVAV) {
327 jsize len = av_len((AV*)rv) + 1;
330 static jclass jcl = 0;
334 jcl = (*env)->FindClass(env, "java/lang/String");
335 ja = (*env)->NewObjectArray(env, len, jcl, 0);
336 for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) {
337 jobject str = (jobject)(*env)->NewStringUTF(env, SvPV(*esv,n_a));
338 (*env)->SetObjectArrayElement(env, ja, i, str);
340 jv[ix++].l = (jobject)ja;
343 jv[ix++].l = (jobject)(void*)0;
346 jv[ix++].l = (jobject)(void*)0;
352 SV* rv = (SV*)SvRV(sv);
354 jv[ix++].l = (jobject)(void*)SvIV(rv);
355 else if (SvTYPE(rv) == SVt_PVAV) {
356 jsize len = av_len((AV*)rv) + 1;
359 static jclass jcl = 0;
363 jcl = (*env)->FindClass(env, "java/lang/Object");
364 ja = (*env)->NewObjectArray(env, len, jcl, 0);
365 for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) {
366 if (SvROK(*esv) && (rv = SvRV(*esv)) && SvOBJECT(rv)) {
367 (*env)->SetObjectArrayElement(env, ja, i,
368 (jobject)(void*)SvIV(rv));
371 jobject str = (jobject)(*env)->NewStringUTF(env,
373 (*env)->SetObjectArrayElement(env, ja, i, str);
376 jv[ix++].l = (jobject)ja;
379 jv[ix++].l = (jobject)(void*)0;
382 jv[ix++].l = (jobject)(void*)0;
387 if (!SvROK(sv) || strnEQ(s, "java/lang/String;", 17)) {
389 jv[ix++].l = (jobject)(*env)->NewStringUTF(env,
390 (char*) SvPV(sv,n_a));
393 while (*s != ';') s++;
397 jv[ix++].l = (jobject)(void*)SvIV(rv);
401 croak("too many arguments, signature: %s", sig);
404 croak("panic: malformed signature: %s", s-1);
410 croak("not enough arguments, signature: %s", sig);
424 croak("%s not implemented on this architecture", s);
454 if (strEQ(name, "JNI_ABORT"))
460 if (strEQ(name, "JNI_COMMIT"))
466 if (strEQ(name, "JNI_ERR"))
472 if (strEQ(name, "JNI_FALSE"))
478 if (strEQ(name, "JNI_H"))
484 if (strEQ(name, "JNI_OK"))
490 if (strEQ(name, "JNI_TRUE"))
538 #define FETCHENV jplcurenv
539 #define RESTOREENV jplcurenv = env
541 MODULE = JNI PACKAGE = JNI
552 JNIEnv * env = FETCHENV;
555 RETVAL = (*env)->GetVersion(env);
562 DefineClass(name, loader, buf)
563 JNIEnv * env = FETCHENV;
564 STRLEN tmplen = NO_INIT;
565 jsize buf_len_ = NO_INIT;
571 RETVAL = (*env)->DefineClass(env, name, loader, buf, (jsize)buf_len_);
579 JNIEnv * env = FETCHENV;
583 RETVAL = (*env)->FindClass(env, name);
591 JNIEnv * env = FETCHENV;
595 RETVAL = (*env)->GetSuperclass(env, sub);
602 IsAssignableFrom(sub, sup)
603 JNIEnv * env = FETCHENV;
608 RETVAL = (*env)->IsAssignableFrom(env, sub, sup);
616 JNIEnv * env = FETCHENV;
620 RETVAL = (*env)->Throw(env, obj);
628 JNIEnv * env = FETCHENV;
633 RETVAL = (*env)->ThrowNew(env, clazz, msg);
641 JNIEnv * env = FETCHENV;
644 RETVAL = (*env)->ExceptionOccurred(env);
652 JNIEnv * env = FETCHENV;
655 (*env)->ExceptionDescribe(env);
661 JNIEnv * env = FETCHENV;
664 (*env)->ExceptionClear(env);
670 JNIEnv * env = FETCHENV;
674 (*env)->FatalError(env, msg);
680 JNIEnv * env = FETCHENV;
684 RETVAL = (*env)->NewGlobalRef(env, lobj);
691 DeleteGlobalRef(gref)
692 JNIEnv * env = FETCHENV;
696 (*env)->DeleteGlobalRef(env, gref);
702 JNIEnv * env = FETCHENV;
706 (*env)->DeleteLocalRef(env, obj);
711 IsSameObject(obj1,obj2)
712 JNIEnv * env = FETCHENV;
717 RETVAL = (*env)->IsSameObject(env, obj1,obj2);
725 JNIEnv * env = FETCHENV;
729 RETVAL = (*env)->AllocObject(env, clazz);
736 NewObject(clazz,methodID,...)
737 JNIEnv * env = FETCHENV;
741 int argoff = $min_args;
744 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
745 RETVAL = (*env)->NewObjectA(env, clazz,methodID,args);
752 NewObjectA(clazz,methodID,args)
753 JNIEnv * env = FETCHENV;
760 RETVAL = (*env)->NewObjectA(env, clazz,methodID,args);
768 JNIEnv * env = FETCHENV;
772 RETVAL = (*env)->GetObjectClass(env, obj);
779 IsInstanceOf(obj,clazz)
780 JNIEnv * env = FETCHENV;
785 RETVAL = (*env)->IsInstanceOf(env, obj,clazz);
792 GetMethodID(clazz,name,sig)
793 JNIEnv * env = FETCHENV;
799 RETVAL = (*env)->GetMethodID(env, clazz,name,sig);
806 CallObjectMethod(obj,methodID,...)
807 JNIEnv * env = FETCHENV;
811 int argoff = $min_args;
814 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
815 RETVAL = (*env)->CallObjectMethodA(env, obj,methodID,args);
822 CallObjectMethodA(obj,methodID,args)
823 JNIEnv * env = FETCHENV;
830 RETVAL = (*env)->CallObjectMethodA(env, obj,methodID,args);
837 CallBooleanMethod(obj,methodID,...)
838 JNIEnv * env = FETCHENV;
842 int argoff = $min_args;
845 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
846 RETVAL = (*env)->CallBooleanMethodA(env, obj,methodID,args);
853 CallBooleanMethodA(obj,methodID, args)
854 JNIEnv * env = FETCHENV;
861 RETVAL = (*env)->CallBooleanMethodA(env, obj,methodID, args);
868 CallByteMethod(obj,methodID,...)
869 JNIEnv * env = FETCHENV;
873 int argoff = $min_args;
876 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
877 RETVAL = (*env)->CallByteMethodA(env, obj,methodID,args);
884 CallByteMethodA(obj,methodID,args)
885 JNIEnv * env = FETCHENV;
892 RETVAL = (*env)->CallByteMethodA(env, obj,methodID,args);
899 CallCharMethod(obj,methodID,...)
900 JNIEnv * env = FETCHENV;
904 int argoff = $min_args;
907 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
908 RETVAL = (*env)->CallCharMethodA(env, obj,methodID,args);
915 CallCharMethodA(obj,methodID,args)
916 JNIEnv * env = FETCHENV;
923 RETVAL = (*env)->CallCharMethodA(env, obj,methodID,args);
930 CallShortMethod(obj,methodID,...)
931 JNIEnv * env = FETCHENV;
935 int argoff = $min_args;
938 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
939 RETVAL = (*env)->CallShortMethodA(env, obj,methodID,args);
946 CallShortMethodA(obj,methodID,args)
947 JNIEnv * env = FETCHENV;
954 RETVAL = (*env)->CallShortMethodA(env, obj,methodID,args);
961 CallIntMethod(obj,methodID,...)
962 JNIEnv * env = FETCHENV;
966 int argoff = $min_args;
969 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
970 RETVAL = (*env)->CallIntMethodA(env, obj,methodID,args);
977 CallIntMethodA(obj,methodID,args)
978 JNIEnv * env = FETCHENV;
985 RETVAL = (*env)->CallIntMethodA(env, obj,methodID,args);
992 CallLongMethod(obj,methodID,...)
993 JNIEnv * env = FETCHENV;
997 int argoff = $min_args;
1000 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1001 RETVAL = (*env)->CallLongMethodA(env, obj,methodID,args);
1008 CallLongMethodA(obj,methodID,args)
1009 JNIEnv * env = FETCHENV;
1016 RETVAL = (*env)->CallLongMethodA(env, obj,methodID,args);
1023 CallFloatMethod(obj,methodID,...)
1024 JNIEnv * env = FETCHENV;
1028 int argoff = $min_args;
1031 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1032 RETVAL = (*env)->CallFloatMethodA(env, obj,methodID,args);
1039 CallFloatMethodA(obj,methodID,args)
1040 JNIEnv * env = FETCHENV;
1047 RETVAL = (*env)->CallFloatMethodA(env, obj,methodID,args);
1054 CallDoubleMethod(obj,methodID,...)
1055 JNIEnv * env = FETCHENV;
1059 int argoff = $min_args;
1062 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1063 RETVAL = (*env)->CallDoubleMethodA(env, obj,methodID,args);
1070 CallDoubleMethodA(obj,methodID,args)
1071 JNIEnv * env = FETCHENV;
1078 RETVAL = (*env)->CallDoubleMethodA(env, obj,methodID,args);
1085 CallVoidMethod(obj,methodID,...)
1086 JNIEnv * env = FETCHENV;
1090 int argoff = $min_args;
1093 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1094 (*env)->CallVoidMethodA(env, obj,methodID,args);
1099 CallVoidMethodA(obj,methodID,args)
1100 JNIEnv * env = FETCHENV;
1107 (*env)->CallVoidMethodA(env, obj,methodID,args);
1112 CallNonvirtualObjectMethod(obj,clazz,methodID,...)
1113 JNIEnv * env = FETCHENV;
1118 int argoff = $min_args;
1121 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1122 RETVAL = (*env)->CallNonvirtualObjectMethodA(env, obj,clazz,methodID,args);
1129 CallNonvirtualObjectMethodA(obj,clazz,methodID,args)
1130 JNIEnv * env = FETCHENV;
1138 RETVAL = (*env)->CallNonvirtualObjectMethodA(env, obj,clazz,methodID,args);
1145 CallNonvirtualBooleanMethod(obj,clazz,methodID,...)
1146 JNIEnv * env = FETCHENV;
1151 int argoff = $min_args;
1154 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1155 RETVAL = (*env)->CallNonvirtualBooleanMethodA(env, obj,clazz,methodID,args);
1162 CallNonvirtualBooleanMethodA(obj,clazz,methodID, args)
1163 JNIEnv * env = FETCHENV;
1171 RETVAL = (*env)->CallNonvirtualBooleanMethodA(env, obj,clazz,methodID, args);
1178 CallNonvirtualByteMethod(obj,clazz,methodID,...)
1179 JNIEnv * env = FETCHENV;
1184 int argoff = $min_args;
1187 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1188 RETVAL = (*env)->CallNonvirtualByteMethodA(env, obj,clazz,methodID,args);
1195 CallNonvirtualByteMethodA(obj,clazz,methodID,args)
1196 JNIEnv * env = FETCHENV;
1204 RETVAL = (*env)->CallNonvirtualByteMethodA(env, obj,clazz,methodID,args);
1211 CallNonvirtualCharMethod(obj,clazz,methodID,...)
1212 JNIEnv * env = FETCHENV;
1217 int argoff = $min_args;
1220 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1221 RETVAL = (*env)->CallNonvirtualCharMethodA(env, obj,clazz,methodID,args);
1228 CallNonvirtualCharMethodA(obj,clazz,methodID,args)
1229 JNIEnv * env = FETCHENV;
1237 RETVAL = (*env)->CallNonvirtualCharMethodA(env, obj,clazz,methodID,args);
1244 CallNonvirtualShortMethod(obj,clazz,methodID,...)
1245 JNIEnv * env = FETCHENV;
1250 int argoff = $min_args;
1253 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1254 RETVAL = (*env)->CallNonvirtualShortMethodA(env, obj,clazz,methodID,args);
1261 CallNonvirtualShortMethodA(obj,clazz,methodID,args)
1262 JNIEnv * env = FETCHENV;
1270 RETVAL = (*env)->CallNonvirtualShortMethodA(env, obj,clazz,methodID,args);
1277 CallNonvirtualIntMethod(obj,clazz,methodID,...)
1278 JNIEnv * env = FETCHENV;
1283 int argoff = $min_args;
1286 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1287 RETVAL = (*env)->CallNonvirtualIntMethodA(env, obj,clazz,methodID,args);
1294 CallNonvirtualIntMethodA(obj,clazz,methodID,args)
1295 JNIEnv * env = FETCHENV;
1303 RETVAL = (*env)->CallNonvirtualIntMethodA(env, obj,clazz,methodID,args);
1310 CallNonvirtualLongMethod(obj,clazz,methodID,...)
1311 JNIEnv * env = FETCHENV;
1316 int argoff = $min_args;
1319 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1320 RETVAL = (*env)->CallNonvirtualLongMethodA(env, obj,clazz,methodID,args);
1327 CallNonvirtualLongMethodA(obj,clazz,methodID,args)
1328 JNIEnv * env = FETCHENV;
1336 RETVAL = (*env)->CallNonvirtualLongMethodA(env, obj,clazz,methodID,args);
1343 CallNonvirtualFloatMethod(obj,clazz,methodID,...)
1344 JNIEnv * env = FETCHENV;
1349 int argoff = $min_args;
1352 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1353 RETVAL = (*env)->CallNonvirtualFloatMethodA(env, obj,clazz,methodID,args);
1360 CallNonvirtualFloatMethodA(obj,clazz,methodID,args)
1361 JNIEnv * env = FETCHENV;
1369 RETVAL = (*env)->CallNonvirtualFloatMethodA(env, obj,clazz,methodID,args);
1376 CallNonvirtualDoubleMethod(obj,clazz,methodID,...)
1377 JNIEnv * env = FETCHENV;
1382 int argoff = $min_args;
1385 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1386 RETVAL = (*env)->CallNonvirtualDoubleMethodA(env, obj,clazz,methodID,args);
1393 CallNonvirtualDoubleMethodA(obj,clazz,methodID,args)
1394 JNIEnv * env = FETCHENV;
1402 RETVAL = (*env)->CallNonvirtualDoubleMethodA(env, obj,clazz,methodID,args);
1409 CallNonvirtualVoidMethod(obj,clazz,methodID,...)
1410 JNIEnv * env = FETCHENV;
1415 int argoff = $min_args;
1418 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1419 (*env)->CallNonvirtualVoidMethodA(env, obj,clazz,methodID,args);
1424 CallNonvirtualVoidMethodA(obj,clazz,methodID,args)
1425 JNIEnv * env = FETCHENV;
1433 (*env)->CallNonvirtualVoidMethodA(env, obj,clazz,methodID,args);
1438 GetFieldID(clazz,name,sig)
1439 JNIEnv * env = FETCHENV;
1445 RETVAL = (*env)->GetFieldID(env, clazz,name,sig);
1452 GetObjectField(obj,fieldID)
1453 JNIEnv * env = FETCHENV;
1459 RETVAL = (*env)->GetObjectField(env, obj,fieldID);
1466 GetBooleanField(obj,fieldID)
1467 JNIEnv * env = FETCHENV;
1473 RETVAL = (*env)->GetBooleanField(env, obj,fieldID);
1480 GetByteField(obj,fieldID)
1481 JNIEnv * env = FETCHENV;
1487 RETVAL = (*env)->GetByteField(env, obj,fieldID);
1494 GetCharField(obj,fieldID)
1495 JNIEnv * env = FETCHENV;
1501 RETVAL = (*env)->GetCharField(env, obj,fieldID);
1508 GetShortField(obj,fieldID)
1509 JNIEnv * env = FETCHENV;
1515 RETVAL = (*env)->GetShortField(env, obj,fieldID);
1522 GetIntField(obj,fieldID)
1523 JNIEnv * env = FETCHENV;
1529 RETVAL = (*env)->GetIntField(env, obj,fieldID);
1536 GetLongField(obj,fieldID)
1537 JNIEnv * env = FETCHENV;
1543 RETVAL = (*env)->GetLongField(env, obj,fieldID);
1550 GetFloatField(obj,fieldID)
1551 JNIEnv * env = FETCHENV;
1557 RETVAL = (*env)->GetFloatField(env, obj,fieldID);
1564 GetDoubleField(obj,fieldID)
1565 JNIEnv * env = FETCHENV;
1571 RETVAL = (*env)->GetDoubleField(env, obj,fieldID);
1578 SetObjectField(obj,fieldID,val)
1579 JNIEnv * env = FETCHENV;
1586 (*env)->SetObjectField(env, obj,fieldID,val);
1591 SetBooleanField(obj,fieldID,val)
1592 JNIEnv * env = FETCHENV;
1599 (*env)->SetBooleanField(env, obj,fieldID,val);
1604 SetByteField(obj,fieldID,val)
1605 JNIEnv * env = FETCHENV;
1612 (*env)->SetByteField(env, obj,fieldID,val);
1617 SetCharField(obj,fieldID,val)
1618 JNIEnv * env = FETCHENV;
1625 (*env)->SetCharField(env, obj,fieldID,val);
1630 SetShortField(obj,fieldID,val)
1631 JNIEnv * env = FETCHENV;
1638 (*env)->SetShortField(env, obj,fieldID,val);
1643 SetIntField(obj,fieldID,val)
1644 JNIEnv * env = FETCHENV;
1651 (*env)->SetIntField(env, obj,fieldID,val);
1656 SetLongField(obj,fieldID,val)
1657 JNIEnv * env = FETCHENV;
1664 (*env)->SetLongField(env, obj,fieldID,val);
1669 SetFloatField(obj,fieldID,val)
1670 JNIEnv * env = FETCHENV;
1677 (*env)->SetFloatField(env, obj,fieldID,val);
1682 SetDoubleField(obj,fieldID,val)
1683 JNIEnv * env = FETCHENV;
1690 (*env)->SetDoubleField(env, obj,fieldID,val);
1695 GetStaticMethodID(clazz,name,sig)
1696 JNIEnv * env = FETCHENV;
1702 RETVAL = (*env)->GetStaticMethodID(env, clazz,name,sig);
1709 CallStaticObjectMethod(clazz,methodID,...)
1710 JNIEnv * env = FETCHENV;
1714 int argoff = $min_args;
1717 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1718 RETVAL = (*env)->CallStaticObjectMethodA(env, clazz,methodID,args);
1725 CallStaticObjectMethodA(clazz,methodID,args)
1726 JNIEnv * env = FETCHENV;
1733 RETVAL = (*env)->CallStaticObjectMethodA(env, clazz,methodID,args);
1740 CallStaticBooleanMethod(clazz,methodID,...)
1741 JNIEnv * env = FETCHENV;
1745 int argoff = $min_args;
1748 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1749 RETVAL = (*env)->CallStaticBooleanMethodA(env, clazz,methodID,args);
1756 CallStaticBooleanMethodA(clazz,methodID,args)
1757 JNIEnv * env = FETCHENV;
1764 RETVAL = (*env)->CallStaticBooleanMethodA(env, clazz,methodID,args);
1771 CallStaticByteMethod(clazz,methodID,...)
1772 JNIEnv * env = FETCHENV;
1776 int argoff = $min_args;
1779 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1780 RETVAL = (*env)->CallStaticByteMethodA(env, clazz,methodID,args);
1787 CallStaticByteMethodA(clazz,methodID,args)
1788 JNIEnv * env = FETCHENV;
1795 RETVAL = (*env)->CallStaticByteMethodA(env, clazz,methodID,args);
1802 CallStaticCharMethod(clazz,methodID,...)
1803 JNIEnv * env = FETCHENV;
1807 int argoff = $min_args;
1810 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1811 RETVAL = (*env)->CallStaticCharMethodA(env, clazz,methodID,args);
1818 CallStaticCharMethodA(clazz,methodID,args)
1819 JNIEnv * env = FETCHENV;
1826 RETVAL = (*env)->CallStaticCharMethodA(env, clazz,methodID,args);
1833 CallStaticShortMethod(clazz,methodID,...)
1834 JNIEnv * env = FETCHENV;
1838 int argoff = $min_args;
1841 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1842 RETVAL = (*env)->CallStaticShortMethodA(env, clazz,methodID,args);
1849 CallStaticShortMethodA(clazz,methodID,args)
1850 JNIEnv * env = FETCHENV;
1857 RETVAL = (*env)->CallStaticShortMethodA(env, clazz,methodID,args);
1864 CallStaticIntMethod(clazz,methodID,...)
1865 JNIEnv * env = FETCHENV;
1869 int argoff = $min_args;
1872 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1873 RETVAL = (*env)->CallStaticIntMethodA(env, clazz,methodID,args);
1880 CallStaticIntMethodA(clazz,methodID,args)
1881 JNIEnv * env = FETCHENV;
1888 RETVAL = (*env)->CallStaticIntMethodA(env, clazz,methodID,args);
1895 CallStaticLongMethod(clazz,methodID,...)
1896 JNIEnv * env = FETCHENV;
1900 int argoff = $min_args;
1903 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1904 RETVAL = (*env)->CallStaticLongMethodA(env, clazz,methodID,args);
1911 CallStaticLongMethodA(clazz,methodID,args)
1912 JNIEnv * env = FETCHENV;
1919 RETVAL = (*env)->CallStaticLongMethodA(env, clazz,methodID,args);
1926 CallStaticFloatMethod(clazz,methodID,...)
1927 JNIEnv * env = FETCHENV;
1931 int argoff = $min_args;
1934 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1935 RETVAL = (*env)->CallStaticFloatMethodA(env, clazz,methodID,args);
1942 CallStaticFloatMethodA(clazz,methodID,args)
1943 JNIEnv * env = FETCHENV;
1950 RETVAL = (*env)->CallStaticFloatMethodA(env, clazz,methodID,args);
1957 CallStaticDoubleMethod(clazz,methodID,...)
1958 JNIEnv * env = FETCHENV;
1962 int argoff = $min_args;
1965 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1966 RETVAL = (*env)->CallStaticDoubleMethodA(env, clazz,methodID,args);
1973 CallStaticDoubleMethodA(clazz,methodID,args)
1974 JNIEnv * env = FETCHENV;
1981 RETVAL = (*env)->CallStaticDoubleMethodA(env, clazz,methodID,args);
1988 CallStaticVoidMethod(cls,methodID,...)
1989 JNIEnv * env = FETCHENV;
1993 int argoff = $min_args;
1996 jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
1997 (*env)->CallStaticVoidMethodA(env, cls,methodID,args);
2002 CallStaticVoidMethodA(cls,methodID,args)
2003 JNIEnv * env = FETCHENV;
2010 (*env)->CallStaticVoidMethodA(env, cls,methodID,args);
2015 GetStaticFieldID(clazz,name,sig)
2016 JNIEnv * env = FETCHENV;
2022 RETVAL = (*env)->GetStaticFieldID(env, clazz,name,sig);
2029 GetStaticObjectField(clazz,fieldID)
2030 JNIEnv * env = FETCHENV;
2036 RETVAL = (*env)->GetStaticObjectField(env, clazz,fieldID);
2043 GetStaticBooleanField(clazz,fieldID)
2044 JNIEnv * env = FETCHENV;
2050 RETVAL = (*env)->GetStaticBooleanField(env, clazz,fieldID);
2057 GetStaticByteField(clazz,fieldID)
2058 JNIEnv * env = FETCHENV;
2064 RETVAL = (*env)->GetStaticByteField(env, clazz,fieldID);
2071 GetStaticCharField(clazz,fieldID)
2072 JNIEnv * env = FETCHENV;
2078 RETVAL = (*env)->GetStaticCharField(env, clazz,fieldID);
2085 GetStaticShortField(clazz,fieldID)
2086 JNIEnv * env = FETCHENV;
2092 RETVAL = (*env)->GetStaticShortField(env, clazz,fieldID);
2099 GetStaticIntField(clazz,fieldID)
2100 JNIEnv * env = FETCHENV;
2106 RETVAL = (*env)->GetStaticIntField(env, clazz,fieldID);
2113 GetStaticLongField(clazz,fieldID)
2114 JNIEnv * env = FETCHENV;
2120 RETVAL = (*env)->GetStaticLongField(env, clazz,fieldID);
2127 GetStaticFloatField(clazz,fieldID)
2128 JNIEnv * env = FETCHENV;
2134 RETVAL = (*env)->GetStaticFloatField(env, clazz,fieldID);
2141 GetStaticDoubleField(clazz,fieldID)
2142 JNIEnv * env = FETCHENV;
2148 RETVAL = (*env)->GetStaticDoubleField(env, clazz,fieldID);
2155 SetStaticObjectField(clazz,fieldID,value)
2156 JNIEnv * env = FETCHENV;
2163 (*env)->SetStaticObjectField(env, clazz,fieldID,value);
2168 SetStaticBooleanField(clazz,fieldID,value)
2169 JNIEnv * env = FETCHENV;
2176 (*env)->SetStaticBooleanField(env, clazz,fieldID,value);
2181 SetStaticByteField(clazz,fieldID,value)
2182 JNIEnv * env = FETCHENV;
2189 (*env)->SetStaticByteField(env, clazz,fieldID,value);
2194 SetStaticCharField(clazz,fieldID,value)
2195 JNIEnv * env = FETCHENV;
2202 (*env)->SetStaticCharField(env, clazz,fieldID,value);
2207 SetStaticShortField(clazz,fieldID,value)
2208 JNIEnv * env = FETCHENV;
2215 (*env)->SetStaticShortField(env, clazz,fieldID,value);
2220 SetStaticIntField(clazz,fieldID,value)
2221 JNIEnv * env = FETCHENV;
2228 (*env)->SetStaticIntField(env, clazz,fieldID,value);
2233 SetStaticLongField(clazz,fieldID,value)
2234 JNIEnv * env = FETCHENV;
2241 (*env)->SetStaticLongField(env, clazz,fieldID,value);
2246 SetStaticFloatField(clazz,fieldID,value)
2247 JNIEnv * env = FETCHENV;
2254 (*env)->SetStaticFloatField(env, clazz,fieldID,value);
2259 SetStaticDoubleField(clazz,fieldID,value)
2260 JNIEnv * env = FETCHENV;
2267 (*env)->SetStaticDoubleField(env, clazz,fieldID,value);
2273 JNIEnv * env = FETCHENV;
2274 STRLEN tmplen = NO_INIT;
2275 jsize unicode_len_ = NO_INIT;
2276 const jchar * unicode
2279 RETVAL = (*env)->NewString(env, unicode, unicode_len_);
2286 GetStringLength(str)
2287 JNIEnv * env = FETCHENV;
2291 RETVAL = (*env)->GetStringLength(env, str);
2299 JNIEnv * env = FETCHENV;
2301 jboolean isCopy = NO_INIT;
2302 jsize RETVAL_len_ = NO_INIT;
2305 RETVAL = (*env)->GetStringChars(env, str,&isCopy);
2306 RETVAL_len_ = (*env)->GetStringLength(env, str);
2312 (*env)->ReleaseStringChars(env, str,RETVAL);
2316 JNIEnv * env = FETCHENV;
2320 RETVAL = (*env)->NewStringUTF(env, utf);
2327 GetStringUTFLength(str)
2328 JNIEnv * env = FETCHENV;
2332 RETVAL = (*env)->GetStringUTFLength(env, str);
2339 GetStringUTFChars(str)
2340 JNIEnv * env = FETCHENV;
2342 jboolean isCopy = NO_INIT;
2345 RETVAL = (*env)->GetStringUTFChars(env, str,&isCopy);
2351 (*env)->ReleaseStringUTFChars(env, str, RETVAL);
2355 GetArrayLength(array)
2356 JNIEnv * env = FETCHENV;
2360 RETVAL = (*env)->GetArrayLength(env, array);
2367 NewObjectArray(len,clazz,init)
2368 JNIEnv * env = FETCHENV;
2374 RETVAL = (*env)->NewObjectArray(env, len,clazz,init);
2381 GetObjectArrayElement(array,index)
2382 JNIEnv * env = FETCHENV;
2387 RETVAL = (*env)->GetObjectArrayElement(env, array,index);
2394 SetObjectArrayElement(array,index,val)
2395 JNIEnv * env = FETCHENV;
2401 (*env)->SetObjectArrayElement(env, array,index,val);
2406 NewBooleanArray(len)
2407 JNIEnv * env = FETCHENV;
2411 RETVAL = (*env)->NewBooleanArray(env, len);
2419 JNIEnv * env = FETCHENV;
2423 RETVAL = (*env)->NewByteArray(env, len);
2431 JNIEnv * env = FETCHENV;
2435 RETVAL = (*env)->NewCharArray(env, len);
2443 JNIEnv * env = FETCHENV;
2447 RETVAL = (*env)->NewShortArray(env, len);
2455 JNIEnv * env = FETCHENV;
2459 RETVAL = (*env)->NewIntArray(env, len);
2467 JNIEnv * env = FETCHENV;
2471 RETVAL = (*env)->NewLongArray(env, len);
2479 JNIEnv * env = FETCHENV;
2483 RETVAL = (*env)->NewFloatArray(env, len);
2491 JNIEnv * env = FETCHENV;
2495 RETVAL = (*env)->NewDoubleArray(env, len);
2502 GetBooleanArrayElements(array)
2503 JNIEnv * env = FETCHENV;
2504 jsize RETVAL_len_ = NO_INIT;
2506 jboolean isCopy = NO_INIT;
2509 RETVAL = (*env)->GetBooleanArrayElements(env, array,&isCopy);
2510 RETVAL_len_ = (*env)->GetArrayLength(env, array);
2511 if (GIMME == G_ARRAY) {
2513 jboolean* r = RETVAL;
2514 EXTEND(sp, RETVAL_len_);
2515 for (i = RETVAL_len_; i; --i) {
2516 PUSHs(sv_2mortal(newSViv(*r++)));
2521 PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,
2522 (STRLEN)RETVAL_len_ * sizeof(jboolean))));
2527 (*env)->ReleaseBooleanArrayElements(env, array,RETVAL,JNI_ABORT);
2532 GetByteArrayElements(array)
2533 JNIEnv * env = FETCHENV;
2534 jsize RETVAL_len_ = NO_INIT;
2536 jboolean isCopy = NO_INIT;
2539 RETVAL = (*env)->GetByteArrayElements(env, array,&isCopy);
2540 RETVAL_len_ = (*env)->GetArrayLength(env, array);
2541 if (GIMME == G_ARRAY) {
2544 EXTEND(sp, RETVAL_len_);
2545 for (i = RETVAL_len_; i; --i) {
2546 PUSHs(sv_2mortal(newSViv(*r++)));
2551 PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,
2552 (STRLEN)RETVAL_len_ * sizeof(jbyte))));
2557 (*env)->ReleaseByteArrayElements(env, array,RETVAL,JNI_ABORT);
2562 GetCharArrayElements(array)
2563 JNIEnv * env = FETCHENV;
2564 jsize RETVAL_len_ = NO_INIT;
2566 jboolean isCopy = NO_INIT;
2569 RETVAL = (*env)->GetCharArrayElements(env, array,&isCopy);
2570 RETVAL_len_ = (*env)->GetArrayLength(env, array);
2571 if (GIMME == G_ARRAY) {
2574 EXTEND(sp, RETVAL_len_);
2575 for (i = RETVAL_len_; i; --i) {
2576 PUSHs(sv_2mortal(newSViv(*r++)));
2581 PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,
2582 (STRLEN)RETVAL_len_ * sizeof(jchar))));
2587 (*env)->ReleaseCharArrayElements(env, array,RETVAL,JNI_ABORT);
2592 GetShortArrayElements(array)
2593 JNIEnv * env = FETCHENV;
2594 jsize RETVAL_len_ = NO_INIT;
2596 jboolean isCopy = NO_INIT;
2599 RETVAL = (*env)->GetShortArrayElements(env, array,&isCopy);
2600 RETVAL_len_ = (*env)->GetArrayLength(env, array);
2601 if (GIMME == G_ARRAY) {
2604 EXTEND(sp, RETVAL_len_);
2605 for (i = RETVAL_len_; i; --i) {
2606 PUSHs(sv_2mortal(newSViv(*r++)));
2611 PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,
2612 (STRLEN)RETVAL_len_ * sizeof(jshort))));
2617 (*env)->ReleaseShortArrayElements(env, array,RETVAL,JNI_ABORT);
2622 GetIntArrayElements(array)
2623 JNIEnv * env = FETCHENV;
2624 jsize RETVAL_len_ = NO_INIT;
2626 jboolean isCopy = NO_INIT;
2629 RETVAL = (*env)->GetIntArrayElements(env, array,&isCopy);
2630 RETVAL_len_ = (*env)->GetArrayLength(env, array);
2631 if (GIMME == G_ARRAY) {
2634 EXTEND(sp, RETVAL_len_);
2635 for (i = RETVAL_len_; i; --i) {
2636 PUSHs(sv_2mortal(newSViv(*r++)));
2641 PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,
2642 (STRLEN)RETVAL_len_ * sizeof(jint))));
2647 (*env)->ReleaseIntArrayElements(env, array,RETVAL,JNI_ABORT);
2652 GetLongArrayElements(array)
2653 JNIEnv * env = FETCHENV;
2654 jsize RETVAL_len_ = NO_INIT;
2656 jboolean isCopy = NO_INIT;
2659 RETVAL = (*env)->GetLongArrayElements(env, array,&isCopy);
2660 RETVAL_len_ = (*env)->GetArrayLength(env, array);
2661 if (GIMME == G_ARRAY) {
2664 EXTEND(sp, RETVAL_len_);
2665 for (i = RETVAL_len_; i; --i) {
2666 PUSHs(sv_2mortal(newSViv(*r++)));
2671 PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,
2672 (STRLEN)RETVAL_len_ * sizeof(jlong))));
2677 (*env)->ReleaseLongArrayElements(env, array,RETVAL,JNI_ABORT);
2682 GetFloatArrayElements(array)
2683 JNIEnv * env = FETCHENV;
2684 jsize RETVAL_len_ = NO_INIT;
2686 jboolean isCopy = NO_INIT;
2689 RETVAL = (*env)->GetFloatArrayElements(env, array,&isCopy);
2690 RETVAL_len_ = (*env)->GetArrayLength(env, array);
2691 if (GIMME == G_ARRAY) {
2694 EXTEND(sp, RETVAL_len_);
2695 for (i = RETVAL_len_; i; --i) {
2696 PUSHs(sv_2mortal(newSVnv(*r++)));
2701 PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,
2702 (STRLEN)RETVAL_len_ * sizeof(jfloat))));
2707 (*env)->ReleaseFloatArrayElements(env, array,RETVAL,JNI_ABORT);
2712 GetDoubleArrayElements(array)
2713 JNIEnv * env = FETCHENV;
2714 jsize RETVAL_len_ = NO_INIT;
2716 jboolean isCopy = NO_INIT;
2719 RETVAL = (*env)->GetDoubleArrayElements(env, array,&isCopy);
2720 RETVAL_len_ = (*env)->GetArrayLength(env, array);
2721 if (GIMME == G_ARRAY) {
2723 jdouble* r = RETVAL;
2724 EXTEND(sp, RETVAL_len_);
2725 for (i = RETVAL_len_; i; --i) {
2726 PUSHs(sv_2mortal(newSVnv(*r++)));
2731 PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,
2732 (STRLEN)RETVAL_len_ * sizeof(jdouble))));
2737 (*env)->ReleaseDoubleArrayElements(env, array,RETVAL,JNI_ABORT);
2742 GetBooleanArrayRegion(array,start,len,buf)
2743 JNIEnv * env = FETCHENV;
2747 STRLEN tmplen = len * sizeof(jboolean) + 1;
2748 char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);
2749 jboolean * buf = (jboolean*)sv_grow(ST(3),len * sizeof(jboolean)+1);
2752 (*env)->GetBooleanArrayRegion(env, array,start,len,buf);
2753 SvCUR_set(ST(3), len * sizeof(jboolean));
2754 *SvEND(ST(3)) = '\0';
2759 GetByteArrayRegion(array,start,len,buf)
2760 JNIEnv * env = FETCHENV;
2764 STRLEN tmplen = len * sizeof(jboolean) + 1;
2765 char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);
2766 jbyte * buf = (jbyte*)sv_grow(ST(3),len * sizeof(jbyte)+1);
2769 (*env)->GetByteArrayRegion(env, array,start,len,buf);
2770 SvCUR_set(ST(3), len * sizeof(jbyte));
2771 *SvEND(ST(3)) = '\0';
2776 GetCharArrayRegion(array,start,len,buf)
2777 JNIEnv * env = FETCHENV;
2781 STRLEN tmplen = len * sizeof(jboolean) + 1;
2782 char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);
2783 jchar * buf = (jchar*)sv_grow(ST(3),len * sizeof(jchar)+1);
2786 (*env)->GetCharArrayRegion(env, array,start,len,buf);
2787 SvCUR_set(ST(3), len * sizeof(jchar));
2788 *SvEND(ST(3)) = '\0';
2793 GetShortArrayRegion(array,start,len,buf)
2794 JNIEnv * env = FETCHENV;
2798 STRLEN tmplen = len * sizeof(jboolean) + 1;
2799 char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);
2800 jshort * buf = (jshort*)sv_grow(ST(3),len * sizeof(jshort)+1);
2803 (*env)->GetShortArrayRegion(env, array,start,len,buf);
2804 SvCUR_set(ST(3), len * sizeof(jshort));
2805 *SvEND(ST(3)) = '\0';
2810 GetIntArrayRegion(array,start,len,buf)
2811 JNIEnv * env = FETCHENV;
2815 STRLEN tmplen = len * sizeof(jboolean) + 1;
2816 char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);
2817 jint * buf = (jint*)sv_grow(ST(3),len * sizeof(jint)+1);
2820 (*env)->GetIntArrayRegion(env, array,start,len,buf);
2821 SvCUR_set(ST(3), len * sizeof(jint));
2822 *SvEND(ST(3)) = '\0';
2827 GetLongArrayRegion(array,start,len,buf)
2828 JNIEnv * env = FETCHENV;
2832 STRLEN tmplen = len * sizeof(jboolean) + 1;
2833 char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);
2834 jlong * buf = (jlong*)sv_grow(ST(3),len * sizeof(jlong)+1);
2837 (*env)->GetLongArrayRegion(env, array,start,len,buf);
2838 SvCUR_set(ST(3), len * sizeof(jlong));
2839 *SvEND(ST(3)) = '\0';
2844 GetFloatArrayRegion(array,start,len,buf)
2845 JNIEnv * env = FETCHENV;
2849 STRLEN tmplen = len * sizeof(jboolean) + 1;
2850 char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);
2851 jfloat * buf = (jfloat*)sv_grow(ST(3),len * sizeof(jfloat)+1);
2854 (*env)->GetFloatArrayRegion(env, array,start,len,buf);
2855 SvCUR_set(ST(3), len * sizeof(jfloat));
2856 *SvEND(ST(3)) = '\0';
2861 GetDoubleArrayRegion(array,start,len,buf)
2862 JNIEnv * env = FETCHENV;
2866 STRLEN tmplen = len * sizeof(jboolean) + 1;
2867 char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);
2868 jdouble * buf = (jdouble*)sv_grow(ST(3),len * sizeof(jdouble)+1);
2871 (*env)->GetDoubleArrayRegion(env, array,start,len,buf);
2872 SvCUR_set(ST(3), len * sizeof(jdouble));
2873 *SvEND(ST(3)) = '\0';
2878 SetBooleanArrayRegion(array,start,len,buf)
2879 JNIEnv * env = FETCHENV;
2880 STRLEN tmplen = NO_INIT;
2884 jsize buf_len_ = NO_INIT;
2889 croak("string is too short");
2890 else if (buf_len_ > len && PL_dowarn)
2891 warn("string is too long");
2892 (*env)->SetBooleanArrayRegion(env, array,start,len,buf);
2897 SetByteArrayRegion(array,start,len,buf)
2898 JNIEnv * env = FETCHENV;
2899 STRLEN tmplen = NO_INIT;
2903 jsize buf_len_ = NO_INIT;
2908 croak("string is too short");
2909 else if (buf_len_ > len && PL_dowarn)
2910 warn("string is too long");
2911 (*env)->SetByteArrayRegion(env, array,start,len,buf);
2916 SetCharArrayRegion(array,start,len,buf)
2917 JNIEnv * env = FETCHENV;
2918 STRLEN tmplen = NO_INIT;
2922 jsize buf_len_ = NO_INIT;
2927 croak("string is too short");
2928 else if (buf_len_ > len && PL_dowarn)
2929 warn("string is too long");
2930 (*env)->SetCharArrayRegion(env, array,start,len,buf);
2935 SetShortArrayRegion(array,start,len,buf)
2936 JNIEnv * env = FETCHENV;
2937 STRLEN tmplen = NO_INIT;
2941 jsize buf_len_ = NO_INIT;
2946 croak("string is too short");
2947 else if (buf_len_ > len && PL_dowarn)
2948 warn("string is too long");
2949 (*env)->SetShortArrayRegion(env, array,start,len,buf);
2954 SetIntArrayRegion(array,start,len,buf)
2955 JNIEnv * env = FETCHENV;
2956 STRLEN tmplen = NO_INIT;
2960 jsize buf_len_ = NO_INIT;
2965 croak("string is too short");
2966 else if (buf_len_ > len && PL_dowarn)
2967 warn("string is too long");
2968 (*env)->SetIntArrayRegion(env, array,start,len,buf);
2973 SetLongArrayRegion(array,start,len,buf)
2974 JNIEnv * env = FETCHENV;
2975 STRLEN tmplen = NO_INIT;
2979 jsize buf_len_ = NO_INIT;
2984 croak("string is too short");
2985 else if (buf_len_ > len && PL_dowarn)
2986 warn("string is too long");
2987 (*env)->SetLongArrayRegion(env, array,start,len,buf);
2992 SetFloatArrayRegion(array,start,len,buf)
2993 JNIEnv * env = FETCHENV;
2994 STRLEN tmplen = NO_INIT;
2998 jsize buf_len_ = NO_INIT;
3003 croak("string is too short");
3004 else if (buf_len_ > len && PL_dowarn)
3005 warn("string is too long");
3006 (*env)->SetFloatArrayRegion(env, array,start,len,buf);
3011 SetDoubleArrayRegion(array,start,len,buf)
3012 JNIEnv * env = FETCHENV;
3013 STRLEN tmplen = NO_INIT;
3017 jsize buf_len_ = NO_INIT;
3022 croak("string is too short");
3023 else if (buf_len_ > len && PL_dowarn)
3024 warn("string is too long");
3025 (*env)->SetDoubleArrayRegion(env, array,start,len,buf);
3030 RegisterNatives(clazz,methods,nMethods)
3031 JNIEnv * env = FETCHENV;
3033 JNINativeMethod * methods
3037 RETVAL = (*env)->RegisterNatives(env, clazz,methods,nMethods);
3041 UnregisterNatives(clazz)
3042 JNIEnv * env = FETCHENV;
3046 RETVAL = (*env)->UnregisterNatives(env, clazz);
3053 JNIEnv * env = FETCHENV;
3057 RETVAL = (*env)->MonitorEnter(env, obj);
3065 JNIEnv * env = FETCHENV;
3069 RETVAL = (*env)->MonitorExit(env, obj);
3077 JNIEnv * env = FETCHENV;
3080 if (env) { /* We're embedded. */
3081 if ((*env)->GetJavaVM(env, &RETVAL) < 0)
3084 else { /* We're embedding. */
3085 JDK1_1InitArgs vm_args;
3090 lib = SvPV(*mark, PL_na);
3095 if (!dlopen("libjava.so", RTLD_LAZY|RTLD_GLOBAL)) {
3096 if (lib && !dlopen(lib, RTLD_LAZY|RTLD_GLOBAL))
3097 croak("Can't load libjava.so");
3100 JNI_GetDefaultJavaVMInitArgs(&vm_args);
3101 vm_args.exit = &call_my_exit;
3103 char *s = SvPV(*++mark,PL_na);
3105 if (strEQ(s, "checkSource"))
3106 vm_args.checkSource = (jint)SvIV(*++mark);
3107 else if (strEQ(s, "nativeStackSize"))
3108 vm_args.nativeStackSize = (jint)SvIV(*++mark);
3109 else if (strEQ(s, "javaStackSize"))
3110 vm_args.javaStackSize = (jint)SvIV(*++mark);
3111 else if (strEQ(s, "minHeapSize"))
3112 vm_args.minHeapSize = (jint)SvIV(*++mark);
3113 else if (strEQ(s, "maxHeapSize"))
3114 vm_args.maxHeapSize = (jint)SvIV(*++mark);
3115 else if (strEQ(s, "verifyMode"))
3116 vm_args.verifyMode = (jint)SvIV(*++mark);
3117 else if (strEQ(s, "classpath"))
3118 vm_args.classpath = savepv(SvPV(*++mark,PL_na));
3119 else if (strEQ(s, "enableClassGC"))
3120 vm_args.enableClassGC = (jint)SvIV(*++mark);
3121 else if (strEQ(s, "enableVerboseGC"))
3122 vm_args.enableVerboseGC = (jint)SvIV(*++mark);
3123 else if (strEQ(s, "disableAsyncGC"))
3124 vm_args.disableAsyncGC = (jint)SvIV(*++mark);
3125 else if (strEQ(s, "verbose"))
3126 vm_args.verbose = (jint)SvIV(*++mark);
3127 else if (strEQ(s, "debugging"))
3128 vm_args.debugging = (jboolean)SvIV(*++mark);
3129 else if (strEQ(s, "debugPort"))
3130 vm_args.debugPort = (jint)SvIV(*++mark);
3132 croak("unrecognized option: %s", s);
3134 JNI_CreateJavaVM(&RETVAL, &jplcurenv, &vm_args);