diff options
Diffstat (limited to 'libjava')
-rw-r--r-- | libjava/ChangeLog | 5 | ||||
-rw-r--r-- | libjava/jni.cc | 17 |
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) |