From 562ff1637faf0ce60e65c13a9a7c27015b6226bc Mon Sep 17 00:00:00 2001 From: Anthony Green Date: Fri, 1 Mar 2002 05:36:31 +0000 Subject: [PATCH] Add pointer support to the reflection code. From-SVN: r50180 --- libjava/ChangeLog | 13 ++++++ libjava/java/lang/reflect/natMethod.cc | 65 ++++++++++++++------------ 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 + + * java/lang/reflect/natMethod.cc (result): Add void* element. + (_Jv_CallAnyMethodA): Handle FFI_TYPE_POINTER arguments. Move + constructor test. + +2002-02-17 Anthony Green + + * 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 * 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 -- 2.30.2