1 /* native/jni.h - JNI types and data structures
3 Copyright (C) 1996-2005, 2006 R. Grafl, A. Krall, C. Kruegel,
4 C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
5 E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
6 J. Wenninger, Institut f. Computersprachen - TU Wien
8 This file is part of CACAO.
10 This program is free software; you can redistribute it and/or
11 modify it under the terms of the GNU General Public License as
12 published by the Free Software Foundation; either version 2, or (at
13 your option) any later version.
15 This program is distributed in the hope that it will be useful, but
16 WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 General Public License for more details.
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
25 Contact: cacao@cacaojvm.org
27 Authors: Reinhard Grafl
30 Changes: Christian Thalinger
32 $Id: jni.h 4357 2006-01-22 23:33:38Z twisti $
46 #include "vm/global.h"
47 #include "vm/method.h"
52 #define JNI_VERSION_1_1 0x00010001
53 #define JNI_VERSION_1_2 0x00010002
54 #define JNI_VERSION_1_4 0x00010004
70 #define JNI_EDETACHED (-2) /* thread detached from the VM */
71 #define JNI_EVERSION (-3) /* JNI version error */
74 /* Release<PrimitiveType>ArrayElements modes */
89 #define jdouble double
91 #define jobject java_objectheader*
92 #define jclass struct classinfo*
93 #define jthrowable jobject
95 #define jarray java_arrayheader*
96 #define jlongArray java_longarray*
97 #define jbooleanArray java_booleanarray*
98 #define jintArray java_intarray*
99 #define jcharArray java_chararray*
100 #define jbyteArray java_bytearray*
101 #define jshortArray java_shortarray*
102 #define jdoubleArray java_doublearray*
103 #define jfloatArray java_floatarray*
104 #define jobjectArray java_objectarray*
105 #define jstring jobject
108 #define jfieldID fieldinfo*
109 #define jmethodID methodinfo*
112 typedef union jvalue {
125 typedef struct JDK1_1InitArgs JDK1_1InitArgs;
127 struct JDK1_1InitArgs {
128 /* The first two fields were reserved in JDK 1.1, and
129 formally introduced in JDK 1.1.2. */
130 /* Java VM version */
133 /* System properties. */
136 /* whether to check the Java source files are newer than
137 * compiled class files. */
140 /* maximum native stack size of Java-created threads. */
141 jint nativeStackSize;
143 /* maximum Java stack size. */
146 /* initial heap size. */
149 /* maximum heap size. */
152 /* controls whether Java byte code should be verified:
153 * 0 -- none, 1 -- remotely loaded code, 2 -- all code. */
156 /* the local directory path for class loading. */
157 const char *classpath;
159 /* a hook for a function that redirects all VM messages. */
160 jint (*vfprintf)(FILE *fp, const char *format,
163 /* a VM exit hook. */
164 void (*exit)(jint code);
166 /* a VM abort hook. */
169 /* whether to enable class GC. */
172 /* whether GC messages will appear. */
173 jint enableVerboseGC;
175 /* whether asynchronous GC is allowed. */
178 /* Three reserved fields. */
185 typedef struct JDK1_1AttachArgs {
187 * JDK 1.1 does not need any arguments to attach a
188 * native thread. The padding is here to satisfy the C
189 * compiler which does not permit empty structures.
195 typedef struct JNIInvokeInterface *JavaVM;
196 /* typedef struct _JavaVM *JavaVM; */
198 /* struct _JavaVM { */
199 struct JNIInvokeInterface {
200 void *(*reserved0) ();
201 void *(*reserved1) ();
202 void *(*reserved2) ();
203 jint (*DestroyJavaVM) (JavaVM *);
204 jint (*AttachCurrentThread) (JavaVM *, void **, void *);
205 jint (*DetachCurrentThread) (JavaVM *);
206 jint (*GetEnv) (JavaVM *, void **, jint);
207 jint (*AttachCurrentThreadAsDaemon) (JavaVM *, void **, void *);
211 /* native method name, signature and function pointer for use in RegisterNatives */
221 JNI function table, contains functions for the following usages:
226 Global and Local References
228 Accessing Fields of Objects
229 Calling Instance Methods
230 Accessing Static Fields
231 Calling Static Methods
234 Registering Native Methods
239 typedef struct JNINativeInterface *JNIEnv;
240 /* typedef struct JNI_Table *JNIEnv; */
242 /* struct JNI_Table { */
243 struct JNINativeInterface {
244 /* reserverd for future JNI-functions */
250 /* version information */
252 jint (*GetVersion) (JNIEnv*);
254 /* class operations */
256 jclass (*DefineClass) (JNIEnv*, const char *name, jobject loader, const jbyte *buf, jsize len);
257 jclass (*FindClass) (JNIEnv*, const char *name);
259 jmethodID (*FromReflectedMethod) (JNIEnv*, jobject method);
260 jfieldID (*FromReflectedField) (JNIEnv*, jobject field);
262 jobject (*ToReflectedMethod) (JNIEnv*, jclass cls, jmethodID methodID, jboolean isStatic);
264 jclass (*GetSuperclass) (JNIEnv*, jclass sub);
265 jboolean (*IsAssignableFrom) (JNIEnv*, jclass sub, jclass sup);
267 jobject (*ToReflectedField) (JNIEnv*, jclass cls, jfieldID fieldID, jboolean isStatic);
271 jint (*Throw) (JNIEnv*, jthrowable obj);
272 jint (*ThrowNew) (JNIEnv*, jclass clazz, const char *msg);
273 jthrowable (*ExceptionOccurred) (JNIEnv*);
274 void (*ExceptionDescribe) (JNIEnv*);
275 void (*ExceptionClear) (JNIEnv*);
276 void (*FatalError) (JNIEnv*, const char *msg);
278 /* global and local references */
280 jint (*PushLocalFrame) (JNIEnv*, jint capacity);
281 jobject (*PopLocalFrame) (JNIEnv*, jobject result);
283 jobject (*NewGlobalRef) (JNIEnv*, jobject lobj);
284 void (*DeleteGlobalRef) (JNIEnv*, jobject gref);
285 void (*DeleteLocalRef) (JNIEnv*, jobject obj);
286 jboolean (*IsSameObject) (JNIEnv*, jobject obj1, jobject obj2);
287 jobject (*NewLocalRef) (JNIEnv*, jobject ref);
288 jint (*EnsureLocalCapacity) (JNIEnv*, jint capacity);
290 /* object operations */
292 jobject (*AllocObject) (JNIEnv*, jclass clazz);
293 jobject (*NewObject) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
294 jobject (*NewObjectV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
295 jobject (*NewObjectA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
297 jclass (*GetObjectClass) (JNIEnv*, jobject obj);
298 jboolean (*IsInstanceOf) (JNIEnv*, jobject obj, jclass clazz);
300 jmethodID (*GetMethodID) (JNIEnv*, jclass clazz, const char *name, const char *sig);
302 /* calling instance methods */
304 jobject (*CallObjectMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
305 jobject (*CallObjectMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
306 jobject (*CallObjectMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue * args);
308 jboolean (*CallBooleanMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
309 jboolean (*CallBooleanMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
310 jboolean (*CallBooleanMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue * args);
312 jbyte (*CallByteMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
313 jbyte (*CallByteMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
314 jbyte (*CallByteMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
316 jchar (*CallCharMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
317 jchar (*CallCharMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
318 jchar (*CallCharMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
320 jshort (*CallShortMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
321 jshort (*CallShortMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
322 jshort (*CallShortMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
324 jint (*CallIntMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
325 jint (*CallIntMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
326 jint (*CallIntMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
328 jlong (*CallLongMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
329 jlong (*CallLongMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
330 jlong (*CallLongMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
332 jfloat (*CallFloatMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
333 jfloat (*CallFloatMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
334 jfloat (*CallFloatMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
336 jdouble (*CallDoubleMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
337 jdouble (*CallDoubleMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
338 jdouble (*CallDoubleMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
340 void (*CallVoidMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
341 void (*CallVoidMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
342 void (*CallVoidMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue * args);
344 jobject (*CallNonvirtualObjectMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
345 jobject (*CallNonvirtualObjectMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
346 jobject (*CallNonvirtualObjectMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue * args);
348 jboolean (*CallNonvirtualBooleanMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
349 jboolean (*CallNonvirtualBooleanMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
350 jboolean (*CallNonvirtualBooleanMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue * args);
352 jbyte (*CallNonvirtualByteMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
353 jbyte (*CallNonvirtualByteMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
354 jbyte (*CallNonvirtualByteMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
356 jchar (*CallNonvirtualCharMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
357 jchar (*CallNonvirtualCharMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
358 jchar (*CallNonvirtualCharMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
360 jshort (*CallNonvirtualShortMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
361 jshort (*CallNonvirtualShortMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
362 jshort (*CallNonvirtualShortMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
364 jint (*CallNonvirtualIntMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
365 jint (*CallNonvirtualIntMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
366 jint (*CallNonvirtualIntMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
368 jlong (*CallNonvirtualLongMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
369 jlong (*CallNonvirtualLongMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
370 jlong (*CallNonvirtualLongMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
372 jfloat (*CallNonvirtualFloatMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
373 jfloat (*CallNonvirtualFloatMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
374 jfloat (*CallNonvirtualFloatMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
376 jdouble (*CallNonvirtualDoubleMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
377 jdouble (*CallNonvirtualDoubleMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
378 jdouble (*CallNonvirtualDoubleMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
380 void (*CallNonvirtualVoidMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
381 void (*CallNonvirtualVoidMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
382 void (*CallNonvirtualVoidMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue * args);
384 /* accessing fields */
386 jfieldID (*GetFieldID) (JNIEnv*, jclass clazz, const char *name, const char *sig);
388 jobject (*GetObjectField) (JNIEnv*, jobject obj, jfieldID fieldID);
389 jboolean (*GetBooleanField) (JNIEnv*, jobject obj, jfieldID fieldID);
390 jbyte (*GetByteField) (JNIEnv*, jobject obj, jfieldID fieldID);
391 jchar (*GetCharField) (JNIEnv*, jobject obj, jfieldID fieldID);
392 jshort (*GetShortField) (JNIEnv*, jobject obj, jfieldID fieldID);
393 jint (*GetIntField) (JNIEnv*, jobject obj, jfieldID fieldID);
394 jlong (*GetLongField) (JNIEnv*, jobject obj, jfieldID fieldID);
395 jfloat (*GetFloatField) (JNIEnv*, jobject obj, jfieldID fieldID);
396 jdouble (*GetDoubleField) (JNIEnv*, jobject obj, jfieldID fieldID);
398 void (*SetObjectField) (JNIEnv*, jobject obj, jfieldID fieldID, jobject val);
399 void (*SetBooleanField) (JNIEnv*, jobject obj, jfieldID fieldID, jboolean val);
400 void (*SetByteField) (JNIEnv*, jobject obj, jfieldID fieldID, jbyte val);
401 void (*SetCharField) (JNIEnv*, jobject obj, jfieldID fieldID, jchar val);
402 void (*SetShortField) (JNIEnv*, jobject obj, jfieldID fieldID, jshort val);
403 void (*SetIntField) (JNIEnv*, jobject obj, jfieldID fieldID, jint val);
404 void (*SetLongField) (JNIEnv*, jobject obj, jfieldID fieldID, jlong val);
405 void (*SetFloatField) (JNIEnv*, jobject obj, jfieldID fieldID, jfloat val);
406 void (*SetDoubleField) (JNIEnv*, jobject obj, jfieldID fieldID, jdouble val);
408 /* calling static methods */
410 jmethodID (*GetStaticMethodID) (JNIEnv*, jclass clazz, const char *name, const char *sig);
412 jobject (*CallStaticObjectMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
413 jobject (*CallStaticObjectMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
414 jobject (*CallStaticObjectMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
416 jboolean (*CallStaticBooleanMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
417 jboolean (*CallStaticBooleanMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
418 jboolean (*CallStaticBooleanMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
420 jbyte (*CallStaticByteMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
421 jbyte (*CallStaticByteMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
422 jbyte (*CallStaticByteMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
424 jchar (*CallStaticCharMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
425 jchar (*CallStaticCharMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
426 jchar (*CallStaticCharMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
428 jshort (*CallStaticShortMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
429 jshort (*CallStaticShortMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
430 jshort (*CallStaticShortMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
432 jint (*CallStaticIntMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
433 jint (*CallStaticIntMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
434 jint (*CallStaticIntMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
436 jlong (*CallStaticLongMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
437 jlong (*CallStaticLongMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
438 jlong (*CallStaticLongMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
440 jfloat (*CallStaticFloatMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
441 jfloat (*CallStaticFloatMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
442 jfloat (*CallStaticFloatMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
444 jdouble (*CallStaticDoubleMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
445 jdouble (*CallStaticDoubleMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
446 jdouble (*CallStaticDoubleMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
448 void (*CallStaticVoidMethod) (JNIEnv*, jclass cls, jmethodID methodID, ...);
449 void (*CallStaticVoidMethodV) (JNIEnv*, jclass cls, jmethodID methodID, va_list args);
450 void (*CallStaticVoidMethodA) (JNIEnv*, jclass cls, jmethodID methodID, jvalue * args);
452 /* accessing static fields */
454 jfieldID (*GetStaticFieldID) (JNIEnv*, jclass clazz, const char *name, const char *sig);
455 jobject (*GetStaticObjectField) (JNIEnv*, jclass clazz, jfieldID fieldID);
456 jboolean (*GetStaticBooleanField) (JNIEnv*, jclass clazz, jfieldID fieldID);
457 jbyte (*GetStaticByteField) (JNIEnv*, jclass clazz, jfieldID fieldID);
458 jchar (*GetStaticCharField) (JNIEnv*, jclass clazz, jfieldID fieldID);
459 jshort (*GetStaticShortField) (JNIEnv*, jclass clazz, jfieldID fieldID);
460 jint (*GetStaticIntField) (JNIEnv*, jclass clazz, jfieldID fieldID);
461 jlong (*GetStaticLongField) (JNIEnv*, jclass clazz, jfieldID fieldID);
462 jfloat (*GetStaticFloatField) (JNIEnv*, jclass clazz, jfieldID fieldID);
463 jdouble (*GetStaticDoubleField) (JNIEnv*, jclass clazz, jfieldID fieldID);
465 void (*SetStaticObjectField) (JNIEnv*, jclass clazz, jfieldID fieldID, jobject value);
466 void (*SetStaticBooleanField) (JNIEnv*, jclass clazz, jfieldID fieldID, jboolean value);
467 void (*SetStaticByteField) (JNIEnv*, jclass clazz, jfieldID fieldID, jbyte value);
468 void (*SetStaticCharField) (JNIEnv*, jclass clazz, jfieldID fieldID, jchar value);
469 void (*SetStaticShortField) (JNIEnv*, jclass clazz, jfieldID fieldID, jshort value);
470 void (*SetStaticIntField) (JNIEnv*, jclass clazz, jfieldID fieldID, jint value);
471 void (*SetStaticLongField) (JNIEnv*, jclass clazz, jfieldID fieldID, jlong value);
472 void (*SetStaticFloatField) (JNIEnv*, jclass clazz, jfieldID fieldID, jfloat value);
473 void (*SetStaticDoubleField) (JNIEnv*, jclass clazz, jfieldID fieldID, jdouble value);
475 /* string operations */
477 jstring (*NewString) (JNIEnv*, const jchar *unicode, jsize len);
478 jsize (*GetStringLength) (JNIEnv*, jstring str);
479 const jchar *(*GetStringChars) (JNIEnv*, jstring str, jboolean *isCopy);
480 void (*ReleaseStringChars) (JNIEnv*, jstring str, const jchar *chars);
482 jstring (*NewStringUTF) (JNIEnv*, const char *bytes);
483 jsize (*GetStringUTFLength) (JNIEnv*, jstring str);
484 const char* (*GetStringUTFChars) (JNIEnv*, jstring str, jboolean *isCopy);
485 void (*ReleaseStringUTFChars) (JNIEnv*, jstring str, const char* chars);
487 /* array operations */
489 jsize (*GetArrayLength) (JNIEnv*, jarray array);
491 jobjectArray (*NewObjectArray) (JNIEnv*, jsize len, jclass clazz, jobject init);
492 jobject (*GetObjectArrayElement) (JNIEnv*, jobjectArray array, jsize index);
493 void (*SetObjectArrayElement) (JNIEnv*, jobjectArray array, jsize index, jobject val);
495 jbooleanArray (*NewBooleanArray) (JNIEnv*, jsize len);
496 jbyteArray (*NewByteArray) (JNIEnv*, jsize len);
497 jcharArray (*NewCharArray) (JNIEnv*, jsize len);
498 jshortArray (*NewShortArray) (JNIEnv*, jsize len);
499 jintArray (*NewIntArray) (JNIEnv*, jsize len);
500 jlongArray (*NewLongArray) (JNIEnv*, jsize len);
501 jfloatArray (*NewFloatArray) (JNIEnv*, jsize len);
502 jdoubleArray (*NewDoubleArray) (JNIEnv*, jsize len);
504 jboolean * (*GetBooleanArrayElements) (JNIEnv*, jbooleanArray array, jboolean *isCopy);
505 jbyte * (*GetByteArrayElements) (JNIEnv*, jbyteArray array, jboolean *isCopy);
506 jchar * (*GetCharArrayElements) (JNIEnv*, jcharArray array, jboolean *isCopy);
507 jshort * (*GetShortArrayElements) (JNIEnv*, jshortArray array, jboolean *isCopy);
508 jint * (*GetIntArrayElements) (JNIEnv*, jintArray array, jboolean *isCopy);
509 jlong * (*GetLongArrayElements) (JNIEnv*, jlongArray array, jboolean *isCopy);
510 jfloat * (*GetFloatArrayElements) (JNIEnv*, jfloatArray array, jboolean *isCopy);
511 jdouble * (*GetDoubleArrayElements) (JNIEnv*, jdoubleArray array, jboolean *isCopy);
513 void (*ReleaseBooleanArrayElements) (JNIEnv*, jbooleanArray array, jboolean *elems, jint mode);
514 void (*ReleaseByteArrayElements) (JNIEnv*, jbyteArray array, jbyte *elems, jint mode);
515 void (*ReleaseCharArrayElements) (JNIEnv*, jcharArray array, jchar *elems, jint mode);
516 void (*ReleaseShortArrayElements) (JNIEnv*, jshortArray array, jshort *elems, jint mode);
517 void (*ReleaseIntArrayElements) (JNIEnv*, jintArray array, jint *elems, jint mode);
518 void (*ReleaseLongArrayElements) (JNIEnv*, jlongArray array, jlong *elems, jint mode);
519 void (*ReleaseFloatArrayElements) (JNIEnv*, jfloatArray array, jfloat *elems, jint mode);
520 void (*ReleaseDoubleArrayElements) (JNIEnv*, jdoubleArray array, jdouble *elems, jint mode);
522 void (*GetBooleanArrayRegion) (JNIEnv*, jbooleanArray array, jsize start, jsize l, jboolean *buf);
523 void (*GetByteArrayRegion) (JNIEnv*, jbyteArray array, jsize start, jsize len, jbyte *buf);
524 void (*GetCharArrayRegion) (JNIEnv*, jcharArray array, jsize start, jsize len, jchar *buf);
525 void (*GetShortArrayRegion) (JNIEnv*, jshortArray array, jsize start, jsize len, jshort *buf);
526 void (*GetIntArrayRegion) (JNIEnv*, jintArray array, jsize start, jsize len, jint *buf);
527 void (*GetLongArrayRegion) (JNIEnv*, jlongArray array, jsize start, jsize len, jlong *buf);
528 void (*GetFloatArrayRegion) (JNIEnv*, jfloatArray array, jsize start, jsize len, jfloat *buf);
529 void (*GetDoubleArrayRegion) (JNIEnv*, jdoubleArray array, jsize start, jsize len, jdouble *buf);
531 void (*SetBooleanArrayRegion) (JNIEnv*, jbooleanArray array, jsize start, jsize l, jboolean *buf);
532 void (*SetByteArrayRegion) (JNIEnv*, jbyteArray array, jsize start, jsize len, jbyte *buf);
533 void (*SetCharArrayRegion) (JNIEnv*, jcharArray array, jsize start, jsize len, jchar *buf);
534 void (*SetShortArrayRegion) (JNIEnv*, jshortArray array, jsize start, jsize len, jshort *buf);
535 void (*SetIntArrayRegion) (JNIEnv*, jintArray array, jsize start, jsize len, jint *buf);
536 void (*SetLongArrayRegion) (JNIEnv*, jlongArray array, jsize start, jsize len, jlong *buf);
537 void (*SetFloatArrayRegion) (JNIEnv*, jfloatArray array, jsize start, jsize len, jfloat *buf);
538 void (*SetDoubleArrayRegion) (JNIEnv*, jdoubleArray array, jsize start, jsize len, jdouble *buf);
540 /* registering native methods */
542 jint (*RegisterNatives) (JNIEnv*, jclass clazz, const JNINativeMethod *methods, jint nMethods);
543 jint (*UnregisterNatives) (JNIEnv*, jclass clazz);
545 /* monitor operations */
547 jint (*MonitorEnter) (JNIEnv*, jobject obj);
548 jint (*MonitorExit) (JNIEnv*, jobject obj);
550 /* JavaVM interface */
552 jint (*GetJavaVM) (JNIEnv*, JavaVM **vm);
554 /* new JNI 1.2 functions */
556 void (*GetStringRegion) (JNIEnv*, jstring str, jsize start, jsize len, jchar *buf);
557 void (*GetStringUTFRegion) (JNIEnv*, jstring str, jsize start, jsize len, char *buf);
559 void * (*GetPrimitiveArrayCritical) (JNIEnv*, jarray array, jboolean *isCopy);
560 void (*ReleasePrimitiveArrayCritical) (JNIEnv*, jarray array, void *carray, jint mode);
562 const jchar * (*GetStringCritical) (JNIEnv*, jstring string, jboolean *isCopy);
563 void (*ReleaseStringCritical) (JNIEnv*, jstring string, const jchar *cstring);
565 jweak (*NewWeakGlobalRef) (JNIEnv*, jobject obj);
566 void (*DeleteWeakGlobalRef) (JNIEnv*, jweak ref);
568 jboolean (*ExceptionCheck) (JNIEnv*);
570 /* new JNI 1.4 functions */
572 jobject (*NewDirectByteBuffer) (JNIEnv *env, void* address, jlong capacity);
573 void* (*GetDirectBufferAddress) (JNIEnv *env, jobject buf);
574 jlong (*GetDirectBufferCapacity) (JNIEnv *env, jobject buf);
578 /* function prototypes ********************************************************/
580 jint JNI_GetDefaultJavaVMInitArgs(void *vm_args);
581 jint JNI_GetCreatedJavaVMs(JavaVM **vmBuf, jsize bufLen, jsize *nVMs);
582 jint JNI_CreateJavaVM(JavaVM **p_vm, JNIEnv **p_env, void *vm_args);
584 jfieldID getFieldID_critical(JNIEnv *env, jclass clazz, char *name, char *sig);
586 jobject GetObjectField(JNIEnv *env, jobject obj, jfieldID fieldID);
587 jboolean GetBooleanField(JNIEnv *env, jobject obj, jfieldID fieldID);
588 jbyte GetByteField(JNIEnv *env, jobject obj, jfieldID fieldID);
589 jchar GetCharField(JNIEnv *env, jobject obj, jfieldID fieldID);
590 jshort GetShortField(JNIEnv *env, jobject obj, jfieldID fieldID);
591 jint GetIntField(JNIEnv *env, jobject obj, jfieldID fieldID);
592 jlong GetLongField(JNIEnv *env, jobject obj, jfieldID fieldID);
593 jfloat GetFloatField(JNIEnv *env, jobject obj, jfieldID fieldID);
594 jdouble GetDoubleField(JNIEnv *env, jobject obj, jfieldID fieldID);
596 void SetObjectField(JNIEnv *env, jobject obj, jfieldID fieldID, jobject val);
597 void SetBooleanField(JNIEnv *env, jobject obj, jfieldID fieldID, jboolean val);
598 void SetByteField(JNIEnv *env, jobject obj, jfieldID fieldID, jbyte val);
599 void SetCharField(JNIEnv *env, jobject obj, jfieldID fieldID, jchar val);
600 void SetShortField(JNIEnv *env, jobject obj, jfieldID fieldID, jshort val);
601 void SetIntField(JNIEnv *env, jobject obj, jfieldID fieldID, jint val);
602 void SetLongField(JNIEnv *env, jobject obj, jfieldID fieldID, jlong val);
603 void SetFloatField(JNIEnv *env, jobject obj, jfieldID fieldID, jfloat val);
604 void SetDoubleField(JNIEnv *env, jobject obj, jfieldID fieldID, jdouble val);
607 /* CACAO related stuff ********************************************************/
609 /* local reference table ******************************************************/
611 #define LOCALREFTABLE_CAPACITY 16
613 typedef struct localref_table localref_table;
615 /* localref_table **************************************************************
617 ATTENTION: keep this structure a multiple of 8-bytes!!! This is
618 essential for the native stub on 64-bit architectures.
620 *******************************************************************************/
622 struct localref_table {
623 s4 capacity; /* table size */
624 s4 used; /* currently used references */
625 s4 localframes; /* number of current frames */
626 s4 PADDING; /* 8-byte padding */
627 localref_table *prev; /* link to prev table (LocalFrame) */
628 java_objectheader *refs[LOCALREFTABLE_CAPACITY]; /* references */
631 #if defined(USE_THREADS)
632 #define LOCALREFTABLE (THREADINFO->_localref_table)
634 extern localref_table *_no_threads_localref_table;
636 #define LOCALREFTABLE (_no_threads_localref_table)
640 #define setField(obj,typ,var,val) *((typ*) ((long int) obj + (long int) var->offset))=val;
641 #define getField(obj,typ,var) *((typ*) ((long int) obj + (long int) var->offset))
642 #define setfield_critical(clazz,obj,name,sig,jdatatype,val) setField(obj,jdatatype,getFieldID_critical(env,clazz,name,sig),val);
644 /* initialize JNI subsystem */
647 jobject *_Jv_jni_invokeNative(methodinfo *m, jobject obj,
648 java_objectarray *params);
650 extern void* ptr_env;
651 extern struct JNINativeInterface JNI_JNIEnvTable;
657 * These are local overrides for various environment variables in Emacs.
658 * Please do not remove this and leave it at the end of the file, where
659 * Emacs will automagically detect them.
660 * ---------------------------------------------------------------------
663 * indent-tabs-mode: t