OSDN Git Service

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