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 + + * jni.cc (_Jv_JNI_GetField): Specialize for jobject. + (_Jv_JNI_GetStaticField): Likewise. + 2000-01-31 Tom Tromey * 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 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 (JNIEnv *env, jobject obj, jfieldID field) +{ + jobject *ptr = (jobject *) ((char *) obj + field->getOffset ()); + return _Jv_JNI_NewLocalRef (env, *ptr); +} + template 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 (JNIEnv *env, jclass, jfieldID field) +{ + jobject *ptr = (jobject *) field->u.addr; + return _Jv_JNI_NewLocalRef (env, *ptr); +} + template static void _Jv_JNI_SetStaticField (JNIEnv *, jclass, jfieldID field, T value)