From cb50c403d0b4f4fca5b98239e0e36bf9cd08ba53 Mon Sep 17 00:00:00 2001 From: richard Date: Wed, 15 Jul 1998 12:46:01 +0000 Subject: [PATCH] Rewrote ([-invoke]) to retrieve return values correctly by using mframe_decode_return() git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@2843 72102866-910b-0410-8b05-ffd578937521 --- Source/Invocation.m | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/Source/Invocation.m b/Source/Invocation.m index e2d819953..77bfa2cc8 100644 --- a/Source/Invocation.m +++ b/Source/Invocation.m @@ -624,25 +624,21 @@ my_method_get_next_argument (arglist_t argframe, types_get_size_of_stack_arguments(return_type)); if (return_size) { - if (*return_type == _C_DBL) - /* DBL's are stored in a different place relative to RET. */ - memcpy(return_value, (char*)ret + 2*sizeof(void*), return_size); - else if (*return_type == _C_ID) + if (*return_type == _C_ID) { - if (*(id*)return_value != *(id*)ret) + id old = *(id*)return_value; + + mframe_decode_return(return_type, return_value, ret); + + if (return_retained && (*(id*)return_value != old)) { - if (return_retained) - { - if (*(id*)return_value) - [*(id*)return_value release]; - [*(id*)ret retain]; - } - *(id*)return_value = *(id*)ret; + [old release]; + [*(id*)return_value retain]; } } else { - memcpy(return_value, ret, return_size); + mframe_decode_return(return_type, return_value, ret); } } }