aboutsummaryrefslogtreecommitdiff
path: root/libjava/jni.cc
diff options
context:
space:
mode:
authorTom Tromey <tromey@cygnus.com>2000-02-16 22:42:41 +0000
committerTom Tromey <tromey@gcc.gnu.org>2000-02-16 22:42:41 +0000
commit1adbc4d8be32f3c70417c3a9da7604f79d7c7b3b (patch)
tree86d05d62721316545fce92b6333dea66a37e5ba2 /libjava/jni.cc
parent5b0d59b4e7e9102fdce92787a05f1ad982d7eddd (diff)
downloadgcc-1adbc4d8be32f3c70417c3a9da7604f79d7c7b3b.zip
gcc-1adbc4d8be32f3c70417c3a9da7604f79d7c7b3b.tar.gz
gcc-1adbc4d8be32f3c70417c3a9da7604f79d7c7b3b.tar.bz2
jni.cc (_Jv_JNI_NewObjectV): Corrected assertion.
* 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. From-SVN: r32017
Diffstat (limited to 'libjava/jni.cc')
-rw-r--r--libjava/jni.cc29
1 files changed, 26 insertions, 3 deletions
diff --git a/libjava/jni.cc b/libjava/jni.cc
index b67dd05..38f89d3 100644
--- a/libjava/jni.cc
+++ b/libjava/jni.cc
@@ -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);
}