summaryrefslogtreecommitdiff
path: root/libjava
diff options
context:
space:
mode:
Diffstat (limited to 'libjava')
-rw-r--r--libjava/ChangeLog13
-rw-r--r--libjava/java/lang/reflect/natMethod.cc65
2 files changed, 49 insertions, 29 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 004c39c3df7..e1dd01f08ab 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,16 @@
+2002-02-28 Anthony Green <green@redhat.com>
+
+ * java/lang/reflect/natMethod.cc (result): Add void* element.
+ (_Jv_CallAnyMethodA): Handle FFI_TYPE_POINTER arguments. Move
+ constructor test.
+
+2002-02-17 Anthony Green <green@redhat.com>
+
+ * configure.host (FILE): New macro for specifing File
+ implementation.
+ * configure: Rebuilt.
+ * configure.in: Use FILE. Define HAVE_TIME for newlib targets.
+
2002-02-27 Adam Megacz <adam@xwt.org>
* java/net/natInetAddress.cc: Changed USE_WINSOCK to WIN32, added
diff --git a/libjava/java/lang/reflect/natMethod.cc b/libjava/java/lang/reflect/natMethod.cc
index e11e5c3677c..d4cbb72ed96 100644
--- a/libjava/java/lang/reflect/natMethod.cc
+++ b/libjava/java/lang/reflect/natMethod.cc
@@ -426,6 +426,7 @@ _Jv_CallAnyMethodA (jobject obj,
union
{
ffi_arg i;
+ jobject o;
jlong l;
jfloat f;
jdouble d;
@@ -448,37 +449,43 @@ _Jv_CallAnyMethodA (jobject obj,
// a narrowing conversion for jbyte, jchar, etc. results.
// Note that boolean is handled either by the FFI_TYPE_SINT8 or
// FFI_TYPE_SINT32 case.
- switch (rtype->type)
- {
- case FFI_TYPE_VOID:
- break;
- case FFI_TYPE_SINT8:
- result->b = (jbyte)ffi_result.i;
- break;
- case FFI_TYPE_SINT16:
- result->s = (jshort)ffi_result.i;
- break;
- case FFI_TYPE_UINT16:
- result->c = (jchar)ffi_result.i;
- break;
- case FFI_TYPE_SINT32:
- result->i = (jint)ffi_result.i;
- break;
- case FFI_TYPE_SINT64:
- result->j = (jlong)ffi_result.l;
- break;
- case FFI_TYPE_FLOAT:
- result->f = (jfloat)ffi_result.f;
- break;
- case FFI_TYPE_DOUBLE:
- result->d = (jdouble)ffi_result.d;
- break;
- default:
- JvFail ("Unknown ffi_call return type");
- break;
- }
if (is_constructor)
result->l = obj;
+ else
+ {
+ switch (rtype->type)
+ {
+ case FFI_TYPE_VOID:
+ break;
+ case FFI_TYPE_SINT8:
+ result->b = (jbyte)ffi_result.i;
+ break;
+ case FFI_TYPE_SINT16:
+ result->s = (jshort)ffi_result.i;
+ break;
+ case FFI_TYPE_UINT16:
+ result->c = (jchar)ffi_result.i;
+ break;
+ case FFI_TYPE_SINT32:
+ result->i = (jint)ffi_result.i;
+ break;
+ case FFI_TYPE_SINT64:
+ result->j = (jlong)ffi_result.l;
+ break;
+ case FFI_TYPE_FLOAT:
+ result->f = (jfloat)ffi_result.f;
+ break;
+ case FFI_TYPE_DOUBLE:
+ result->d = (jdouble)ffi_result.d;
+ break;
+ case FFI_TYPE_POINTER:
+ result->l = (jobject)ffi_result.o;
+ break;
+ default:
+ JvFail ("Unknown ffi_call return type");
+ break;
+ }
+ }
return ex;
#else