OSDN Git Service

* jni.cc (_Jv_JNI_NewObjectV): Corrected assertion.
authortromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 16 Feb 2000 22:42:41 +0000 (22:42 +0000)
committertromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 16 Feb 2000 22:42:41 +0000 (22:42 +0000)
(_Jv_JNI_NewObject): Likewise.
(_Jv_JNI_NewObjectA): Likewise.
(_Jv_JNI_CallAnyMethodV): In constructor case, pass correct value
as "return" type to _Jv_CallAnyMethodA.
(_Jv_JNI_CallAnyMethodA): Likewise.
(_Jv_JNI_CallAnyVoidMethodV): Likewise.

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

libjava/ChangeLog
libjava/jni.cc

index 1dae782..2675540 100644 (file)
@@ -1,5 +1,13 @@
 2000-02-16  Tom Tromey  <tromey@cygnus.com>
 
+       * jni.cc (_Jv_JNI_NewObjectV): Corrected assertion.
+       (_Jv_JNI_NewObject): Likewise.
+       (_Jv_JNI_NewObjectA): Likewise.
+       (_Jv_JNI_CallAnyMethodV): In constructor case, pass correct value
+       as "return" type to _Jv_CallAnyMethodA.
+       (_Jv_JNI_CallAnyMethodA): Likewise.
+       (_Jv_JNI_CallAnyVoidMethodV): Likewise.
+
        * jni.cc (_Jv_JNI_FindClass): Use ClassLoader.loadClass, not
        findClass.
 
index b67dd05..38f89d3 100644 (file)
@@ -560,6 +560,10 @@ _Jv_JNI_CallAnyMethodV (JNIEnv *env, jobject obj, jclass klass,
   jvalue args[arg_types->length];
   array_from_valist (args, arg_types, vargs);
 
+  // For constructors we need to pass the Class we are instantiating.
+  if (style == constructor)
+    return_type = klass;
+
   jvalue result;
   jthrowable ex = _Jv_CallAnyMethodA (obj, return_type, id,
                                      style == constructor,
@@ -604,6 +608,10 @@ _Jv_JNI_CallAnyMethodA (JNIEnv *env, jobject obj, jclass klass,
   _Jv_GetTypesFromSignature (id, decl_class,
                             &arg_types, &return_type);
 
+  // For constructors we need to pass the Class we are instantiating.
+  if (style == constructor)
+    return_type = klass;
+
   jvalue result;
   jthrowable ex = _Jv_CallAnyMethodA (obj, return_type, id,
                                      style == constructor,
@@ -636,6 +644,10 @@ _Jv_JNI_CallAnyVoidMethodV (JNIEnv *env, jobject obj, jclass klass,
   jvalue args[arg_types->length];
   array_from_valist (args, arg_types, vargs);
 
+  // For constructors we need to pass the Class we are instantiating.
+  if (style == constructor)
+    return_type = klass;
+
   jthrowable ex = _Jv_CallAnyMethodA (obj, return_type, id,
                                      style == constructor,
                                      arg_types, args, NULL);
@@ -804,7 +816,11 @@ _Jv_JNI_NewObjectV (JNIEnv *env, jclass klass,
 {
   JvAssert (klass && ! klass->isArray ());
   JvAssert (! strcmp (id->name->data, "<init>")
-           && ! strcmp (id->signature->data, "()V"));
+           && id->signature->length > 2
+           && id->signature->data[0] == '('
+           && ! strcmp (&id->signature->data[id->signature->length - 2],
+                        ")V"));
+
   return _Jv_JNI_CallAnyMethodV<jobject, constructor> (env, NULL, klass,
                                                       id, args);
 }
@@ -814,7 +830,10 @@ _Jv_JNI_NewObject (JNIEnv *env, jclass klass, jmethodID id, ...)
 {
   JvAssert (klass && ! klass->isArray ());
   JvAssert (! strcmp (id->name->data, "<init>")
-           && ! strcmp (id->signature->data, "()V"));
+           && id->signature->length > 2
+           && id->signature->data[0] == '('
+           && ! strcmp (&id->signature->data[id->signature->length - 2],
+                        ")V"));
 
   va_list args;
   jobject result;
@@ -833,7 +852,11 @@ _Jv_JNI_NewObjectA (JNIEnv *env, jclass klass, jmethodID id,
 {
   JvAssert (klass && ! klass->isArray ());
   JvAssert (! strcmp (id->name->data, "<init>")
-           && ! strcmp (id->signature->data, "()V"));
+           && id->signature->length > 2
+           && id->signature->data[0] == '('
+           && ! strcmp (&id->signature->data[id->signature->length - 2],
+                        ")V"));
+
   return _Jv_JNI_CallAnyMethodA<jobject, constructor> (env, NULL, klass,
                                                       id, args);
 }