diff options
author | Tom Tromey <tromey@cygnus.com> | 2000-02-16 22:42:41 +0000 |
---|---|---|
committer | Tom Tromey <tromey@gcc.gnu.org> | 2000-02-16 22:42:41 +0000 |
commit | 1adbc4d8be32f3c70417c3a9da7604f79d7c7b3b (patch) | |
tree | 86d05d62721316545fce92b6333dea66a37e5ba2 /libjava | |
parent | 5b0d59b4e7e9102fdce92787a05f1ad982d7eddd (diff) | |
download | gcc-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')
-rw-r--r-- | libjava/ChangeLog | 8 | ||||
-rw-r--r-- | libjava/jni.cc | 29 |
2 files changed, 34 insertions, 3 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 1dae782..2675540 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -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. 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); } |