From a602a54fa428e7a8ccec5b534a1afbb45f8e82dd Mon Sep 17 00:00:00 2001
From: tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 1 Feb 2000 16:32:21 +0000
Subject: 	* jni.cc (_Jv_JNI_GetField): Specialize for jobject. 
 (_Jv_JNI_GetStaticField): Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@31735 138bc75d-0d04-0410-961f-82ee72b054a4
---
 libjava/jni.cc | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

(limited to 'libjava/jni.cc')

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)
-- 
cgit v1.2.1