jni.cc (wrap_value<jobject>, [...]): Removed.
authorTom Tromey <tromey@redhat.com>
Fri, 6 Apr 2001 17:38:52 +0000 (17:38 +0000)
committerTom Tromey <tromey@gcc.gnu.org>
Fri, 6 Apr 2001 17:38:52 +0000 (17:38 +0000)
* jni.cc (wrap_value<jobject>, wrap_value<jclass>): Removed.
(wrap_value<T*>): New specialization.
(_Jv_JNI_PopLocalFrame): Update env->locals.

From-SVN: r41157

libjava/ChangeLog
libjava/jni.cc

index 36d8787..b68b23a 100644 (file)
@@ -1,3 +1,9 @@
+2001-04-06  Tom Tromey  <tromey@redhat.com>
+
+       * jni.cc (wrap_value<jobject>, wrap_value<jclass>): Removed.
+       (wrap_value<T*>): New specialization.
+       (_Jv_JNI_PopLocalFrame): Update env->locals.
+
 2001-04-05  Tom Tromey  <tromey@redhat.com>
 
        * libtool-version: Updated current.
index d41dd01..6190f4f 100644 (file)
@@ -335,6 +335,9 @@ _Jv_JNI_PopLocalFrame (JNIEnv *env, jobject result, int stop)
       rf = n;
     }
 
+  // Update the local frame information.
+  env->locals = rf;
+
   return result == NULL ? NULL : _Jv_JNI_NewLocalRef (env, result);
 }
 
@@ -369,20 +372,15 @@ wrap_value (JNIEnv *, T value)
   return value;
 }
 
-template<>
-static jobject
-wrap_value (JNIEnv *env, jobject value)
-{
-  return value == NULL ? value : _Jv_JNI_NewLocalRef (env, value);
-}
-
-template<>
-static jclass
-wrap_value (JNIEnv *env, jclass value)
+// This specialization is used for jobject, jclass, jstring, jarray,
+// etc.
+template<typename T>
+static T *
+wrap_value (JNIEnv *env, T *value)
 {
   return (value == NULL
          ? value
-         : (jclass) _Jv_JNI_NewLocalRef (env, (jobject) value));
+         : (T *) _Jv_JNI_NewLocalRef (env, (jobject) value));
 }
 
 \f