* jni.cc (_Jv_JNI_AllocObject): Removed old FIXME comment.
authortromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 23 Oct 2002 23:19:55 +0000 (23:19 +0000)
committertromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 23 Oct 2002 23:19:55 +0000 (23:19 +0000)
(array_from_valist): Correctly handle promotion for jint, jlong,
jfloat, and jdouble.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@58476 138bc75d-0d04-0410-961f-82ee72b054a4

libjava/ChangeLog
libjava/jni.cc

index 1f871dc..faa6c68 100644 (file)
@@ -1,3 +1,9 @@
+2002-10-23  Tom Tromey  <tromey@redhat.com>
+
+       * jni.cc (_Jv_JNI_AllocObject): Removed old FIXME comment.
+       (array_from_valist): Correctly handle promotion for jint, jlong,
+       jfloat, and jdouble.
+
 2002-10-23  Ranjit Mathew <rmathew@hotmail.com>
 
        * java/io/natFileWin32.cc (attr): Use FindFirstFile( ) instead of
index 8c40429..2985d47 100644 (file)
@@ -600,10 +600,7 @@ _Jv_JNI_AllocObject (JNIEnv *env, jclass clazz)
       if (clazz->isInterface() || Modifier::isAbstract(clazz->getModifiers()))
        env->ex = new java::lang::InstantiationException ();
       else
-       {
-         // FIXME: will this work for String?
-         obj = JvAllocObject (clazz);
-       }
+       obj = JvAllocObject (clazz);
     }
   catch (jthrowable t)
     {
@@ -694,18 +691,21 @@ array_from_valist (jvalue *values, JArray<jclass> *arg_types, va_list vargs)
   jclass *arg_elts = elements (arg_types);
   for (int i = 0; i < arg_types->length; ++i)
     {
+      // Here we assume that sizeof(int) >= sizeof(jint), because we
+      // use `int' when decoding the varargs.  Likewise for
+      // long/jlong, float, and double.
       if (arg_elts[i] == JvPrimClass (byte))
        values[i].b = (jbyte) va_arg (vargs, int);
       else if (arg_elts[i] == JvPrimClass (short))
        values[i].s = (jshort) va_arg (vargs, int);
       else if (arg_elts[i] == JvPrimClass (int))
-       values[i].i = va_arg (vargs, jint);
+       values[i].i = (jint) va_arg (vargs, int);
       else if (arg_elts[i] == JvPrimClass (long))
-       values[i].j = va_arg (vargs, jlong);
+       values[i].j = (jlong) va_arg (vargs, long);
       else if (arg_elts[i] == JvPrimClass (float))
-       values[i].f = va_arg (vargs, jfloat);
+       values[i].f = (jfloat) va_arg (vargs, double);
       else if (arg_elts[i] == JvPrimClass (double))
-       values[i].d = va_arg (vargs, jdouble);
+       values[i].d = (jdouble) va_arg (vargs, double);
       else if (arg_elts[i] == JvPrimClass (boolean))
        values[i].z = (jboolean) va_arg (vargs, int);
       else if (arg_elts[i] == JvPrimClass (char))