*/
-/* jni.h ***********************************************************************
+/* jni.hpp *********************************************************************
ATTENTION: We include this file before we actually define our own
jni.h. We do this because otherwise we can get into unresolvable
CLASSPATH_JNI_MD_H and CLASSPATH_JNI_H are defined in config.h.
-*******************************************************************************/
-
-#include "config.h"
+ We include both headers (jni.h and jni_md.h) with the absolute path
+ so we can be sure that the preprocessor does not pick up another
+ header from the search path. Furthermore we include jni_md.h
+ before jni.h as the latter includes the former.
-/* We include both headers with the absolute path so we can be sure
- that the preprocessor does not take another header. Furthermore we
- include jni_md.h before jni.h as the latter includes the former. */
+*******************************************************************************/
-#include INCLUDE_JNI_MD_H
-#include INCLUDE_JNI_H
#ifndef _JNI_HPP
#define _JNI_HPP
+#include "config.h"
+
#include <stdbool.h>
#include <stdint.h>
+
+// Define these to override the typedefs in jni.h
+#define _CLASSPATH_VM_JNI_TYPES_DEFINED 1 // GNU Classpath
+#define JNI_TYPES_ALREADY_DEFINED_IN_JNI_MD_H 1 // OpenJDK
+
+// First include jni_md.h so we have the Java primitive types.
+#include INCLUDE_JNI_MD_H
+
+
+// Include the C++ wrapper classes.
+//#include "vm/javaobjects.hpp"
+#include "vm/global.h"
+
+// Typedef the JNI types.
+typedef java_handle_t* jobject;
+typedef java_handle_t* jclass;
+typedef java_handle_t* jstring;
+typedef java_handle_t* jthrowable;
+typedef java_handle_t* jweak; // FIXME
+typedef java_handle_array_t* jarray;
+typedef java_handle_objectarray_t* jobjectArray;
+typedef java_handle_booleanarray_t* jbooleanArray;
+typedef java_handle_bytearray_t* jbyteArray;
+typedef java_handle_chararray_t* jcharArray;
+typedef java_handle_shortarray_t* jshortArray;
+typedef java_handle_intarray_t* jintArray;
+typedef java_handle_longarray_t* jlongArray;
+typedef java_handle_floatarray_t* jfloatArray;
+typedef java_handle_doublearray_t* jdoubleArray;
+
+
+// We need some additional stuff for the various JNI headers.
+#if defined(WITH_JAVA_RUNTIME_LIBRARY_GNU_CLASSPATH) || defined(WITH_JAVA_RUNTIME_LIBRARY_CLDC1_1)
+
+// These typedefs and defines are copied from GNU Classpath's jni.h
+#define JNI_TRUE true
+#define JNI_FALSE false
+
+typedef struct _Jv_JNIEnv JNIEnv;
+typedef struct _Jv_JavaVM JavaVM;
+
+#elif defined(WITH_JAVA_RUNTIME_LIBRARY_OPENJDK)
+
+// These typedefs are copied from OpenJDK's jni.h
+typedef unsigned char jboolean;
+typedef unsigned short jchar;
+typedef short jshort;
+typedef float jfloat;
+typedef double jdouble;
+
+typedef jint jsize;
+
+typedef union jvalue {
+ jboolean z;
+ jbyte b;
+ jchar c;
+ jshort s;
+ jint i;
+ jlong j;
+ jfloat f;
+ jdouble d;
+ jobject l;
+} jvalue;
+
+struct _jfieldID;
+typedef struct _jfieldID *jfieldID;
+
+struct _jmethodID;
+typedef struct _jmethodID *jmethodID;
+
+/* Return values from jobjectRefType */
+typedef enum _jobjectType {
+ JNIInvalidRefType = 0,
+ JNILocalRefType = 1,
+ JNIGlobalRefType = 2,
+ JNIWeakGlobalRefType = 3
+} jobjectRefType;
+
+#endif
+
+
+// Now include jni.h to complete the JNI header.
+#include INCLUDE_JNI_H
+
+
+// Includes.
#include "vm/global.h"
public:
java_lang_Object() : _handle(NULL) {}
java_lang_Object(java_handle_t* h) : _handle(h) {}
- java_lang_Object(jobject h) : _handle((java_handle_t*) h) {}
virtual ~java_lang_Object() {}
// Getters.
// Setters.
inline void set_pd(java_handle_t* value);
- inline void set_pd(jobject value);
};
inline void java_lang_Class::set_pd(java_handle_t* value)
set(_handle, offset_pd, value);
}
-inline void java_lang_Class::set_pd(jobject value)
-{
- set_pd((java_handle_t*) value);
-}
-
/**
* GNU Classpath java/lang/StackTraceElement
public:
java_lang_String(java_handle_t* h) : java_lang_Object(h) {}
- java_lang_String(jstring h);
java_lang_String(java_handle_t* h, java_handle_chararray_t* value, int32_t count, int32_t offset = 0);
// Getters.
inline void set_offset(int32_t value);
};
-inline java_lang_String::java_lang_String(jstring h) : java_lang_Object(h)
-{
- java_lang_String((java_handle_t*) h);
-}
-
inline java_lang_String::java_lang_String(java_handle_t* h, java_handle_chararray_t* value, int32_t count, int32_t offset) : java_lang_Object(h)
{
set_value(value);
public:
java_lang_VMThread(java_handle_t* h) : java_lang_Object(h) {}
- java_lang_VMThread(jobject h);
java_lang_VMThread(java_handle_t* h, java_handle_t* thread, threadobject* vmdata);
// Getters.
};
-inline java_lang_VMThread::java_lang_VMThread(jobject h) : java_lang_Object(h)
-{
- java_lang_VMThread((java_handle_t*) h);
-}
-
inline java_lang_VMThread::java_lang_VMThread(java_handle_t* h, java_handle_t* thread, threadobject* vmdata) : java_lang_Object(h)
{
set_thread(thread);
public:
java_lang_VMThrowable(java_handle_t* h) : java_lang_Object(h) {}
- java_lang_VMThrowable(jobject h);
inline java_handle_bytearray_t* get_vmdata() const;
inline void set_vmdata(java_handle_bytearray_t* value);
};
-inline java_lang_VMThrowable::java_lang_VMThrowable(jobject h) : java_lang_Object(h)
-{
- java_lang_VMThrowable((java_handle_t*) h);
-}
inline java_handle_bytearray_t* java_lang_VMThrowable::get_vmdata() const
{
public:
java_lang_reflect_VMConstructor(java_handle_t* h) : java_lang_Object(h) {}
- java_lang_reflect_VMConstructor(jobject h);
java_lang_reflect_VMConstructor(methodinfo* m);
// Getters.
};
-inline java_lang_reflect_VMConstructor::java_lang_reflect_VMConstructor(jobject h) : java_lang_Object(h)
-{
- java_lang_reflect_VMConstructor((java_handle_t*) h);
-}
-
inline java_lang_reflect_VMConstructor::java_lang_reflect_VMConstructor(methodinfo* m)
{
_handle = builtin_new(class_java_lang_reflect_VMConstructor);
public:
java_lang_reflect_Constructor(java_handle_t* h) : java_lang_Object(h) {}
- java_lang_reflect_Constructor(jobject h);
java_lang_reflect_Constructor(methodinfo* m);
java_handle_t* new_instance(java_handle_objectarray_t* args);
};
-inline java_lang_reflect_Constructor::java_lang_reflect_Constructor(jobject h) : java_lang_Object(h)
-{
- java_lang_reflect_Constructor((java_handle_t*) h);
-}
-
inline java_lang_reflect_Constructor::java_lang_reflect_Constructor(methodinfo* m)
{
java_lang_reflect_VMConstructor jlrvmc(m);
public:
java_lang_reflect_VMField(java_handle_t* h) : java_lang_Object(h) {}
- java_lang_reflect_VMField(jobject h);
java_lang_reflect_VMField(fieldinfo* f);
// Getters.
};
-inline java_lang_reflect_VMField::java_lang_reflect_VMField(jobject h) : java_lang_Object(h)
-{
- java_lang_reflect_VMField((java_handle_t*) h);
-}
-
inline java_lang_reflect_VMField::java_lang_reflect_VMField(fieldinfo* f)
{
_handle = builtin_new(class_java_lang_reflect_VMField);
public:
java_lang_reflect_Field(java_handle_t* h) : java_lang_Object(h) {}
- java_lang_reflect_Field(jobject h);
java_lang_reflect_Field(fieldinfo* f);
// Getters.
};
-inline java_lang_reflect_Field::java_lang_reflect_Field(jobject h) : java_lang_Object(h)
-{
- java_lang_reflect_Field((java_handle_t*) h);
-}
-
inline java_lang_reflect_Field::java_lang_reflect_Field(fieldinfo* f)
{
java_lang_reflect_VMField jlrvmf(f);
public:
java_lang_reflect_VMMethod(java_handle_t* h) : java_lang_Object(h) {}
- java_lang_reflect_VMMethod(jobject h);
java_lang_reflect_VMMethod(methodinfo* m);
// Getters.
inline methodinfo* get_method() const;
};
-inline java_lang_reflect_VMMethod::java_lang_reflect_VMMethod(jobject h) : java_lang_Object(h)
-{
- java_lang_reflect_VMMethod((java_handle_t*) h);
-}
inline java_lang_reflect_VMMethod::java_lang_reflect_VMMethod(methodinfo* m)
{
public:
java_lang_reflect_Method(java_handle_t* h) : java_lang_Object(h) {}
- java_lang_reflect_Method(jobject h);
java_lang_reflect_Method(methodinfo* m);
java_handle_t* invoke(java_handle_t* o, java_handle_objectarray_t* args);
};
-inline java_lang_reflect_Method::java_lang_reflect_Method(jobject h) : java_lang_Object(h)
-{
- java_lang_reflect_Method((java_handle_t*) h);
-}
-
inline java_lang_reflect_Method::java_lang_reflect_Method(methodinfo* m)
{
java_lang_reflect_VMMethod jlrvmm(m);
public:
java_nio_DirectByteBufferImpl(java_handle_t* h) : java_lang_Object(h) {}
- java_nio_DirectByteBufferImpl(jobject h);
// Getters.
inline java_handle_t* get_address() const;
};
-inline java_nio_DirectByteBufferImpl::java_nio_DirectByteBufferImpl(jobject h) : java_lang_Object(h)
-{
- java_nio_DirectByteBufferImpl((java_handle_t*) h);
-}
inline java_handle_t* java_nio_DirectByteBufferImpl::get_address() const
{
public:
java_lang_String(java_handle_t* h) : java_lang_Object(h) {}
- java_lang_String(jstring h);
java_lang_String(java_handle_t* h, java_handle_chararray_t* value, int32_t count, int32_t offset = 0);
// Getters.
inline void set_count (int32_t value);
};
-inline java_lang_String::java_lang_String(jstring h) : java_lang_Object(h)
-{
- java_lang_String((java_handle_t*) h);
-}
-
inline java_lang_String::java_lang_String(java_handle_t* h, java_handle_chararray_t* value, int32_t count, int32_t offset) : java_lang_Object(h)
{
set_value(value);
public:
java_lang_Throwable(java_handle_t* h) : java_lang_Object(h) {}
- java_lang_Throwable(jobject h);
- java_lang_Throwable(jobject h, java_handle_bytearray_t* backtrace);
+ java_lang_Throwable(java_handle_t* h, java_handle_bytearray_t* backtrace);
// Getters.
inline java_handle_bytearray_t* get_backtrace () const;
};
-inline java_lang_Throwable::java_lang_Throwable(jobject h) : java_lang_Object(h)
-{
- java_lang_Throwable((java_handle_t*) h);
-}
-
-inline java_lang_Throwable::java_lang_Throwable(jobject h, java_handle_bytearray_t* backtrace) : java_lang_Object(h)
+inline java_lang_Throwable::java_lang_Throwable(java_handle_t* h, java_handle_bytearray_t* backtrace) : java_lang_Object(h)
{
- java_lang_Throwable((java_handle_t*) h);
set_backtrace(backtrace);
}
public:
java_lang_reflect_Constructor(java_handle_t* h) : java_lang_Object(h) {}
- java_lang_reflect_Constructor(jobject h);
java_lang_reflect_Constructor(methodinfo* m);
java_handle_t* new_instance(java_handle_objectarray_t* args);
};
-inline java_lang_reflect_Constructor::java_lang_reflect_Constructor(jobject h) : java_lang_Object(h)
-{
- java_lang_reflect_Constructor((java_handle_t*) h);
-}
-
inline java_lang_reflect_Constructor::java_lang_reflect_Constructor(methodinfo* m)
{
_handle = builtin_new(class_java_lang_reflect_Constructor);
public:
java_lang_reflect_Field(java_handle_t* h) : java_lang_Object(h) {}
- java_lang_reflect_Field(jobject h);
java_lang_reflect_Field(fieldinfo* f);
// Getters.
};
-inline java_lang_reflect_Field::java_lang_reflect_Field(jobject h) : java_lang_Object(h)
-{
- java_lang_reflect_Field((java_handle_t*) h);
-}
-
inline java_lang_reflect_Field::java_lang_reflect_Field(fieldinfo* f)
{
_handle = builtin_new(class_java_lang_reflect_Field);
public:
java_lang_reflect_Method(java_handle_t* h) : java_lang_Object(h) {}
- java_lang_reflect_Method(jobject h);
java_lang_reflect_Method(methodinfo* m);
java_handle_t* invoke(java_handle_t* o, java_handle_objectarray_t* args);
};
-inline java_lang_reflect_Method::java_lang_reflect_Method(jobject h) : java_lang_Object(h)
-{
- java_lang_reflect_Method((java_handle_t*) h);
-}
-
inline java_lang_reflect_Method::java_lang_reflect_Method(methodinfo* m)
{
_handle = builtin_new(class_java_lang_reflect_Method);
public:
java_nio_Buffer(java_handle_t* h) : java_lang_Object(h) {}
- java_nio_Buffer(jobject h) : java_lang_Object(h) {}
// Getters.
inline void* get_address() const;
public:
com_sun_cldchi_jvm_FileDescriptor(java_handle_t* h) : java_lang_Object(h) {}
- com_sun_cldchi_jvm_FileDescriptor(jobject h);
com_sun_cldchi_jvm_FileDescriptor(java_handle_t* h, int64_t pointer, int32_t position, int32_t length);
com_sun_cldchi_jvm_FileDescriptor(java_handle_t* h, com_sun_cldchi_jvm_FileDescriptor& fd);
};
-inline com_sun_cldchi_jvm_FileDescriptor::com_sun_cldchi_jvm_FileDescriptor(jobject h) : java_lang_Object(h)
-{
- com_sun_cldchi_jvm_FileDescriptor((java_handle_t*) h);
-}
-
inline com_sun_cldchi_jvm_FileDescriptor::com_sun_cldchi_jvm_FileDescriptor(java_handle_t* h, int64_t pointer, int32_t position, int32_t length) : java_lang_Object(h)
{
set_pointer(pointer);
public:
java_lang_String(java_handle_t* h) : java_lang_Object(h) {}
- java_lang_String(jstring h);
java_lang_String(java_handle_t* h, java_handle_chararray_t* value, int32_t count, int32_t offset = 0);
// Getters.
inline void set_count (int32_t value);
};
-inline java_lang_String::java_lang_String(jstring h) : java_lang_Object(h)
-{
- java_lang_String((java_handle_t*) h);
-}
inline java_lang_String::java_lang_String(java_handle_t* h, java_handle_chararray_t* value, int32_t count, int32_t offset) : java_lang_Object(h)
{
public:
java_lang_Thread(java_handle_t* h) : java_lang_Object(h) {}
- java_lang_Thread(jobject h);
// java_lang_Thread(threadobject* t);
// Getters.
};
-inline java_lang_Thread::java_lang_Thread(jobject h) : java_lang_Object(h)
-{
- java_lang_Thread((java_handle_t*) h);
-}
-
// inline java_lang_Thread::java_lang_Thread(threadobject* t) : java_lang_Object(h)
// {
// java_lang_Thread(thread_get_object(t));
public:
java_lang_Throwable(java_handle_t* h) : java_lang_Object(h) {}
- java_lang_Throwable(jobject h);
// Getters.
inline java_handle_t* get_detailMessage() const;
};
-inline java_lang_Throwable::java_lang_Throwable(jobject h) : java_lang_Object(h)
-{
- java_lang_Throwable((java_handle_t*) h);
-}
-
-
inline java_handle_t* java_lang_Throwable::get_detailMessage() const
{
return get<java_handle_t*>(_handle, offset_detailMessage);