From 562ff1637faf0ce60e65c13a9a7c27015b6226bc Mon Sep 17 00:00:00 2001 From: Anthony Green Date: Fri, 1 Mar 2002 05:36:31 +0000 Subject: Add pointer support to the reflection code. From-SVN: r50180 --- libjava/java/lang/reflect/natMethod.cc | 65 +++++++++++++++++++--------------- 1 file changed, 36 insertions(+), 29 deletions(-) (limited to 'libjava/java/lang/reflect/natMethod.cc') diff --git a/libjava/java/lang/reflect/natMethod.cc b/libjava/java/lang/reflect/natMethod.cc index e11e5c36..d4cbb72 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 -- cgit v1.1