-/* jni.h - JNI types and data structures
+/* native/jni.h - JNI types and data structures
- Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
- R. Grafl, A. Krall, C. Kruegel, C. Oates, R. Obermaisser,
- M. Probst, S. Ring, E. Steiner, C. Thalinger, D. Thuernbeck,
- P. Tomsich, J. Wenninger
+ Copyright (C) 1996-2005, 2006 R. Grafl, A. Krall, C. Kruegel,
+ C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
+ E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
+ J. Wenninger, Institut f. Computersprachen - TU Wien
This file is part of CACAO.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- 02111-1307, USA.
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA.
- Contact: cacao@complang.tuwien.ac.at
+ Contact: cacao@cacaojvm.org
- Authors: ?
+ Authors: Reinhard Grafl
+ Roman Obermaisser
- $Id: jni.h 747 2003-12-13 22:10:17Z twisti $
+ Changes: Christian Thalinger
+
+ $Id: jni.h 4565 2006-03-07 09:40:37Z twisti $
*/
#ifndef _JNI_H
#define _JNI_H
-#include <stdarg.h>
-#include "global.h"
-#include "types.h"
-
-
-#define JNI_VERSION 0x00010002
-
-#define JNIEXPORT
-#define JNICALL
-
-
-/* JNI datatypes */
-
-#define jobject java_objectheader*
-#define jclass struct classinfo*
-#define jthrowable jobject
-#define jweak jobject
-#define jarray java_arrayheader*
-#define jlongArray java_longarray*
-#define jbooleanArray java_booleanarray*
-#define jintArray java_intarray*
-#define jcharArray java_chararray*
-#define jbyteArray java_bytearray*
-#define jshortArray java_shortarray*
-#define jdoubleArray java_doublearray*
-#define jfloatArray java_floatarray*
-#define jobjectArray java_objectarray*
-#define jstring jobject
-#define jint s4
-#define jchar s2
-#define jboolean u1
-#define jbyte s1
-#define jshort s2
-#define jlong s8
-#define jfloat float
-#define jdouble double
-#define jsize jint
-#define jfieldID fieldinfo*
-#define jmethodID methodinfo*
-
-
-typedef struct _JavaVM* JavaVM;
-
-struct _JavaVM{
- void *(*reserved0) ();
- void *(*reserved1) ();
- void *(*reserved2) ();
- jint (*DestroyJavaVM) (JavaVM *);
- jint (*AttachCurrentThread) (JavaVM *, void **, void *);
- jint (*DetachCurrentThread) (JavaVM *);
- jint (*GetEnv) (JavaVM *, void **, jint);
- jint (*AttachCurrentThreadAsDaemon) (JavaVM *, void **, void *);
-
-};
-
-
-typedef union jvalue {
- jboolean z;
- jbyte b;
- jchar c;
- jshort s;
- jint i;
- jlong j;
- jfloat f;
- jdouble d;
- jobject l;
-} jvalue;
-
-/* JNI-Boolean */
-
-#define JNI_FALSE 0
-#define JNI_TRUE 1
-
-/* native method name, signature and function pointer for use in RegisterNatives */
-
-typedef struct {
- char *name;
- char *signature;
- void *fnPtr;
-} JNINativeMethod;
-
-
-/*
- JNI function table, contains functions for the following usages:
-
- Version Information
- Class Operations
- Exceptions
- Global and Local References
- Object Operations
- Accessing Fields of Objects
- Calling Instance Methods
- Accessing Static Fields
- Calling Static Methods
- String Operations
- Array Operations
- Registering Native Methods
- Monitor Operations
- Java VM Interface
-*/
-
-typedef struct JNI_Table *JNIEnv;
-
-struct JNI_Table {
-
- /* reserverd for future JNI-functions */
- void *unused0;
- void *unused1;
- void *unused2;
- void *unused3;
-
- /* version information */
-
- jint (*GetVersion) (JNIEnv*);
-
- /* class operations */
-
- jclass (*DefineClass) (JNIEnv*, const char *name, jobject loader, const jbyte *buf, jsize len);
- jclass (*FindClass) (JNIEnv*, const char *name);
+#include "config.h"
+#include "vm/types.h"
- jmethodID (*FromReflectedMethod) (JNIEnv*, jobject method);
- jfieldID (*FromReflectedField) (JNIEnv*, jobject field);
+#include "vm/global.h"
+#include "vm/method.h"
- jobject (*ToReflectedMethod) (JNIEnv*, jclass cls, jmethodID methodID, jboolean isStatic);
- jclass (*GetSuperclass) (JNIEnv*, jclass sub);
- jboolean (*IsAssignableForm) (JNIEnv*, jclass sub, jclass sup);
+/* Include the JNI header from GNU Classpath **********************************/
- jobject (*ToReflectedField) (JNIEnv*, jclass cls, jfieldID fieldID, jboolean isStatic);
+#include CLASSPATH_JNI_H
- /* exceptions */
- jint (*Throw) (JNIEnv*, jthrowable obj);
- jint (*ThrowNew) (JNIEnv*, jclass clazz, const char *msg);
- jthrowable (*ExceptionOccurred) (JNIEnv*);
- void (*ExceptionDescribe) (JNIEnv*);
- void (*ExceptionClear) (JNIEnv*);
- void (*FatalError) (JNIEnv*, const char *msg);
+/* _Jv_JNIEnv *****************************************************************/
- /* global and local references */
+typedef struct _Jv_JNIEnv _Jv_JNIEnv;
- jint (*PushLocalFrame) (JNIEnv*, jint capacity);
- jobject (*PopLocalFrame) (JNIEnv*, jobject result);
-
- jobject (*NewGlobalRef) (JNIEnv*, jobject lobj);
- void (*DeleteGlobalRef) (JNIEnv*, jobject gref);
- void (*DeleteLocalRef) (JNIEnv*, jobject obj);
- jboolean (*IsSameObject) (JNIEnv*, jobject obj1, jobject obj2);
- jobject (*NewLocalRef) (JNIEnv*, jobject ref);
- jint (*EnsureLocalCapacity) (JNIEnv*, jint capacity);
-
- /* object operations */
-
- jobject (*AllocObject) (JNIEnv*, jclass clazz);
- jobject (*NewObject) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
- jobject (*NewObjectV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
- jobject (*NewObjectA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
-
- jclass (*GetObjectClass) (JNIEnv*, jobject obj);
- jboolean (*IsInstanceOf) (JNIEnv*, jobject obj, jclass clazz);
+struct _Jv_JNIEnv {
+ const struct JNINativeInterface *env; /* This MUST be the first entry */
+};
- jmethodID (*GetMethodID) (JNIEnv*, jclass clazz, const char *name, const char *sig);
- /* calling instance methods */
+/* _Jv_JavaVM *****************************************************************/
- jobject (*CallObjectMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
- jobject (*CallObjectMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
- jobject (*CallObjectMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue * args);
+typedef struct _Jv_JavaVM _Jv_JavaVM;
- jboolean (*CallBooleanMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
- jboolean (*CallBooleanMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
- jboolean (*CallBooleanMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue * args);
+struct _Jv_JavaVM {
+ const struct JNIInvokeInterface *functions;/* This MUST be the first entry*/
+};
- jbyte (*CallByteMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
- jbyte (*CallByteMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
- jbyte (*CallByteMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
- jchar (*CallCharMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
- jchar (*CallCharMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
- jchar (*CallCharMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
+/* CACAO related stuff ********************************************************/
- jshort (*CallShortMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
- jshort (*CallShortMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
- jshort (*CallShortMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
+extern const struct JNIInvokeInterface _Jv_JNIInvokeInterface;
+extern struct JNINativeInterface _Jv_JNINativeInterface;
- jint (*CallIntMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
- jint (*CallIntMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
- jint (*CallIntMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
- jlong (*CallLongMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
- jlong (*CallLongMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
- jlong (*CallLongMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
+/* local reference table ******************************************************/
- jfloat (*CallFloatMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
- jfloat (*CallFloatMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
- jfloat (*CallFloatMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
+#define LOCALREFTABLE_CAPACITY 16
- jdouble (*CallDoubleMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
- jdouble (*CallDoubleMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
- jdouble (*CallDoubleMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
+typedef struct localref_table localref_table;
- void (*CallVoidMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
- void (*CallVoidMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
- void (*CallVoidMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue * args);
-
- jobject (*CallNonvirtualObjectMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
- jobject (*CallNonvirtualObjectMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
- jobject (*CallNonvirtualObjectMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue * args);
+/* localref_table **************************************************************
- jboolean (*CallNonvirtualBooleanMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
- jboolean (*CallNonvirtualBooleanMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
- jboolean (*CallNonvirtualBooleanMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue * args);
+ ATTENTION: keep this structure a multiple of 8-bytes!!! This is
+ essential for the native stub on 64-bit architectures.
- jbyte (*CallNonvirtualByteMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
- jbyte (*CallNonvirtualByteMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
- jbyte (*CallNonvirtualByteMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
+*******************************************************************************/
- jchar (*CallNonvirtualCharMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
- jchar (*CallNonvirtualCharMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
- jchar (*CallNonvirtualCharMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
-
- jshort (*CallNonvirtualShortMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
- jshort (*CallNonvirtualShortMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
- jshort (*CallNonvirtualShortMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
-
- jint (*CallNonvirtualIntMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
- jint (*CallNonvirtualIntMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
- jint (*CallNonvirtualIntMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
-
- jlong (*CallNonvirtualLongMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
- jlong (*CallNonvirtualLongMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
- jlong (*CallNonvirtualLongMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
-
- jfloat (*CallNonvirtualFloatMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
- jfloat (*CallNonvirtualFloatMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
- jfloat (*CallNonvirtualFloatMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
-
- jdouble (*CallNonvirtualDoubleMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
- jdouble (*CallNonvirtualDoubleMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
- jdouble (*CallNonvirtualDoubleMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
-
- void (*CallNonvirtualVoidMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
- void (*CallNonvirtualVoidMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
- void (*CallNonvirtualVoidMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue * args);
-
- /* accessing fields */
-
- jfieldID (*GetFieldID) (JNIEnv*, jclass clazz, const char *name, const char *sig);
-
- jobject (*GetObjectField) (JNIEnv*, jobject obj, jfieldID fieldID);
- jboolean (*GetBooleanField) (JNIEnv*, jobject obj, jfieldID fieldID);
- jbyte (*GetByteField) (JNIEnv*, jobject obj, jfieldID fieldID);
- jchar (*GetCharField) (JNIEnv*, jobject obj, jfieldID fieldID);
- jshort (*GetShortField) (JNIEnv*, jobject obj, jfieldID fieldID);
- jint (*GetIntField) (JNIEnv*, jobject obj, jfieldID fieldID);
- jlong (*GetLongField) (JNIEnv*, jobject obj, jfieldID fieldID);
- jfloat (*GetFloatField) (JNIEnv*, jobject obj, jfieldID fieldID);
- jdouble (*GetDoubleField) (JNIEnv*, jobject obj, jfieldID fieldID);
-
- void (*SetObjectField) (JNIEnv*, jobject obj, jfieldID fieldID, jobject val);
- void (*SetBooleanField) (JNIEnv*, jobject obj, jfieldID fieldID, jboolean val);
- void (*SetByteField) (JNIEnv*, jobject obj, jfieldID fieldID, jbyte val);
- void (*SetCharField) (JNIEnv*, jobject obj, jfieldID fieldID, jchar val);
- void (*SetShortField) (JNIEnv*, jobject obj, jfieldID fieldID, jshort val);
- void (*SetIntField) (JNIEnv*, jobject obj, jfieldID fieldID, jint val);
- void (*SetLongField) (JNIEnv*, jobject obj, jfieldID fieldID, jlong val);
- void (*SetFloatField) (JNIEnv*, jobject obj, jfieldID fieldID, jfloat val);
- void (*SetDoubleField) (JNIEnv*, jobject obj, jfieldID fieldID, jdouble val);
-
- /* calling static methods */
-
- jmethodID (*GetStaticMethodID) (JNIEnv*, jclass clazz, const char *name, const char *sig);
-
- jobject (*CallStaticObjectMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
- jobject (*CallStaticObjectMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
- jobject (*CallStaticObjectMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
-
- jboolean (*CallStaticBooleanMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
- jboolean (*CallStaticBooleanMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
- jboolean (*CallStaticBooleanMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
-
- jbyte (*CallStaticByteMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
- jbyte (*CallStaticByteMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
- jbyte (*CallStaticByteMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
-
- jchar (*CallStaticCharMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
- jchar (*CallStaticCharMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
- jchar (*CallStaticCharMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
-
- jshort (*CallStaticShortMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
- jshort (*CallStaticShortMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
- jshort (*CallStaticShortMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
-
- jint (*CallStaticIntMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
- jint (*CallStaticIntMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
- jint (*CallStaticIntMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
-
- jlong (*CallStaticLongMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
- jlong (*CallStaticLongMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
- jlong (*CallStaticLongMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
-
- jfloat (*CallStaticFloatMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
- jfloat (*CallStaticFloatMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
- jfloat (*CallStaticFloatMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
-
- jdouble (*CallStaticDoubleMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
- jdouble (*CallStaticDoubleMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
- jdouble (*CallStaticDoubleMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
-
- void (*CallStaticVoidMethod) (JNIEnv*, jclass cls, jmethodID methodID, ...);
- void (*CallStaticVoidMethodV) (JNIEnv*, jclass cls, jmethodID methodID, va_list args);
- void (*CallStaticVoidMethodA) (JNIEnv*, jclass cls, jmethodID methodID, jvalue * args);
-
- /* accessing static fields */
-
- jfieldID (*GetStaticFieldID) (JNIEnv*, jclass clazz, const char *name, const char *sig);
- jobject (*GetStaticObjectField) (JNIEnv*, jclass clazz, jfieldID fieldID);
- jboolean (*GetStaticBooleanField) (JNIEnv*, jclass clazz, jfieldID fieldID);
- jbyte (*GetStaticByteField) (JNIEnv*, jclass clazz, jfieldID fieldID);
- jchar (*GetStaticCharField) (JNIEnv*, jclass clazz, jfieldID fieldID);
- jshort (*GetStaticShortField) (JNIEnv*, jclass clazz, jfieldID fieldID);
- jint (*GetStaticIntField) (JNIEnv*, jclass clazz, jfieldID fieldID);
- jlong (*GetStaticLongField) (JNIEnv*, jclass clazz, jfieldID fieldID);
- jfloat (*GetStaticFloatField) (JNIEnv*, jclass clazz, jfieldID fieldID);
- jdouble (*GetStaticDoubleField) (JNIEnv*, jclass clazz, jfieldID fieldID);
-
- void (*SetStaticObjectField) (JNIEnv*, jclass clazz, jfieldID fieldID, jobject value);
- void (*SetStaticBooleanField) (JNIEnv*, jclass clazz, jfieldID fieldID, jboolean value);
- void (*SetStaticByteField) (JNIEnv*, jclass clazz, jfieldID fieldID, jbyte value);
- void (*SetStaticCharField) (JNIEnv*, jclass clazz, jfieldID fieldID, jchar value);
- void (*SetStaticShortField) (JNIEnv*, jclass clazz, jfieldID fieldID, jshort value);
- void (*SetStaticIntField) (JNIEnv*, jclass clazz, jfieldID fieldID, jint value);
- void (*SetStaticLongField) (JNIEnv*, jclass clazz, jfieldID fieldID, jlong value);
- void (*SetStaticFloatField) (JNIEnv*, jclass clazz, jfieldID fieldID, jfloat value);
- void (*SetStaticDoubleField) (JNIEnv*, jclass clazz, jfieldID fieldID, jdouble value);
-
- /* string operations */
-
- jstring (*NewString) (JNIEnv*, const jchar *unicode, jsize len);
- jsize (*GetStringLength) (JNIEnv*, jstring str);
- const jchar *(*GetStringChars) (JNIEnv*, jstring str, jboolean *isCopy);
- void (*ReleaseStringChars) (JNIEnv*, jstring str, const jchar *chars);
-
- jstring (*NewStringUTF) (JNIEnv*, const char *utf);
- jsize (*GetStringUTFLength) (JNIEnv*, jstring str);
- const char* (*GetStringUTFChars) (JNIEnv*, jstring str, jboolean *isCopy);
- void (*ReleaseStringUTFChars) (JNIEnv*, jstring str, const char* chars);
-
- /* array operations */
-
- jsize (*GetArrayLength) (JNIEnv*, jarray array);
-
- jobjectArray (*NewObjectArray) (JNIEnv*, jsize len, jclass clazz, jobject init);
- jobject (*GetObjectArrayElement) (JNIEnv*, jobjectArray array, jsize index);
- void (*SetObjectArrayElement) (JNIEnv*, jobjectArray array, jsize index, jobject val);
-
- jbooleanArray (*NewBooleanArray) (JNIEnv*, jsize len);
- jbyteArray (*NewByteArray) (JNIEnv*, jsize len);
- jcharArray (*NewCharArray) (JNIEnv*, jsize len);
- jshortArray (*NewShortArray) (JNIEnv*, jsize len);
- jintArray (*NewIntArray) (JNIEnv*, jsize len);
- jlongArray (*NewLongArray) (JNIEnv*, jsize len);
- jfloatArray (*NewFloatArray) (JNIEnv*, jsize len);
- jdoubleArray (*NewDoubleArray) (JNIEnv*, jsize len);
-
- jboolean * (*GetBooleanArrayElements) (JNIEnv*, jbooleanArray array, jboolean *isCopy);
- jbyte * (*GetByteArrayElements) (JNIEnv*, jbyteArray array, jboolean *isCopy);
- jchar * (*GetCharArrayElements) (JNIEnv*, jcharArray array, jboolean *isCopy);
- jshort * (*GetShortArrayElements) (JNIEnv*, jshortArray array, jboolean *isCopy);
- jint * (*GetIntArrayElements) (JNIEnv*, jintArray array, jboolean *isCopy);
- jlong * (*GetLongArrayElements) (JNIEnv*, jlongArray array, jboolean *isCopy);
- jfloat * (*GetFloatArrayElements) (JNIEnv*, jfloatArray array, jboolean *isCopy);
- jdouble * (*GetDoubleArrayElements) (JNIEnv*, jdoubleArray array, jboolean *isCopy);
-
- void (*ReleaseBooleanArrayElements) (JNIEnv*, jbooleanArray array, jboolean *elems, jint mode);
- void (*ReleaseByteArrayElements) (JNIEnv*, jbyteArray array, jbyte *elems, jint mode);
- void (*ReleaseCharArrayElements) (JNIEnv*, jcharArray array, jchar *elems, jint mode);
- void (*ReleaseShortArrayElements) (JNIEnv*, jshortArray array, jshort *elems, jint mode);
- void (*ReleaseIntArrayElements) (JNIEnv*, jintArray array, jint *elems, jint mode);
- void (*ReleaseLongArrayElements) (JNIEnv*, jlongArray array, jlong *elems, jint mode);
- void (*ReleaseFloatArrayElements) (JNIEnv*, jfloatArray array, jfloat *elems, jint mode);
- void (*ReleaseDoubleArrayElements) (JNIEnv*, jdoubleArray array, jdouble *elems, jint mode);
-
- void (*GetBooleanArrayRegion) (JNIEnv*, jbooleanArray array, jsize start, jsize l, jboolean *buf);
- void (*GetByteArrayRegion) (JNIEnv*, jbyteArray array, jsize start, jsize len, jbyte *buf);
- void (*GetCharArrayRegion) (JNIEnv*, jcharArray array, jsize start, jsize len, jchar *buf);
- void (*GetShortArrayRegion) (JNIEnv*, jshortArray array, jsize start, jsize len, jshort *buf);
- void (*GetIntArrayRegion) (JNIEnv*, jintArray array, jsize start, jsize len, jint *buf);
- void (*GetLongArrayRegion) (JNIEnv*, jlongArray array, jsize start, jsize len, jlong *buf);
- void (*GetFloatArrayRegion) (JNIEnv*, jfloatArray array, jsize start, jsize len, jfloat *buf);
- void (*GetDoubleArrayRegion) (JNIEnv*, jdoubleArray array, jsize start, jsize len, jdouble *buf);
-
- void (*SetBooleanArrayRegion) (JNIEnv*, jbooleanArray array, jsize start, jsize l, jboolean *buf);
- void (*SetByteArrayRegion) (JNIEnv*, jbyteArray array, jsize start, jsize len, jbyte *buf);
- void (*SetCharArrayRegion) (JNIEnv*, jcharArray array, jsize start, jsize len, jchar *buf);
- void (*SetShortArrayRegion) (JNIEnv*, jshortArray array, jsize start, jsize len, jshort *buf);
- void (*SetIntArrayRegion) (JNIEnv*, jintArray array, jsize start, jsize len, jint *buf);
- void (*SetLongArrayRegion) (JNIEnv*, jlongArray array, jsize start, jsize len, jlong *buf);
- void (*SetFloatArrayRegion) (JNIEnv*, jfloatArray array, jsize start, jsize len, jfloat *buf);
- void (*SetDoubleArrayRegion) (JNIEnv*, jdoubleArray array, jsize start, jsize len, jdouble *buf);
-
- /* registering native methods */
-
- jint (*RegisterNatives) (JNIEnv*, jclass clazz, const JNINativeMethod *methods, jint nMethods);
- jint (*UnregisterNatives) (JNIEnv*, jclass clazz);
-
- /* monitor operations */
-
- jint (*MonitorEnter) (JNIEnv*, jobject obj);
- jint (*MonitorExit) (JNIEnv*, jobject obj);
-
- /* JavaVM interface */
- jint (*GetJavaVM) (JNIEnv*, JavaVM **vm);
-
- void (*GetStringRegion) (JNIEnv*, jstring str, jsize start, jsize len, jchar *buf);
- void (*GetStringUTFRegion) (JNIEnv*, jstring str, jsize start, jsize len, char *buf);
-
- void * (*GetPrimitiveArrayCritical) (JNIEnv*, jarray array, jboolean *isCopy);
- void (*ReleasePrimitiveArrayCritical) (JNIEnv*, jarray array, void *carray, jint mode);
-
- const jchar * (*GetStringCritical) (JNIEnv*, jstring string, jboolean *isCopy);
- void (*ReleaseStringCritical) (JNIEnv*, jstring string, const jchar *cstring);
-
- jweak (*NewWeakGlobalRef) (JNIEnv*, jobject obj);
- void (*DeleteWeakGlobalRef) (JNIEnv*, jweak ref);
-
- jboolean (*ExceptionCheck) (JNIEnv*);
+struct localref_table {
+ s4 capacity; /* table size */
+ s4 used; /* currently used references */
+ s4 localframes; /* number of current frames */
+ s4 PADDING; /* 8-byte padding */
+ localref_table *prev; /* link to prev table (LocalFrame) */
+ java_objectheader *refs[LOCALREFTABLE_CAPACITY]; /* references */
};
+#if defined(USE_THREADS)
+#define LOCALREFTABLE (THREADINFO->_localref_table)
+#else
+extern localref_table *_no_threads_localref_table;
-/* the active JNI function table */
-
-extern JNIEnv env;
-extern JavaVM javaVM;
-extern struct JNI_Table envTable;
-
-
-/* function prototypes */
-
-jfieldID getFieldID_critical(JNIEnv *env, jclass clazz, char *name, char *sig);
-
-jobject GetObjectField(JNIEnv *env, jobject obj, jfieldID fieldID);
-jboolean GetBooleanField(JNIEnv *env, jobject obj, jfieldID fieldID);
-jbyte GetByteField(JNIEnv *env, jobject obj, jfieldID fieldID);
-jchar GetCharField(JNIEnv *env, jobject obj, jfieldID fieldID);
-jshort GetShortField(JNIEnv *env, jobject obj, jfieldID fieldID);
-jint GetIntField(JNIEnv *env, jobject obj, jfieldID fieldID);
-jlong GetLongField(JNIEnv *env, jobject obj, jfieldID fieldID);
-jfloat GetFloatField(JNIEnv *env, jobject obj, jfieldID fieldID);
-jdouble GetDoubleField(JNIEnv *env, jobject obj, jfieldID fieldID);
+#define LOCALREFTABLE (_no_threads_localref_table)
+#endif
-void SetObjectField(JNIEnv *env, jobject obj, jfieldID fieldID, jobject val);
-void SetBooleanField(JNIEnv *env, jobject obj, jfieldID fieldID, jboolean val);
-void SetByteField(JNIEnv *env, jobject obj, jfieldID fieldID, jbyte val);
-void SetCharField(JNIEnv *env, jobject obj, jfieldID fieldID, jchar val);
-void SetShortField(JNIEnv *env, jobject obj, jfieldID fieldID, jshort val);
-void SetIntField(JNIEnv *env, jobject obj, jfieldID fieldID, jint val);
-void SetLongField(JNIEnv *env, jobject obj, jfieldID fieldID, jlong val);
-void SetFloatField(JNIEnv *env, jobject obj, jfieldID fieldID, jfloat val);
-void SetDoubleField(JNIEnv *env, jobject obj, jfieldID fieldID, jdouble val);
+/* initialize JNI subsystem */
+bool jni_init(void);
-#define setField(obj,typ,var,val) *((typ*) ((long int) obj + (long int) var->offset))=val;
-#define getField(obj,typ,var) *((typ*) ((long int) obj + (long int) var->offset))
-#define setfield_critical(clazz,obj,name,sig,jdatatype,val) setField(obj,jdatatype,getFieldID_critical(env,clazz,name,sig),val);
+java_objectheader *_Jv_jni_invokeNative(methodinfo *m, java_objectheader *o,
+ java_objectarray *params);
-jobject *jni_method_invokeNativeHelper(JNIEnv *env,struct methodinfo *mi,jobject obj, java_objectarray *params);
+extern void* ptr_env;
+extern struct JNINativeInterface JNI_JNIEnvTable;
#endif /* _JNI_H */