diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 36d8787dc5f..b68b23a3418 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,9 @@ +2001-04-06 Tom Tromey + + * jni.cc (wrap_value, wrap_value): Removed. + (wrap_value): New specialization. + (_Jv_JNI_PopLocalFrame): Update env->locals. + 2001-04-05 Tom Tromey * libtool-version: Updated current. diff --git a/libjava/jni.cc b/libjava/jni.cc index d41dd01e7bd..6190f4f8d74 100644 --- a/libjava/jni.cc +++ b/libjava/jni.cc @@ -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 +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)); }