OSDN Git Service

* java/io/natFileDescriptorPosix.cc (open): Add O_CREAT in
[pf3gnuchains/gcc-fork.git] / libjava / include / jni.h
1 /* Copyright (C) 1998, 1999, 2000  Free Software Foundation
2
3    This file is part of libgcj.
4
5 This software is copyrighted work licensed under the terms of the
6 Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
7 details.  */
8
9 /* Note: this file must be compilable by the C compiler (for now,
10    assuming GNU C is ok).  This means you must never use `//'
11    comments, and all C++-specific code must be conditional on
12    __cplusplus.  */
13
14 #ifndef __GCJ_JNI_H__
15 #define __GCJ_JNI_H__
16
17 #include <stdarg.h>
18 #define _Jv_va_list va_list
19
20 #ifdef __cplusplus
21
22 /* This is wrong, because it pollutes the name-space too much! */
23 #include <gcj/javaprims.h>
24 #include <gcj/array.h>
25
26 typedef struct _Jv_JNIEnv JNIEnv;
27 typedef struct _Jv_JavaVM JavaVM;
28
29 #define JNI_TRUE true
30 #define JNI_FALSE false
31
32 #else /* __cplusplus */
33
34 typedef int    jbyte  __attribute__((__mode__(__QI__)));
35 typedef int    jshort __attribute__((__mode__(__HI__)));
36 typedef int    jint   __attribute__((__mode__(__SI__)));
37 typedef int    jlong  __attribute__((__mode__(__DI__)));
38 typedef int    jboolean __attribute__((__mode__(__QI__)));
39 typedef unsigned short jchar __attribute__((__mode__(__HI__)));
40 typedef float  jfloat;
41 typedef double jdouble;
42 typedef jint jsize;
43
44 typedef void *jobject;
45 typedef jobject jclass;
46 typedef jobject jstring;
47 typedef jobject jarray;
48 typedef jobject jthrowable;
49 typedef jobject jobjectArray;
50 typedef jobject jbyteArray;
51 typedef jobject jshortArray;
52 typedef jobject jintArray;
53 typedef jobject jlongArray;
54 typedef jobject jbooleanArray;
55 typedef jobject jcharArray;
56 typedef jobject jfloatArray;
57 typedef jobject jdoubleArray;
58
59 /* Dummy defines.  */
60 typedef void *jfieldID;
61 typedef void *jmethodID;
62
63 typedef const struct JNINativeInterface *JNIEnv;
64 typedef const struct JNIInvokeInterface *JavaVM;
65
66 #define JNI_TRUE  1
67 #define JNI_FALSE 0
68
69 #endif /* __cplusplus */
70
71 /* FIXME: this is wrong.  */
72 typedef jobject jweak;
73
74 /* Version numbers.  */
75 #define JNI_VERSION_1_1 0x00010001
76 #define JNI_VERSION_1_2 0x00010002
77
78 /* Used when releasing array elements.  */
79 #define JNI_COMMIT 1
80 #define JNI_ABORT  2
81
82 /* Error codes */
83 #define JNI_OK            0
84 #define JNI_ERR          -1
85 #define JNI_EDETACHED    -2
86 #define JNI_EVERSION     -3
87
88 #ifdef __cplusplus
89 extern "C"
90 {
91 #endif /* __cplusplus */
92
93 /* These functions might be defined in libraries which we load; the
94    JNI implementation calls them at the appropriate times.  */
95 extern jint JNI_OnLoad (JavaVM *, void *);
96 extern void JNI_OnUnload (JavaVM *, void *);
97
98 /* These functions are called by user code to start using the
99    invocation API.  */
100 extern jint JNI_GetDefaultJavaVMInitArgs (void *);
101 extern jint JNI_CreateJavaVM (JavaVM **, void **, void *);
102 extern jint JNI_GetCreatedJavaVMs(JavaVM **, jsize, jsize *);
103
104 #ifdef __cplusplus
105 };
106 #endif /* __cplusplus */
107
108 typedef union jvalue
109 {
110   jboolean z;
111   jbyte    b;
112   jchar    c;
113   jshort   s;
114   jint     i;
115   jlong    j;
116   jfloat   f;
117   jdouble  d;
118   jobject  l;
119 } jvalue;
120
121 #ifdef __cplusplus
122 typedef void * (*_Jv_func) (...);
123 #else
124 typedef void * (*_Jv_func) ();
125 #endif
126
127 /* This structure is used when registering native methods.  */
128 typedef struct
129 {
130   char *name;
131   char *signature;
132   void *fnPtr;                  /* Sigh.  */
133 } JNINativeMethod;
134
135 struct JNINativeInterface
136 {
137   _Jv_func reserved0;
138   _Jv_func reserved1;
139   _Jv_func reserved2;
140   _Jv_func reserved3;
141
142   jint     (*GetVersion)                   (JNIEnv *);
143   jclass   (*DefineClass)                  (JNIEnv *, jobject,
144                                             const jbyte *, jsize);
145   jclass   (*FindClass)                    (JNIEnv *, const char *);
146
147   jmethodID (*FromReflectedMethod)         (JNIEnv *, jobject);
148   jfieldID  (*FromReflectedField)          (JNIEnv *, jobject);
149   jobject   (*ToReflectedMethod)           (JNIEnv *, jclass, jmethodID,
150                                             jboolean);
151
152   jclass   (*GetSuperclass)                (JNIEnv *, jclass);
153   jboolean (*IsAssignableFrom)             (JNIEnv *, jclass, jclass);
154
155   jobject  (*ToReflectedField)             (JNIEnv *, jclass, jfieldID,
156                                             jboolean);
157
158   jint     (*Throw)                        (JNIEnv *, jthrowable);
159   jint     (*ThrowNew)                     (JNIEnv *, jclass, const char *);
160   jthrowable (*ExceptionOccurred)          (JNIEnv *);
161   void     (*ExceptionDescribe)            (JNIEnv *);
162   void     (*ExceptionClear)               (JNIEnv *);
163   void     (*FatalError)                   (JNIEnv *, const char *);
164
165   jint     (*PushLocalFrame)               (JNIEnv *, jint);
166   jobject  (*PopLocalFrame)                (JNIEnv *, jobject);
167
168   jobject  (*NewGlobalRef)                 (JNIEnv *, jobject);
169   void     (*DeleteGlobalRef)              (JNIEnv *, jobject);
170   void     (*DeleteLocalRef)               (JNIEnv *, jobject);;
171   jboolean (*IsSameObject)                 (JNIEnv *, jobject, jobject);
172
173   jobject  (*NewLocalRef)                  (JNIEnv *, jobject);
174   jint     (*EnsureLocalCapacity)          (JNIEnv *, jint);
175
176   jobject  (*AllocObject)                  (JNIEnv *, jclass);
177   jobject (*NewObject)                     (JNIEnv *, jclass, jmethodID, ...);
178   jobject (*NewObjectV)                    (JNIEnv *, jclass, jmethodID,
179                                             _Jv_va_list);
180   jobject (*NewObjectA)                    (JNIEnv *, jclass, jmethodID,
181                                             jvalue *);
182
183   jclass   (*GetObjectClass)               (JNIEnv *, jobject);
184   jboolean (*IsInstanceOf)                 (JNIEnv *, jobject, jclass);
185   jmethodID (*GetMethodID)                 (JNIEnv *, jclass, const char *,
186                                             const char *);
187
188   jobject       (*CallObjectMethod)        (JNIEnv *, jobject, jmethodID,
189                                             ...);
190   jobject       (*CallObjectMethodV)       (JNIEnv *, jobject, jmethodID,
191                                             _Jv_va_list);
192   jobject       (*CallObjectMethodA)       (JNIEnv *, jobject, jmethodID,
193                                             jvalue *);
194   jboolean      (*CallBooleanMethod)       (JNIEnv *, jobject, jmethodID,
195                                             ...);
196   jboolean      (*CallBooleanMethodV)      (JNIEnv *, jobject, jmethodID,
197                                             _Jv_va_list);
198   jboolean      (*CallBooleanMethodA)      (JNIEnv *, jobject, jmethodID,
199                                             jvalue *);
200   jbyte         (*CallByteMethod)          (JNIEnv *, jobject, jmethodID,
201                                             ...);
202   jbyte         (*CallByteMethodV)         (JNIEnv *, jobject, jmethodID,
203                                             _Jv_va_list);
204   jbyte         (*CallByteMethodA)         (JNIEnv *, jobject, jmethodID,
205                                             jvalue *);
206   jchar         (*CallCharMethod)          (JNIEnv *, jobject, jmethodID,
207                                             ...);
208   jchar         (*CallCharMethodV)         (JNIEnv *, jobject, jmethodID,
209                                             _Jv_va_list);
210   jchar         (*CallCharMethodA)         (JNIEnv *, jobject, jmethodID,
211                                             jvalue *);
212   jshort        (*CallShortMethod)         (JNIEnv *, jobject, jmethodID,
213                                             ...);
214   jshort        (*CallShortMethodV)        (JNIEnv *, jobject, jmethodID,
215                                             _Jv_va_list);
216   jshort        (*CallShortMethodA)        (JNIEnv *, jobject, jmethodID,
217                                             jvalue *);
218   jint          (*CallIntMethod)           (JNIEnv *, jobject, jmethodID,
219                                             ...);
220   jint          (*CallIntMethodV)          (JNIEnv *, jobject, jmethodID,
221                                             _Jv_va_list);
222   jint          (*CallIntMethodA)          (JNIEnv *, jobject, jmethodID,
223                                             jvalue *);
224   jlong         (*CallLongMethod)          (JNIEnv *, jobject, jmethodID,
225                                             ...);
226   jlong         (*CallLongMethodV)         (JNIEnv *, jobject, jmethodID,
227                                             _Jv_va_list);
228   jlong         (*CallLongMethodA)         (JNIEnv *, jobject, jmethodID,
229                                             jvalue *);
230   jfloat        (*CallFloatMethod)         (JNIEnv *, jobject, jmethodID,
231                                             ...);
232   jfloat        (*CallFloatMethodV)        (JNIEnv *, jobject, jmethodID,
233                                             _Jv_va_list);
234   jfloat        (*CallFloatMethodA)        (JNIEnv *, jobject, jmethodID,
235                                             jvalue *);
236   jdouble       (*CallDoubleMethod)        (JNIEnv *, jobject, jmethodID,
237                                             ...);
238   jdouble       (*CallDoubleMethodV)       (JNIEnv *, jobject, jmethodID,
239                                             _Jv_va_list);
240   jdouble       (*CallDoubleMethodA)       (JNIEnv *, jobject, jmethodID,
241                                             jvalue *);
242   void          (*CallVoidMethod)          (JNIEnv *, jobject, jmethodID,
243                                             ...);
244   void          (*CallVoidMethodV)         (JNIEnv *, jobject, jmethodID,
245                                             _Jv_va_list);
246   void          (*CallVoidMethodA)         (JNIEnv *, jobject, jmethodID,
247                                             jvalue *);
248
249   jobject   (*CallNonvirtualObjectMethod)  (JNIEnv *, jobject, jclass,
250                                             jmethodID, ...);
251   jobject   (*CallNonvirtualObjectMethodV) (JNIEnv *, jobject, jclass,
252                                             jmethodID, _Jv_va_list);
253   jobject   (*CallNonvirtualObjectMethodA) (JNIEnv *, jobject, jclass,
254                                             jmethodID, jvalue *);
255   jboolean  (*CallNonvirtualBooleanMethod) (JNIEnv *, jobject, jclass,
256                                             jmethodID, ...);
257   jboolean  (*CallNonvirtualBooleanMethodV) (JNIEnv *, jobject, jclass,
258                                              jmethodID, _Jv_va_list);
259   jboolean  (*CallNonvirtualBooleanMethodA) (JNIEnv *, jobject, jclass,
260                                              jmethodID, jvalue *);
261   jbyte     (*CallNonvirtualByteMethod)    (JNIEnv *, jobject, jclass,
262                                             jmethodID, ...);
263   jbyte     (*CallNonvirtualByteMethodV)   (JNIEnv *, jobject, jclass,
264                                             jmethodID, _Jv_va_list);
265   jbyte     (*CallNonvirtualByteMethodA)   (JNIEnv *, jobject, jclass,
266                                             jmethodID, jvalue *);
267   jchar     (*CallNonvirtualCharMethod)    (JNIEnv *, jobject, jclass,
268                                             jmethodID, ...);
269   jchar     (*CallNonvirtualCharMethodV)   (JNIEnv *, jobject, jclass,
270                                             jmethodID, _Jv_va_list);
271   jchar     (*CallNonvirtualCharMethodA)   (JNIEnv *, jobject, jclass,
272                                             jmethodID, jvalue *);
273   jshort    (*CallNonvirtualShortMethod)   (JNIEnv *, jobject, jclass,
274                                             jmethodID, ...);
275   jshort    (*CallNonvirtualShortMethodV)  (JNIEnv *, jobject, jclass,
276                                             jmethodID, _Jv_va_list);
277   jshort    (*CallNonvirtualShortMethodA)  (JNIEnv *, jobject, jclass,
278                                             jmethodID, jvalue *);
279   jint      (*CallNonvirtualIntMethod)     (JNIEnv *, jobject, jclass,
280                                             jmethodID, ...);
281   jint      (*CallNonvirtualIntMethodV)    (JNIEnv *, jobject, jclass,
282                                             jmethodID, _Jv_va_list);
283   jint      (*CallNonvirtualIntMethodA)    (JNIEnv *, jobject, jclass,
284                                             jmethodID, jvalue *);
285   jlong     (*CallNonvirtualLongMethod)    (JNIEnv *, jobject, jclass,
286                                             jmethodID, ...);
287   jlong     (*CallNonvirtualLongMethodV)   (JNIEnv *, jobject, jclass,
288                                             jmethodID, _Jv_va_list);
289   jlong     (*CallNonvirtualLongMethodA)   (JNIEnv *, jobject, jclass,
290                                             jmethodID, jvalue *);
291   jfloat    (*CallNonvirtualFloatMethod)   (JNIEnv *, jobject, jclass,
292                                             jmethodID, ...);
293   jfloat    (*CallNonvirtualFloatMethodV)  (JNIEnv *, jobject, jclass,
294                                             jmethodID, _Jv_va_list);
295   jfloat    (*CallNonvirtualFloatMethodA)  (JNIEnv *, jobject, jclass,
296                                             jmethodID, jvalue *);
297   jdouble   (*CallNonvirtualDoubleMethod)  (JNIEnv *, jobject, jclass,
298                                             jmethodID, ...);
299   jdouble   (*CallNonvirtualDoubleMethodV) (JNIEnv *, jobject, jclass,
300                                             jmethodID, _Jv_va_list);
301   jdouble   (*CallNonvirtualDoubleMethodA) (JNIEnv *, jobject, jclass,
302                                             jmethodID, jvalue *);
303   void      (*CallNonvirtualVoidMethod)    (JNIEnv *, jobject, jclass,
304                                             jmethodID, ...);
305   void      (*CallNonvirtualVoidMethodV)   (JNIEnv *, jobject, jclass,
306                                             jmethodID, _Jv_va_list);
307   void      (*CallNonvirtualVoidMethodA)   (JNIEnv *, jobject, jclass,
308                                             jmethodID, jvalue *);
309
310   jfieldID      (*GetFieldID)              (JNIEnv *, jclass, const char *,
311                                             const char *);
312
313   jobject  (*GetObjectField)               (JNIEnv *, jobject, jfieldID);
314   jboolean (*GetBooleanField)              (JNIEnv *, jobject, jfieldID);
315   jbyte    (*GetByteField)                 (JNIEnv *, jobject, jfieldID);
316   jchar    (*GetCharField)                 (JNIEnv *, jobject, jfieldID);
317   jshort   (*GetShortField)                (JNIEnv *, jobject, jfieldID);
318   jint     (*GetIntField)                  (JNIEnv *, jobject, jfieldID);
319   jlong    (*GetLongField)                 (JNIEnv *, jobject, jfieldID);
320   jfloat   (*GetFloatField)                (JNIEnv *, jobject, jfieldID);
321   jdouble  (*GetDoubleField)               (JNIEnv *, jobject, jfieldID);
322
323   void          (*SetObjectField)          (JNIEnv *, jobject,
324                                             jfieldID, jobject);
325   void          (*SetBooleanField)         (JNIEnv *, jobject,
326                                             jfieldID, jboolean);
327   void          (*SetByteField)            (JNIEnv *, jobject,
328                                             jfieldID, jbyte);
329   void          (*SetCharField)            (JNIEnv *, jobject,
330                                             jfieldID, jchar);
331   void          (*SetShortField)           (JNIEnv *, jobject,
332                                             jfieldID, jshort);
333   void          (*SetIntField)             (JNIEnv *, jobject,
334                                             jfieldID, jint);
335   void          (*SetLongField)            (JNIEnv *, jobject,
336                                             jfieldID, jlong);
337   void          (*SetFloatField)           (JNIEnv *, jobject,
338                                             jfieldID, jfloat);
339   void          (*SetDoubleField)          (JNIEnv *, jobject,
340                                             jfieldID, jdouble);
341
342   jmethodID (*GetStaticMethodID)           (JNIEnv *, jclass, const char *,
343                                             const char *);
344
345   jobject       (*CallStaticObjectMethod)  (JNIEnv *, jclass, jmethodID,
346                                             ...);
347   jobject       (*CallStaticObjectMethodV) (JNIEnv *, jclass, jmethodID,
348                                             _Jv_va_list);
349   jobject       (*CallStaticObjectMethodA) (JNIEnv *, jclass, jmethodID,
350                                             jvalue *);
351   jboolean      (*CallStaticBooleanMethod) (JNIEnv *, jclass, jmethodID,
352                                             ...);
353   jboolean      (*CallStaticBooleanMethodV) (JNIEnv *, jclass, jmethodID,
354                                              _Jv_va_list);
355   jboolean      (*CallStaticBooleanMethodA) (JNIEnv *, jclass, jmethodID,
356                                              jvalue *);
357   jbyte         (*CallStaticByteMethod)    (JNIEnv *, jclass, jmethodID,
358                                             ...);
359   jbyte         (*CallStaticByteMethodV)   (JNIEnv *, jclass, jmethodID,
360                                             _Jv_va_list);
361   jbyte         (*CallStaticByteMethodA)   (JNIEnv *, jclass, jmethodID,
362                                             jvalue *);
363   jchar         (*CallStaticCharMethod)    (JNIEnv *, jclass, jmethodID,
364                                             ...);
365   jchar         (*CallStaticCharMethodV)   (JNIEnv *, jclass, jmethodID,
366                                             _Jv_va_list);
367   jchar         (*CallStaticCharMethodA)   (JNIEnv *, jclass, jmethodID,
368                                             jvalue *);
369   jshort        (*CallStaticShortMethod)   (JNIEnv *, jclass, jmethodID,
370                                             ...);
371   jshort        (*CallStaticShortMethodV)  (JNIEnv *, jclass, jmethodID,
372                                             _Jv_va_list);
373   jshort        (*CallStaticShortMethodA)  (JNIEnv *, jclass, jmethodID,
374                                             jvalue *);
375   jint          (*CallStaticIntMethod)     (JNIEnv *, jclass, jmethodID,
376                                             ...);
377   jint          (*CallStaticIntMethodV)    (JNIEnv *, jclass, jmethodID,
378                                             _Jv_va_list);
379   jint          (*CallStaticIntMethodA)    (JNIEnv *, jclass, jmethodID,
380                                             jvalue *);
381   jlong         (*CallStaticLongMethod)    (JNIEnv *, jclass, jmethodID,
382                                             ...);
383   jlong         (*CallStaticLongMethodV)   (JNIEnv *, jclass, jmethodID,
384                                             _Jv_va_list);
385   jlong         (*CallStaticLongMethodA)   (JNIEnv *, jclass, jmethodID,
386                                             jvalue *);
387   jfloat        (*CallStaticFloatMethod)   (JNIEnv *, jclass, jmethodID,
388                                             ...);
389   jfloat        (*CallStaticFloatMethodV)  (JNIEnv *, jclass, jmethodID,
390                                             _Jv_va_list);
391   jfloat        (*CallStaticFloatMethodA)  (JNIEnv *, jclass, jmethodID,
392                                             jvalue *);
393   jdouble       (*CallStaticDoubleMethod)  (JNIEnv *, jclass, jmethodID,
394                                             ...);
395   jdouble       (*CallStaticDoubleMethodV) (JNIEnv *, jclass, jmethodID,
396                                             _Jv_va_list);
397   jdouble       (*CallStaticDoubleMethodA) (JNIEnv *, jclass, jmethodID,
398                                             jvalue *);
399   void          (*CallStaticVoidMethod)    (JNIEnv *, jclass, jmethodID,
400                                             ...);
401   void          (*CallStaticVoidMethodV)   (JNIEnv *, jclass, jmethodID,
402                                             _Jv_va_list);
403   void          (*CallStaticVoidMethodA)   (JNIEnv *, jclass, jmethodID,
404                                             jvalue *);
405
406   jfieldID      (*GetStaticFieldID)        (JNIEnv *, jclass, const char *,
407                                             const char *);
408
409   jobject       (*GetStaticObjectField)    (JNIEnv *, jclass, jfieldID);
410   jboolean      (*GetStaticBooleanField)   (JNIEnv *, jclass, jfieldID);
411   jbyte         (*GetStaticByteField)      (JNIEnv *, jclass, jfieldID);
412   jchar         (*GetStaticCharField)      (JNIEnv *, jclass, jfieldID);
413   jshort        (*GetStaticShortField)     (JNIEnv *, jclass, jfieldID);
414   jint          (*GetStaticIntField)       (JNIEnv *, jclass, jfieldID);
415   jlong         (*GetStaticLongField)      (JNIEnv *, jclass, jfieldID);
416   jfloat        (*GetStaticFloatField)     (JNIEnv *, jclass, jfieldID);
417   jdouble       (*GetStaticDoubleField)    (JNIEnv *, jclass, jfieldID);
418
419   void          (*SetStaticObjectField)    (JNIEnv *, jclass,
420                                             jfieldID, jobject);
421   void          (*SetStaticBooleanField)   (JNIEnv *, jclass,
422                                             jfieldID, jboolean);
423   void          (*SetStaticByteField)      (JNIEnv *, jclass,
424                                             jfieldID, jbyte);
425   void          (*SetStaticCharField)      (JNIEnv *, jclass,
426                                             jfieldID, jchar);
427   void          (*SetStaticShortField)     (JNIEnv *, jclass,
428                                             jfieldID, jshort);
429   void          (*SetStaticIntField)       (JNIEnv *, jclass,
430                                             jfieldID, jint);
431   void          (*SetStaticLongField)      (JNIEnv *, jclass,
432                                             jfieldID, jlong);
433   void          (*SetStaticFloatField)     (JNIEnv *, jclass,
434                                             jfieldID, jfloat);
435   void          (*SetStaticDoubleField)    (JNIEnv *, jclass,
436                                             jfieldID, jdouble);
437
438   jstring  (*NewString)                    (JNIEnv *, const jchar *, jsize);
439   jint     (*GetStringLength)              (JNIEnv *, jstring);
440   const jchar * (*GetStringChars)          (JNIEnv *, jstring, jboolean *);
441   void     (*ReleaseStringChars)           (JNIEnv *, jstring, const jchar *);
442   jstring  (*NewStringUTF)                 (JNIEnv *, const char *);
443   jsize    (*GetStringUTFLength)           (JNIEnv *, jstring);
444   const char * (*GetStringUTFChars)        (JNIEnv *, jstring, jboolean *);
445   void     (*ReleaseStringUTFChars)        (JNIEnv *, jstring, const char *);
446   jsize    (*GetArrayLength)               (JNIEnv *, jarray);
447   jarray   (*NewObjectArray)               (JNIEnv *, jsize, jclass, jobject);
448   jobject  (*GetObjectArrayElement)        (JNIEnv *, jobjectArray, jsize);
449   void     (*SetObjectArrayElement)        (JNIEnv *, jobjectArray, jsize,
450                                             jobject);
451
452   jbooleanArray (*NewBooleanArray)         (JNIEnv *, jsize);
453   jbyteArray    (*NewByteArray)            (JNIEnv *, jsize);
454   jcharArray    (*NewCharArray)            (JNIEnv *, jsize);
455   jshortArray   (*NewShortArray)           (JNIEnv *, jsize);
456   jintArray     (*NewIntArray)             (JNIEnv *, jsize);
457   jlongArray    (*NewLongArray)            (JNIEnv *, jsize);
458   jfloatArray   (*NewFloatArray)           (JNIEnv *, jsize);
459   jdoubleArray  (*NewDoubleArray)          (JNIEnv *, jsize);
460
461   jboolean *    (*GetBooleanArrayElements) (JNIEnv *, jbooleanArray,
462                                             jboolean *);
463   jbyte *       (*GetByteArrayElements)    (JNIEnv *, jbyteArray,
464                                             jboolean *);
465   jchar *       (*GetCharArrayElements)    (JNIEnv *, jcharArray,
466                                             jboolean *);
467   jshort *      (*GetShortArrayElements)   (JNIEnv *, jshortArray,
468                                             jboolean *);
469   jint *        (*GetIntArrayElements)     (JNIEnv *, jintArray,
470                                             jboolean *);
471   jlong *       (*GetLongArrayElements)    (JNIEnv *, jlongArray,
472                                             jboolean *);
473   jfloat *      (*GetFloatArrayElements)   (JNIEnv *, jfloatArray,
474                                             jboolean *);
475   jdouble *     (*GetDoubleArrayElements)  (JNIEnv *, jdoubleArray,
476                                             jboolean *);
477
478   void          (*ReleaseBooleanArrayElements) (JNIEnv *, jbooleanArray,
479                                                 jboolean *, jint);
480   void          (*ReleaseByteArrayElements)    (JNIEnv *, jbyteArray,
481                                                 jbyte *, jint);
482   void          (*ReleaseCharArrayElements)    (JNIEnv *, jcharArray,
483                                                 jchar *, jint);
484   void          (*ReleaseShortArrayElements)   (JNIEnv *, jshortArray,
485                                                 jshort *, jint);
486   void          (*ReleaseIntArrayElements)     (JNIEnv *, jintArray,
487                                                 jint *, jint);
488   void          (*ReleaseLongArrayElements)    (JNIEnv *, jlongArray,
489                                                 jlong *, jint);
490   void          (*ReleaseFloatArrayElements)   (JNIEnv *, jfloatArray,
491                                                 jfloat *, jint);
492   void          (*ReleaseDoubleArrayElements)  (JNIEnv *, jdoubleArray,
493                                                 jdouble *, jint);
494
495   void          (*GetBooleanArrayRegion)   (JNIEnv *, jbooleanArray,
496                                             jsize, jsize, jboolean *);
497   void          (*GetByteArrayRegion)      (JNIEnv *, jbooleanArray,
498                                             jsize, jsize, jboolean *);
499   void          (*GetCharArrayRegion)      (JNIEnv *, jbooleanArray,
500                                             jsize, jsize, jboolean *);
501   void          (*GetShortArrayRegion)     (JNIEnv *, jbooleanArray,
502                                             jsize, jsize, jboolean *);
503   void          (*GetIntArrayRegion)       (JNIEnv *, jbooleanArray,
504                                             jsize, jsize, jboolean *);
505   void          (*GetLongArrayRegion)      (JNIEnv *, jbooleanArray,
506                                             jsize, jsize, jboolean *);
507   void          (*GetFloatArrayRegion)     (JNIEnv *, jbooleanArray,
508                                             jsize, jsize, jboolean *);
509   void          (*GetDoubleArrayRegion)    (JNIEnv *, jbooleanArray,
510                                             jsize, jsize, jboolean *);
511
512   void          (*SetBooleanArrayRegion)   (JNIEnv *, jbooleanArray,
513                                             jsize, jsize, jboolean *);
514   void          (*SetByteArrayRegion)      (JNIEnv *, jbooleanArray,
515                                             jsize, jsize, jboolean *);
516   void          (*SetCharArrayRegion)      (JNIEnv *, jbooleanArray,
517                                             jsize, jsize, jboolean *);
518   void          (*SetShortArrayRegion)     (JNIEnv *, jbooleanArray,
519                                             jsize, jsize, jboolean *);
520   void          (*SetIntArrayRegion)       (JNIEnv *, jbooleanArray,
521                                             jsize, jsize, jboolean *);
522   void          (*SetLongArrayRegion)      (JNIEnv *, jbooleanArray,
523                                             jsize, jsize, jboolean *);
524   void          (*SetFloatArrayRegion)     (JNIEnv *, jbooleanArray,
525                                             jsize, jsize, jboolean *);
526   void          (*SetDoubleArrayRegion)    (JNIEnv *, jbooleanArray,
527                                             jsize, jsize, jboolean *);
528
529   jint     (*RegisterNatives)              (JNIEnv *, jclass,
530                                             const JNINativeMethod *, jint);
531   jint     (*UnregisterNatives)            (JNIEnv *, jclass);
532   jint     (*MonitorEnter)                 (JNIEnv *, jobject);
533   jint     (*MonitorExit)                  (JNIEnv *, jobject);
534   jint     (*GetJavaVM)                    (JNIEnv *, JavaVM **);
535
536   void     (*GetStringRegion)              (JNIEnv *, jstring, jsize,
537                                             jsize, jchar *);
538   void     (*GetStringUTFRegion)           (JNIEnv *, jstring, jsize,
539                                             jsize, char *);
540
541   void * (*GetPrimitiveArrayCritical)      (JNIEnv *, jarray, jboolean *);
542   void   (*ReleasePrimitiveArrayCritical)  (JNIEnv *, jarray, void *, jint);
543
544   const jchar * (*GetStringCritical)       (JNIEnv *, jstring, jboolean *);
545   void          (*ReleaseStringCritical)   (JNIEnv *, jstring, const jchar *);
546
547   jweak  (*NewWeakGlobalRef)               (JNIEnv *, jobject);
548   void   (*DeleteWeakGlobalRef)            (JNIEnv *, jweak);
549
550   jboolean      (*ExceptionCheck)          (JNIEnv *);
551 };
552
553 #ifdef __cplusplus
554
555 class _Jv_JNIEnv
556 {
557 public:
558   /* The method table.  */
559   struct JNINativeInterface *p;
560
561   /* FIXME: this is really ugly.  */
562 #ifndef __GCJ_JNI_IMPL__
563 private:
564 #endif
565   /* The current exception.  */
566   jthrowable ex;
567
568   /* The class of the current native method.  */
569   jclass klass;
570
571   /* The chain of local frames.  */
572   struct _Jv_JNI_LocalFrame *locals;
573
574 public:
575   jint GetVersion ()
576   { return p->GetVersion (this); }
577
578   jclass DefineClass (jobject obj0, const jbyte * val1, jsize val2)
579   { return p->DefineClass (this, obj0, val1, val2); }
580
581   jclass FindClass (const char * val0)
582   { return p->FindClass (this, val0); }
583
584   jmethodID FromReflectedMethod (jobject obj0)
585   { return p->FromReflectedMethod (this, obj0); }
586
587   jfieldID FromReflectedField (jobject obj0)
588   { return p->FromReflectedField (this, obj0); }
589
590   jobject ToReflectedMethod (jclass cl0, jmethodID meth1, jboolean val2)
591   { return p->ToReflectedMethod (this, cl0, meth1, val2); }
592
593   jclass GetSuperclass (jclass cl0)
594   { return p->GetSuperclass (this, cl0); }
595
596   jboolean IsAssignableFrom (jclass cl0, jclass cl1)
597   { return p->IsAssignableFrom (this, cl0, cl1); }
598
599   jobject ToReflectedField (jclass cl0, jfieldID fld1, jboolean val2)
600   { return p->ToReflectedField (this, cl0, fld1, val2); }
601
602   jint Throw (jthrowable val0)
603   { return p->Throw (this, val0); }
604
605   jint ThrowNew (jclass cl0, const char * val1)
606   { return p->ThrowNew (this, cl0, val1); }
607
608   jthrowable ExceptionOccurred ()
609   { return p->ExceptionOccurred (this); }
610
611   void ExceptionDescribe ()
612   { p->ExceptionDescribe (this); }
613
614   void ExceptionClear ()
615   { p->ExceptionClear (this); }
616
617   void FatalError (const char * val0)
618   { p->FatalError (this, val0); }
619
620   jint PushLocalFrame (jint val0)
621   { return p->PushLocalFrame (this, val0); }
622
623   jobject PopLocalFrame (jobject obj0)
624   { return p->PopLocalFrame (this, obj0); }
625
626   jobject NewGlobalRef (jobject obj0)
627   { return p->NewGlobalRef (this, obj0); }
628
629   void DeleteGlobalRef (jobject obj0)
630   { p->DeleteGlobalRef (this, obj0); }
631
632   void DeleteLocalRef (jobject obj0)
633   { p->DeleteLocalRef (this, obj0); }
634
635   jboolean IsSameObject (jobject obj0, jobject obj1)
636   { return p->IsSameObject (this, obj0, obj1); }
637
638   jobject NewLocalRef (jobject obj0)
639   { return p->NewLocalRef (this, obj0); }
640
641   jint EnsureLocalCapacity (jint val0)
642   { return p->EnsureLocalCapacity (this, val0); }
643
644   jobject AllocObject (jclass cl0)
645   { return p->AllocObject (this, cl0); }
646
647   jobject NewObject (jclass cl0, jmethodID meth1, ...)
648   {
649     _Jv_va_list args;
650     va_start (args, meth1);
651     jobject result = p->NewObjectV (this, cl0, meth1, args);
652     va_end (args);
653     return result;
654   }
655
656   jobject NewObjectV (jclass cl0, jmethodID meth1, _Jv_va_list val2)
657   { return p->NewObjectV (this, cl0, meth1, val2); }
658
659   jobject NewObjectA (jclass cl0, jmethodID meth1, jvalue * val2)
660   { return p->NewObjectA (this, cl0, meth1, val2); }
661
662   jclass GetObjectClass (jobject obj0)
663   { return p->GetObjectClass (this, obj0); }
664
665   jboolean IsInstanceOf (jobject obj0, jclass cl1)
666   { return p->IsInstanceOf (this, obj0, cl1); }
667
668   jmethodID GetMethodID (jclass cl0, const char * val1, const char * val2)
669   { return p->GetMethodID (this, cl0, val1, val2); }
670
671   jobject CallObjectMethod (jobject obj0, jmethodID meth1, ...)
672   {
673     _Jv_va_list args;
674     va_start (args, meth1);
675     jobject result = p->CallObjectMethodV (this, obj0, meth1, args);
676     va_end (args);
677     return result;
678   }
679
680   jobject CallObjectMethodV (jobject obj0, jmethodID meth1, _Jv_va_list val2)
681   { return p->CallObjectMethodV (this, obj0, meth1, val2); }
682
683   jobject CallObjectMethodA (jobject obj0, jmethodID meth1, jvalue * val2)
684   { return p->CallObjectMethodA (this, obj0, meth1, val2); }
685
686   jboolean CallBooleanMethod (jobject obj0, jmethodID meth1, ...)
687   {
688     _Jv_va_list args;
689     va_start (args, meth1);
690     jboolean result = p->CallBooleanMethodV (this, obj0, meth1, args);
691     va_end (args);
692     return result;
693   }
694
695   jboolean CallBooleanMethodV (jobject obj0, jmethodID meth1, _Jv_va_list val2)
696   { return p->CallBooleanMethodV (this, obj0, meth1, val2); }
697
698   jboolean CallBooleanMethodA (jobject obj0, jmethodID meth1, jvalue * val2)
699   { return p->CallBooleanMethodA (this, obj0, meth1, val2); }
700
701   jbyte CallByteMethod (jobject obj0, jmethodID meth1, ...)
702   {
703     _Jv_va_list args;
704     va_start (args, meth1);
705     jbyte result = p->CallByteMethodV (this, obj0, meth1, args);
706     va_end (args);
707     return result;
708   }
709
710   jbyte CallByteMethodV (jobject obj0, jmethodID meth1, _Jv_va_list val2)
711   { return p->CallByteMethodV (this, obj0, meth1, val2); }
712
713   jbyte CallByteMethodA (jobject obj0, jmethodID meth1, jvalue * val2)
714   { return p->CallByteMethodA (this, obj0, meth1, val2); }
715
716   jchar CallCharMethod (jobject obj0, jmethodID meth1, ...)
717   {
718     _Jv_va_list args;
719     va_start (args, meth1);
720     jchar result = p->CallCharMethodV (this, obj0, meth1, args);
721     va_end (args);
722     return result;
723   }
724
725   jchar CallCharMethodV (jobject obj0, jmethodID meth1, _Jv_va_list val2)
726   { return p->CallCharMethodV (this, obj0, meth1, val2); }
727
728   jchar CallCharMethodA (jobject obj0, jmethodID meth1, jvalue * val2)
729   { return p->CallCharMethodA (this, obj0, meth1, val2); }
730
731   jshort CallShortMethod (jobject obj0, jmethodID meth1, ...)
732   {
733     _Jv_va_list args;
734     va_start (args, meth1);
735     jshort result = p->CallShortMethodV (this, obj0, meth1, args);
736     va_end (args);
737     return result;
738   }
739
740   jshort CallShortMethodV (jobject obj0, jmethodID meth1, _Jv_va_list val2)
741   { return p->CallShortMethodV (this, obj0, meth1, val2); }
742
743   jshort CallShortMethodA (jobject obj0, jmethodID meth1, jvalue * val2)
744   { return p->CallShortMethodA (this, obj0, meth1, val2); }
745
746   jint CallIntMethod (jobject obj0, jmethodID meth1, ...)
747   {
748     _Jv_va_list args;
749     va_start (args, meth1);
750     jint result = p->CallIntMethodV (this, obj0, meth1, args);
751     va_end (args);
752     return result;
753   }
754
755   jint CallIntMethodV (jobject obj0, jmethodID meth1, _Jv_va_list val2)
756   { return p->CallIntMethodV (this, obj0, meth1, val2); }
757
758   jint CallIntMethodA (jobject obj0, jmethodID meth1, jvalue * val2)
759   { return p->CallIntMethodA (this, obj0, meth1, val2); }
760
761   jlong CallLongMethod (jobject obj0, jmethodID meth1, ...)
762   {
763     _Jv_va_list args;
764     va_start (args, meth1);
765     jlong result = p->CallLongMethodV (this, obj0, meth1, args);
766     va_end (args);
767     return result;
768   }
769
770   jlong CallLongMethodV (jobject obj0, jmethodID meth1, _Jv_va_list val2)
771   { return p->CallLongMethodV (this, obj0, meth1, val2); }
772
773   jlong CallLongMethodA (jobject obj0, jmethodID meth1, jvalue * val2)
774   { return p->CallLongMethodA (this, obj0, meth1, val2); }
775
776   jfloat CallFloatMethod (jobject obj0, jmethodID meth1, ...)
777   {
778     _Jv_va_list args;
779     va_start (args, meth1);
780     jfloat result = p->CallFloatMethodV (this, obj0, meth1, args);
781     va_end (args);
782     return result;
783   }
784
785   jfloat CallFloatMethodV (jobject obj0, jmethodID meth1, _Jv_va_list val2)
786   { return p->CallFloatMethodV (this, obj0, meth1, val2); }
787
788   jfloat CallFloatMethodA (jobject obj0, jmethodID meth1, jvalue * val2)
789   { return p->CallFloatMethodA (this, obj0, meth1, val2); }
790
791   jdouble CallDoubleMethod (jobject obj0, jmethodID meth1, ...)
792   {
793     _Jv_va_list args;
794     va_start (args, meth1);
795     jdouble result = p->CallDoubleMethodV (this, obj0, meth1, args);
796     va_end (args);
797     return result;
798   }
799
800   jdouble CallDoubleMethodV (jobject obj0, jmethodID meth1, _Jv_va_list val2)
801   { return p->CallDoubleMethodV (this, obj0, meth1, val2); }
802
803   jdouble CallDoubleMethodA (jobject obj0, jmethodID meth1, jvalue * val2)
804   { return p->CallDoubleMethodA (this, obj0, meth1, val2); }
805
806   void CallVoidMethod (jobject obj0, jmethodID meth1, ...)
807   {
808     _Jv_va_list args;
809     va_start (args, meth1);
810     p->CallVoidMethodV (this, obj0, meth1, args);
811     va_end (args);
812   }
813
814   void CallVoidMethodV (jobject obj0, jmethodID meth1, _Jv_va_list val2)
815   { p->CallVoidMethodV (this, obj0, meth1, val2); }
816
817   void CallVoidMethodA (jobject obj0, jmethodID meth1, jvalue * val2)
818   { p->CallVoidMethodA (this, obj0, meth1, val2); }
819
820   jobject CallNonvirtualObjectMethod (jobject obj0, jclass cl1, jmethodID meth2, ...)
821   {
822     _Jv_va_list args;
823     va_start (args, meth2);
824     jobject result = p->CallNonvirtualObjectMethodV (this, obj0, cl1, meth2, args);
825     va_end (args);
826     return result;
827   }
828
829   jobject CallNonvirtualObjectMethodV (jobject obj0, jclass cl1, jmethodID meth2, _Jv_va_list val3)
830   { return p->CallNonvirtualObjectMethodV (this, obj0, cl1, meth2, val3); }
831
832   jobject CallNonvirtualObjectMethodA (jobject obj0, jclass cl1, jmethodID meth2, jvalue * val3)
833   { return p->CallNonvirtualObjectMethodA (this, obj0, cl1, meth2, val3); }
834
835   jboolean CallNonvirtualBooleanMethod (jobject obj0, jclass cl1, jmethodID meth2, ...)
836   {
837     _Jv_va_list args;
838     va_start (args, meth2);
839     jboolean result = p->CallNonvirtualBooleanMethodV (this, obj0, cl1, meth2, args);
840     va_end (args);
841     return result;
842   }
843
844   jboolean CallNonvirtualBooleanMethodV (jobject obj0, jclass cl1, jmethodID meth2, _Jv_va_list val3)
845   { return p->CallNonvirtualBooleanMethodV (this, obj0, cl1, meth2, val3); }
846
847   jboolean CallNonvirtualBooleanMethodA (jobject obj0, jclass cl1, jmethodID meth2, jvalue * val3)
848   { return p->CallNonvirtualBooleanMethodA (this, obj0, cl1, meth2, val3); }
849
850   jbyte CallNonvirtualByteMethod (jobject obj0, jclass cl1, jmethodID meth2, ...)
851   {
852     _Jv_va_list args;
853     va_start (args, meth2);
854     jbyte result = p->CallNonvirtualByteMethodV (this, obj0, cl1, meth2, args);
855     va_end (args);
856     return result;
857   }
858
859   jbyte CallNonvirtualByteMethodV (jobject obj0, jclass cl1, jmethodID meth2, _Jv_va_list val3)
860   { return p->CallNonvirtualByteMethodV (this, obj0, cl1, meth2, val3); }
861
862   jbyte CallNonvirtualByteMethodA (jobject obj0, jclass cl1, jmethodID meth2, jvalue * val3)
863   { return p->CallNonvirtualByteMethodA (this, obj0, cl1, meth2, val3); }
864
865   jchar CallNonvirtualCharMethod (jobject obj0, jclass cl1, jmethodID meth2, ...)
866   {
867     _Jv_va_list args;
868     va_start (args, meth2);
869     jchar result = p->CallNonvirtualCharMethodV (this, obj0, cl1, meth2, args);
870     va_end (args);
871     return result;
872   }
873
874   jchar CallNonvirtualCharMethodV (jobject obj0, jclass cl1, jmethodID meth2, _Jv_va_list val3)
875   { return p->CallNonvirtualCharMethodV (this, obj0, cl1, meth2, val3); }
876
877   jchar CallNonvirtualCharMethodA (jobject obj0, jclass cl1, jmethodID meth2, jvalue * val3)
878   { return p->CallNonvirtualCharMethodA (this, obj0, cl1, meth2, val3); }
879
880   jshort CallNonvirtualShortMethod (jobject obj0, jclass cl1, jmethodID meth2, ...)
881   {
882     _Jv_va_list args;
883     va_start (args, meth2);
884     jshort result = p->CallNonvirtualShortMethodV (this, obj0, cl1, meth2, args);
885     va_end (args);
886     return result;
887   }
888
889   jshort CallNonvirtualShortMethodV (jobject obj0, jclass cl1, jmethodID meth2, _Jv_va_list val3)
890   { return p->CallNonvirtualShortMethodV (this, obj0, cl1, meth2, val3); }
891
892   jshort CallNonvirtualShortMethodA (jobject obj0, jclass cl1, jmethodID meth2, jvalue * val3)
893   { return p->CallNonvirtualShortMethodA (this, obj0, cl1, meth2, val3); }
894
895   jint CallNonvirtualIntMethod (jobject obj0, jclass cl1, jmethodID meth2, ...)
896   {
897     _Jv_va_list args;
898     va_start (args, meth2);
899     jint result = p->CallNonvirtualIntMethodV (this, obj0, cl1, meth2, args);
900     va_end (args);
901     return result;
902   }
903
904   jint CallNonvirtualIntMethodV (jobject obj0, jclass cl1, jmethodID meth2, _Jv_va_list val3)
905   { return p->CallNonvirtualIntMethodV (this, obj0, cl1, meth2, val3); }
906
907   jint CallNonvirtualIntMethodA (jobject obj0, jclass cl1, jmethodID meth2, jvalue * val3)
908   { return p->CallNonvirtualIntMethodA (this, obj0, cl1, meth2, val3); }
909
910   jlong CallNonvirtualLongMethod (jobject obj0, jclass cl1, jmethodID meth2, ...)
911   {
912     _Jv_va_list args;
913     va_start (args, meth2);
914     jlong result = p->CallNonvirtualLongMethodV (this, obj0, cl1, meth2, args);
915     va_end (args);
916     return result;
917   }
918
919   jlong CallNonvirtualLongMethodV (jobject obj0, jclass cl1, jmethodID meth2, _Jv_va_list val3)
920   { return p->CallNonvirtualLongMethodV (this, obj0, cl1, meth2, val3); }
921
922   jlong CallNonvirtualLongMethodA (jobject obj0, jclass cl1, jmethodID meth2, jvalue * val3)
923   { return p->CallNonvirtualLongMethodA (this, obj0, cl1, meth2, val3); }
924
925   jfloat CallNonvirtualFloatMethod (jobject obj0, jclass cl1, jmethodID meth2, ...)
926   {
927     _Jv_va_list args;
928     va_start (args, meth2);
929     jfloat result = p->CallNonvirtualFloatMethodV (this, obj0, cl1, meth2, args);
930     va_end (args);
931     return result;
932   }
933
934   jfloat CallNonvirtualFloatMethodV (jobject obj0, jclass cl1, jmethodID meth2, _Jv_va_list val3)
935   { return p->CallNonvirtualFloatMethodV (this, obj0, cl1, meth2, val3); }
936
937   jfloat CallNonvirtualFloatMethodA (jobject obj0, jclass cl1, jmethodID meth2, jvalue * val3)
938   { return p->CallNonvirtualFloatMethodA (this, obj0, cl1, meth2, val3); }
939
940   jdouble CallNonvirtualDoubleMethod (jobject obj0, jclass cl1, jmethodID meth2, ...)
941   {
942     _Jv_va_list args;
943     va_start (args, meth2);
944     jdouble result = p->CallNonvirtualDoubleMethodV (this, obj0, cl1, meth2, args);
945     va_end (args);
946     return result;
947   }
948
949   jdouble CallNonvirtualDoubleMethodV (jobject obj0, jclass cl1, jmethodID meth2, _Jv_va_list val3)
950   { return p->CallNonvirtualDoubleMethodV (this, obj0, cl1, meth2, val3); }
951
952   jdouble CallNonvirtualDoubleMethodA (jobject obj0, jclass cl1, jmethodID meth2, jvalue * val3)
953   { return p->CallNonvirtualDoubleMethodA (this, obj0, cl1, meth2, val3); }
954
955   void CallNonvirtualVoidMethod (jobject obj0, jclass cl1, jmethodID meth2, ...)
956   {
957     _Jv_va_list args;
958     va_start (args, meth2);
959     p->CallNonvirtualVoidMethodV (this, obj0, cl1, meth2, args);
960     va_end (args);
961   }
962
963   void CallNonvirtualVoidMethodV (jobject obj0, jclass cl1, jmethodID meth2, _Jv_va_list val3)
964   { p->CallNonvirtualVoidMethodV (this, obj0, cl1, meth2, val3); }
965
966   void CallNonvirtualVoidMethodA (jobject obj0, jclass cl1, jmethodID meth2, jvalue * val3)
967   { p->CallNonvirtualVoidMethodA (this, obj0, cl1, meth2, val3); }
968
969   jfieldID GetFieldID (jclass cl0, const char * val1, const char * val2)
970   { return p->GetFieldID (this, cl0, val1, val2); }
971
972   jobject GetObjectField (jobject obj0, jfieldID fld1)
973   { return p->GetObjectField (this, obj0, fld1); }
974
975   jboolean GetBooleanField (jobject obj0, jfieldID fld1)
976   { return p->GetBooleanField (this, obj0, fld1); }
977
978   jbyte GetByteField (jobject obj0, jfieldID fld1)
979   { return p->GetByteField (this, obj0, fld1); }
980
981   jchar GetCharField (jobject obj0, jfieldID fld1)
982   { return p->GetCharField (this, obj0, fld1); }
983
984   jshort GetShortField (jobject obj0, jfieldID fld1)
985   { return p->GetShortField (this, obj0, fld1); }
986
987   jint GetIntField (jobject obj0, jfieldID fld1)
988   { return p->GetIntField (this, obj0, fld1); }
989
990   jlong GetLongField (jobject obj0, jfieldID fld1)
991   { return p->GetLongField (this, obj0, fld1); }
992
993   jfloat GetFloatField (jobject obj0, jfieldID fld1)
994   { return p->GetFloatField (this, obj0, fld1); }
995
996   jdouble GetDoubleField (jobject obj0, jfieldID fld1)
997   { return p->GetDoubleField (this, obj0, fld1); }
998
999   void SetObjectField (jobject obj0, jfieldID fld1, jobject obj2)
1000   { p->SetObjectField (this, obj0, fld1, obj2); }
1001
1002   void SetBooleanField (jobject obj0, jfieldID fld1, jboolean val2)
1003   { p->SetBooleanField (this, obj0, fld1, val2); }
1004
1005   void SetByteField (jobject obj0, jfieldID fld1, jbyte val2)
1006   { p->SetByteField (this, obj0, fld1, val2); }
1007
1008   void SetCharField (jobject obj0, jfieldID fld1, jchar val2)
1009   { p->SetCharField (this, obj0, fld1, val2); }
1010
1011   void SetShortField (jobject obj0, jfieldID fld1, jshort val2)
1012   { p->SetShortField (this, obj0, fld1, val2); }
1013
1014   void SetIntField (jobject obj0, jfieldID fld1, jint val2)
1015   { p->SetIntField (this, obj0, fld1, val2); }
1016
1017   void SetLongField (jobject obj0, jfieldID fld1, jlong val2)
1018   { p->SetLongField (this, obj0, fld1, val2); }
1019
1020   void SetFloatField (jobject obj0, jfieldID fld1, jfloat val2)
1021   { p->SetFloatField (this, obj0, fld1, val2); }
1022
1023   void SetDoubleField (jobject obj0, jfieldID fld1, jdouble val2)
1024   { p->SetDoubleField (this, obj0, fld1, val2); }
1025
1026   jmethodID GetStaticMethodID (jclass cl0, const char * val1, const char * val2)
1027   { return p->GetStaticMethodID (this, cl0, val1, val2); }
1028
1029   jobject CallStaticObjectMethod (jclass cl0, jmethodID meth1, ...)
1030   {
1031     _Jv_va_list args;
1032     va_start (args, meth1);
1033     jobject result = p->CallStaticObjectMethodV (this, cl0, meth1, args);
1034     va_end (args);
1035     return result;
1036   }
1037
1038   jobject CallStaticObjectMethodV (jclass cl0, jmethodID meth1, _Jv_va_list val2)
1039   { return p->CallStaticObjectMethodV (this, cl0, meth1, val2); }
1040
1041   jobject CallStaticObjectMethodA (jclass cl0, jmethodID meth1, jvalue * val2)
1042   { return p->CallStaticObjectMethodA (this, cl0, meth1, val2); }
1043
1044   jboolean CallStaticBooleanMethod (jclass cl0, jmethodID meth1, ...)
1045   {
1046     _Jv_va_list args;
1047     va_start (args, meth1);
1048     jboolean result = p->CallStaticBooleanMethodV (this, cl0, meth1, args);
1049     va_end (args);
1050     return result;
1051   }
1052
1053   jboolean CallStaticBooleanMethodV (jclass cl0, jmethodID meth1, _Jv_va_list val2)
1054   { return p->CallStaticBooleanMethodV (this, cl0, meth1, val2); }
1055
1056   jboolean CallStaticBooleanMethodA (jclass cl0, jmethodID meth1, jvalue * val2)
1057   { return p->CallStaticBooleanMethodA (this, cl0, meth1, val2); }
1058
1059   jbyte CallStaticByteMethod (jclass cl0, jmethodID meth1, ...)
1060   {
1061     _Jv_va_list args;
1062     va_start (args, meth1);
1063     jbyte result = p->CallStaticByteMethodV (this, cl0, meth1, args);
1064     va_end (args);
1065     return result;
1066   }
1067
1068   jbyte CallStaticByteMethodV (jclass cl0, jmethodID meth1, _Jv_va_list val2)
1069   { return p->CallStaticByteMethodV (this, cl0, meth1, val2); }
1070
1071   jbyte CallStaticByteMethodA (jclass cl0, jmethodID meth1, jvalue * val2)
1072   { return p->CallStaticByteMethodA (this, cl0, meth1, val2); }
1073
1074   jchar CallStaticCharMethod (jclass cl0, jmethodID meth1, ...)
1075   {
1076     _Jv_va_list args;
1077     va_start (args, meth1);
1078     jchar result = p->CallStaticCharMethodV (this, cl0, meth1, args);
1079     va_end (args);
1080     return result;
1081   }
1082
1083   jchar CallStaticCharMethodV (jclass cl0, jmethodID meth1, _Jv_va_list val2)
1084   { return p->CallStaticCharMethodV (this, cl0, meth1, val2); }
1085
1086   jchar CallStaticCharMethodA (jclass cl0, jmethodID meth1, jvalue * val2)
1087   { return p->CallStaticCharMethodA (this, cl0, meth1, val2); }
1088
1089   jshort CallStaticShortMethod (jclass cl0, jmethodID meth1, ...)
1090   {
1091     _Jv_va_list args;
1092     va_start (args, meth1);
1093     jshort result = p->CallStaticShortMethodV (this, cl0, meth1, args);
1094     va_end (args);
1095     return result;
1096   }
1097
1098   jshort CallStaticShortMethodV (jclass cl0, jmethodID meth1, _Jv_va_list val2)
1099   { return p->CallStaticShortMethodV (this, cl0, meth1, val2); }
1100
1101   jshort CallStaticShortMethodA (jclass cl0, jmethodID meth1, jvalue * val2)
1102   { return p->CallStaticShortMethodA (this, cl0, meth1, val2); }
1103
1104   jint CallStaticIntMethod (jclass cl0, jmethodID meth1, ...)
1105   {
1106     _Jv_va_list args;
1107     va_start (args, meth1);
1108     jint result = p->CallStaticIntMethodV (this, cl0, meth1, args);
1109     va_end (args);
1110     return result;
1111   }
1112
1113   jint CallStaticIntMethodV (jclass cl0, jmethodID meth1, _Jv_va_list val2)
1114   { return p->CallStaticIntMethodV (this, cl0, meth1, val2); }
1115
1116   jint CallStaticIntMethodA (jclass cl0, jmethodID meth1, jvalue * val2)
1117   { return p->CallStaticIntMethodA (this, cl0, meth1, val2); }
1118
1119   jlong CallStaticLongMethod (jclass cl0, jmethodID meth1, ...)
1120   {
1121     _Jv_va_list args;
1122     va_start (args, meth1);
1123     jlong result = p->CallStaticLongMethodV (this, cl0, meth1, args);
1124     va_end (args);
1125     return result;
1126   }
1127
1128   jlong CallStaticLongMethodV (jclass cl0, jmethodID meth1, _Jv_va_list val2)
1129   { return p->CallStaticLongMethodV (this, cl0, meth1, val2); }
1130
1131   jlong CallStaticLongMethodA (jclass cl0, jmethodID meth1, jvalue * val2)
1132   { return p->CallStaticLongMethodA (this, cl0, meth1, val2); }
1133
1134   jfloat CallStaticFloatMethod (jclass cl0, jmethodID meth1, ...)
1135   {
1136     _Jv_va_list args;
1137     va_start (args, meth1);
1138     jfloat result = p->CallStaticFloatMethodV (this, cl0, meth1, args);
1139     va_end (args);
1140     return result;
1141   }
1142
1143   jfloat CallStaticFloatMethodV (jclass cl0, jmethodID meth1, _Jv_va_list val2)
1144   { return p->CallStaticFloatMethodV (this, cl0, meth1, val2); }
1145
1146   jfloat CallStaticFloatMethodA (jclass cl0, jmethodID meth1, jvalue * val2)
1147   { return p->CallStaticFloatMethodA (this, cl0, meth1, val2); }
1148
1149   jdouble CallStaticDoubleMethod (jclass cl0, jmethodID meth1, ...)
1150   {
1151     _Jv_va_list args;
1152     va_start (args, meth1);
1153     jdouble result = p->CallStaticDoubleMethodV (this, cl0, meth1, args);
1154     va_end (args);
1155     return result;
1156   }
1157
1158   jdouble CallStaticDoubleMethodV (jclass cl0, jmethodID meth1, _Jv_va_list val2)
1159   { return p->CallStaticDoubleMethodV (this, cl0, meth1, val2); }
1160
1161   jdouble CallStaticDoubleMethodA (jclass cl0, jmethodID meth1, jvalue * val2)
1162   { return p->CallStaticDoubleMethodA (this, cl0, meth1, val2); }
1163
1164   void CallStaticVoidMethod (jclass cl0, jmethodID meth1, ...)
1165   {
1166     _Jv_va_list args;
1167     va_start (args, meth1);
1168     p->CallStaticVoidMethodV (this, cl0, meth1, args);
1169     va_end (args);
1170   }
1171
1172   void CallStaticVoidMethodV (jclass cl0, jmethodID meth1, _Jv_va_list val2)
1173   { p->CallStaticVoidMethodV (this, cl0, meth1, val2); }
1174
1175   void CallStaticVoidMethodA (jclass cl0, jmethodID meth1, jvalue * val2)
1176   { p->CallStaticVoidMethodA (this, cl0, meth1, val2); }
1177
1178   jfieldID GetStaticFieldID (jclass cl0, const char * val1, const char * val2)
1179   { return p->GetStaticFieldID (this, cl0, val1, val2); }
1180
1181   jobject GetStaticObjectField (jclass cl0, jfieldID fld1)
1182   { return p->GetStaticObjectField (this, cl0, fld1); }
1183
1184   jboolean GetStaticBooleanField (jclass cl0, jfieldID fld1)
1185   { return p->GetStaticBooleanField (this, cl0, fld1); }
1186
1187   jbyte GetStaticByteField (jclass cl0, jfieldID fld1)
1188   { return p->GetStaticByteField (this, cl0, fld1); }
1189
1190   jchar GetStaticCharField (jclass cl0, jfieldID fld1)
1191   { return p->GetStaticCharField (this, cl0, fld1); }
1192
1193   jshort GetStaticShortField (jclass cl0, jfieldID fld1)
1194   { return p->GetStaticShortField (this, cl0, fld1); }
1195
1196   jint GetStaticIntField (jclass cl0, jfieldID fld1)
1197   { return p->GetStaticIntField (this, cl0, fld1); }
1198
1199   jlong GetStaticLongField (jclass cl0, jfieldID fld1)
1200   { return p->GetStaticLongField (this, cl0, fld1); }
1201
1202   jfloat GetStaticFloatField (jclass cl0, jfieldID fld1)
1203   { return p->GetStaticFloatField (this, cl0, fld1); }
1204
1205   jdouble GetStaticDoubleField (jclass cl0, jfieldID fld1)
1206   { return p->GetStaticDoubleField (this, cl0, fld1); }
1207
1208   void SetStaticObjectField (jclass cl0, jfieldID fld1, jobject obj2)
1209   { p->SetStaticObjectField (this, cl0, fld1, obj2); }
1210
1211   void SetStaticBooleanField (jclass cl0, jfieldID fld1, jboolean val2)
1212   { p->SetStaticBooleanField (this, cl0, fld1, val2); }
1213
1214   void SetStaticByteField (jclass cl0, jfieldID fld1, jbyte val2)
1215   { p->SetStaticByteField (this, cl0, fld1, val2); }
1216
1217   void SetStaticCharField (jclass cl0, jfieldID fld1, jchar val2)
1218   { p->SetStaticCharField (this, cl0, fld1, val2); }
1219
1220   void SetStaticShortField (jclass cl0, jfieldID fld1, jshort val2)
1221   { p->SetStaticShortField (this, cl0, fld1, val2); }
1222
1223   void SetStaticIntField (jclass cl0, jfieldID fld1, jint val2)
1224   { p->SetStaticIntField (this, cl0, fld1, val2); }
1225
1226   void SetStaticLongField (jclass cl0, jfieldID fld1, jlong val2)
1227   { p->SetStaticLongField (this, cl0, fld1, val2); }
1228
1229   void SetStaticFloatField (jclass cl0, jfieldID fld1, jfloat val2)
1230   { p->SetStaticFloatField (this, cl0, fld1, val2); }
1231
1232   void SetStaticDoubleField (jclass cl0, jfieldID fld1, jdouble val2)
1233   { p->SetStaticDoubleField (this, cl0, fld1, val2); }
1234
1235   jstring NewString (const jchar * val0, jsize val1)
1236   { return p->NewString (this, val0, val1); }
1237
1238   jint GetStringLength (jstring val0)
1239   { return p->GetStringLength (this, val0); }
1240
1241   const jchar * GetStringChars (jstring val0, jboolean * val1)
1242   { return p->GetStringChars (this, val0, val1); }
1243
1244   void ReleaseStringChars (jstring val0, const jchar * val1)
1245   { p->ReleaseStringChars (this, val0, val1); }
1246
1247   jstring NewStringUTF (const char * val0)
1248   { return p->NewStringUTF (this, val0); }
1249
1250   jsize GetStringUTFLength (jstring val0)
1251   { return p->GetStringUTFLength (this, val0); }
1252
1253   const char * GetStringUTFChars (jstring val0, jboolean * val1)
1254   { return p->GetStringUTFChars (this, val0, val1); }
1255
1256   void ReleaseStringUTFChars (jstring val0, const char * val1)
1257   { p->ReleaseStringUTFChars (this, val0, val1); }
1258
1259   jsize GetArrayLength (jarray val0)
1260   { return p->GetArrayLength (this, val0); }
1261
1262   jarray NewObjectArray (jsize val0, jclass cl1, jobject obj2)
1263   { return p->NewObjectArray (this, val0, cl1, obj2); }
1264
1265   jobject GetObjectArrayElement (jobjectArray val0, jsize val1)
1266   { return p->GetObjectArrayElement (this, val0, val1); }
1267
1268   void SetObjectArrayElement (jobjectArray val0, jsize val1, jobject obj2)
1269   { p->SetObjectArrayElement (this, val0, val1, obj2); }
1270
1271   jbooleanArray NewBooleanArray (jsize val0)
1272   { return p->NewBooleanArray (this, val0); }
1273
1274   jbyteArray NewByteArray (jsize val0)
1275   { return p->NewByteArray (this, val0); }
1276
1277   jcharArray NewCharArray (jsize val0)
1278   { return p->NewCharArray (this, val0); }
1279
1280   jshortArray NewShortArray (jsize val0)
1281   { return p->NewShortArray (this, val0); }
1282
1283   jintArray NewIntArray (jsize val0)
1284   { return p->NewIntArray (this, val0); }
1285
1286   jlongArray NewLongArray (jsize val0)
1287   { return p->NewLongArray (this, val0); }
1288
1289   jfloatArray NewFloatArray (jsize val0)
1290   { return p->NewFloatArray (this, val0); }
1291
1292   jdoubleArray NewDoubleArray (jsize val0)
1293   { return p->NewDoubleArray (this, val0); }
1294
1295   jboolean * GetBooleanArrayElements (jbooleanArray val0, jboolean * val1)
1296   { return p->GetBooleanArrayElements (this, val0, val1); }
1297
1298   jbyte * GetByteArrayElements (jbyteArray val0, jboolean * val1)
1299   { return p->GetByteArrayElements (this, val0, val1); }
1300
1301   jchar * GetCharArrayElements (jcharArray val0, jboolean * val1)
1302   { return p->GetCharArrayElements (this, val0, val1); }
1303
1304   jshort * GetShortArrayElements (jshortArray val0, jboolean * val1)
1305   { return p->GetShortArrayElements (this, val0, val1); }
1306
1307   jint * GetIntArrayElements (jintArray val0, jboolean * val1)
1308   { return p->GetIntArrayElements (this, val0, val1); }
1309
1310   jlong * GetLongArrayElements (jlongArray val0, jboolean * val1)
1311   { return p->GetLongArrayElements (this, val0, val1); }
1312
1313   jfloat * GetFloatArrayElements (jfloatArray val0, jboolean * val1)
1314   { return p->GetFloatArrayElements (this, val0, val1); }
1315
1316   jdouble * GetDoubleArrayElements (jdoubleArray val0, jboolean * val1)
1317   { return p->GetDoubleArrayElements (this, val0, val1); }
1318
1319   void ReleaseBooleanArrayElements (jbooleanArray val0, jboolean * val1, jint val2)
1320   { p->ReleaseBooleanArrayElements (this, val0, val1, val2); }
1321
1322   void ReleaseByteArrayElements (jbyteArray val0, jbyte * val1, jint val2)
1323   { p->ReleaseByteArrayElements (this, val0, val1, val2); }
1324
1325   void ReleaseCharArrayElements (jcharArray val0, jchar * val1, jint val2)
1326   { p->ReleaseCharArrayElements (this, val0, val1, val2); }
1327
1328   void ReleaseShortArrayElements (jshortArray val0, jshort * val1, jint val2)
1329   { p->ReleaseShortArrayElements (this, val0, val1, val2); }
1330
1331   void ReleaseIntArrayElements (jintArray val0, jint * val1, jint val2)
1332   { p->ReleaseIntArrayElements (this, val0, val1, val2); }
1333
1334   void ReleaseLongArrayElements (jlongArray val0, jlong * val1, jint val2)
1335   { p->ReleaseLongArrayElements (this, val0, val1, val2); }
1336
1337   void ReleaseFloatArrayElements (jfloatArray val0, jfloat * val1, jint val2)
1338   { p->ReleaseFloatArrayElements (this, val0, val1, val2); }
1339
1340   void ReleaseDoubleArrayElements (jdoubleArray val0, jdouble * val1, jint val2)
1341   { p->ReleaseDoubleArrayElements (this, val0, val1, val2); }
1342
1343   void GetBooleanArrayRegion (jbooleanArray val0, jsize val1, jsize val2, jboolean * val3)
1344   { p->GetBooleanArrayRegion (this, val0, val1, val2, val3); }
1345
1346   void GetByteArrayRegion (jbooleanArray val0, jsize val1, jsize val2, jboolean * val3)
1347   { p->GetByteArrayRegion (this, val0, val1, val2, val3); }
1348
1349   void GetCharArrayRegion (jbooleanArray val0, jsize val1, jsize val2, jboolean * val3)
1350   { p->GetCharArrayRegion (this, val0, val1, val2, val3); }
1351
1352   void GetShortArrayRegion (jbooleanArray val0, jsize val1, jsize val2, jboolean * val3)
1353   { p->GetShortArrayRegion (this, val0, val1, val2, val3); }
1354
1355   void GetIntArrayRegion (jbooleanArray val0, jsize val1, jsize val2, jboolean * val3)
1356   { p->GetIntArrayRegion (this, val0, val1, val2, val3); }
1357
1358   void GetLongArrayRegion (jbooleanArray val0, jsize val1, jsize val2, jboolean * val3)
1359   { p->GetLongArrayRegion (this, val0, val1, val2, val3); }
1360
1361   void GetFloatArrayRegion (jbooleanArray val0, jsize val1, jsize val2, jboolean * val3)
1362   { p->GetFloatArrayRegion (this, val0, val1, val2, val3); }
1363
1364   void GetDoubleArrayRegion (jbooleanArray val0, jsize val1, jsize val2, jboolean * val3)
1365   { p->GetDoubleArrayRegion (this, val0, val1, val2, val3); }
1366
1367   void SetBooleanArrayRegion (jbooleanArray val0, jsize val1, jsize val2, jboolean * val3)
1368   { p->SetBooleanArrayRegion (this, val0, val1, val2, val3); }
1369
1370   void SetByteArrayRegion (jbooleanArray val0, jsize val1, jsize val2, jboolean * val3)
1371   { p->SetByteArrayRegion (this, val0, val1, val2, val3); }
1372
1373   void SetCharArrayRegion (jbooleanArray val0, jsize val1, jsize val2, jboolean * val3)
1374   { p->SetCharArrayRegion (this, val0, val1, val2, val3); }
1375
1376   void SetShortArrayRegion (jbooleanArray val0, jsize val1, jsize val2, jboolean * val3)
1377   { p->SetShortArrayRegion (this, val0, val1, val2, val3); }
1378
1379   void SetIntArrayRegion (jbooleanArray val0, jsize val1, jsize val2, jboolean * val3)
1380   { p->SetIntArrayRegion (this, val0, val1, val2, val3); }
1381
1382   void SetLongArrayRegion (jbooleanArray val0, jsize val1, jsize val2, jboolean * val3)
1383   { p->SetLongArrayRegion (this, val0, val1, val2, val3); }
1384
1385   void SetFloatArrayRegion (jbooleanArray val0, jsize val1, jsize val2, jboolean * val3)
1386   { p->SetFloatArrayRegion (this, val0, val1, val2, val3); }
1387
1388   void SetDoubleArrayRegion (jbooleanArray val0, jsize val1, jsize val2, jboolean * val3)
1389   { p->SetDoubleArrayRegion (this, val0, val1, val2, val3); }
1390
1391   jint RegisterNatives (jclass cl0, const JNINativeMethod * val1, jint val2)
1392   { return p->RegisterNatives (this, cl0, val1, val2); }
1393
1394   jint UnregisterNatives (jclass cl0)
1395   { return p->UnregisterNatives (this, cl0); }
1396
1397   jint MonitorEnter (jobject obj0)
1398   { return p->MonitorEnter (this, obj0); }
1399
1400   jint MonitorExit (jobject obj0)
1401   { return p->MonitorExit (this, obj0); }
1402
1403   jint GetJavaVM (JavaVM ** val0)
1404   { return p->GetJavaVM (this, val0); }
1405
1406   void GetStringRegion (jstring val0, jsize val1, jsize val2, jchar * val3)
1407   { p->GetStringRegion (this, val0, val1, val2, val3); }
1408
1409   void GetStringUTFRegion (jstring val0, jsize val1, jsize val2, char * val3)
1410   { p->GetStringUTFRegion (this, val0, val1, val2, val3); }
1411
1412   void * GetPrimitiveArrayCritical (jarray val0, jboolean * val1)
1413   { return p->GetPrimitiveArrayCritical (this, val0, val1); }
1414
1415   void ReleasePrimitiveArrayCritical (jarray val0, void * val1, jint val2)
1416   { p->ReleasePrimitiveArrayCritical (this, val0, val1, val2); }
1417
1418   const jchar * GetStringCritical (jstring val0, jboolean * val1)
1419   { return p->GetStringCritical (this, val0, val1); }
1420
1421   void ReleaseStringCritical (jstring val0, const jchar * val1)
1422   { p->ReleaseStringCritical (this, val0, val1); }
1423
1424   jweak NewWeakGlobalRef (jobject obj0)
1425   { return p->NewWeakGlobalRef (this, obj0); }
1426
1427   void DeleteWeakGlobalRef (jweak val0)
1428   { p->DeleteWeakGlobalRef (this, val0); }
1429
1430   jboolean ExceptionCheck ()
1431   { return p->ExceptionCheck (this); }
1432 };
1433 #endif /* __cplusplus */
1434
1435 /*
1436  * Invocation API.
1437  */
1438
1439 struct JNIInvokeInterface
1440 {
1441   _Jv_func reserved0;
1442   _Jv_func reserved1;
1443   _Jv_func reserved2;
1444
1445   jint (*DestroyJavaVM)         (JavaVM *);
1446   jint (*AttachCurrentThread)   (JavaVM *, void **, void *);
1447   jint (*DetachCurrentThread)   (JavaVM *);
1448   jint (*GetEnv)                (JavaVM *, void **, jint);
1449 };
1450
1451 #ifdef __cplusplus
1452
1453 class _Jv_JavaVM
1454 {
1455 public:
1456   const struct JNIInvokeInterface *functions;
1457
1458 private:
1459   /* FIXME: other fields.  */
1460
1461 public:
1462   jint DestroyJavaVM ()
1463   { return functions->DestroyJavaVM (this); }
1464
1465   jint AttachCurrentThread (void **penv, void *args)
1466   { return functions->AttachCurrentThread (this, penv, args); }
1467
1468   jint DetachCurrentThread ()
1469   { return functions->DetachCurrentThread (this); }
1470
1471   jint GetEnv (void **penv, jint version)
1472   { return functions->GetEnv (this, penv, version); }
1473 };
1474 #endif /* __cplusplus */
1475
1476 typedef struct JavaVMAttachArgs
1477 {
1478   jint version;                 /* Must be JNI_VERSION_1_2.  */
1479   char *name;                   /* The name of the thread (or NULL).  */
1480   jobject group;                /* Global ref of a ThreadGroup object
1481                                    (or NULL).  */
1482 } JavaVMAttachArgs;
1483
1484 typedef struct JavaVMOption
1485 {
1486   char *optionString;
1487   void *extraInfo;
1488 } JavaVMOption;
1489
1490 typedef struct JavaVMInitArgs
1491 {
1492   /* Must be JNI_VERSION_1_2.  */
1493   jint version;
1494
1495   /* Number of options.  */
1496   jint nOptions;
1497
1498   /* Options to the VM.  */
1499   JavaVMOption *options;
1500
1501   /* Whether we should ignore unrecognized options.  */
1502   jboolean ignoreUnrecognized;
1503 } JavaVMInitArgs;
1504
1505 #endif /* __GCJ_JNI_H__ */