summaryrefslogtreecommitdiff
path: root/libjava
diff options
context:
space:
mode:
Diffstat (limited to 'libjava')
-rw-r--r--libjava/ChangeLog5
-rw-r--r--libjava/jni.cc17
2 files changed, 21 insertions, 1 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 93db6e7a45c..4690c3c2c81 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,8 @@
+2000-02-01 Tom Tromey <tromey@cygnus.com>
+
+ * jni.cc (_Jv_JNI_GetField): Specialize for jobject.
+ (_Jv_JNI_GetStaticField): Likewise.
+
2000-01-31 Tom Tromey <tromey@cygnus.com>
* prims.cc (_Jv_MallocUnchecked): New function.
diff --git a/libjava/jni.cc b/libjava/jni.cc
index 0b51fce35a4..ff8f9a23fb2 100644
--- a/libjava/jni.cc
+++ b/libjava/jni.cc
@@ -811,7 +811,6 @@ _Jv_JNI_NewObjectA (JNIEnv *env, jclass klass, jmethodID id,
-// FIXME: local reference
template<typename T>
static T
_Jv_JNI_GetField (JNIEnv *, jobject obj, jfieldID field)
@@ -820,6 +819,14 @@ _Jv_JNI_GetField (JNIEnv *, jobject obj, jfieldID field)
return *ptr;
}
+template<>
+static jobject
+_Jv_JNI_GetField<jobject> (JNIEnv *env, jobject obj, jfieldID field)
+{
+ jobject *ptr = (jobject *) ((char *) obj + field->getOffset ());
+ return _Jv_JNI_NewLocalRef (env, *ptr);
+}
+
template<typename T>
static void
_Jv_JNI_SetField (JNIEnv *, jobject obj, jfieldID field, T value)
@@ -888,6 +895,14 @@ _Jv_JNI_GetStaticField (JNIEnv *, jclass, jfieldID field)
return *ptr;
}
+template<>
+static jobject
+_Jv_JNI_GetStaticField<jobject> (JNIEnv *env, jclass, jfieldID field)
+{
+ jobject *ptr = (jobject *) field->u.addr;
+ return _Jv_JNI_NewLocalRef (env, *ptr);
+}
+
template<typename T>
static void
_Jv_JNI_SetStaticField (JNIEnv *, jclass, jfieldID field, T value)