--- a/ExternalLibraryFunction.st Tue Jun 02 10:33:57 2020 +0100
+++ b/ExternalLibraryFunction.st Thu Jun 04 10:28:29 2020 +0100
@@ -27,6 +27,8 @@
!ExternalLibraryFunction primitiveDefinitions!
%{
+#include <stdint.h>
+
#include "stxOSDefs.h"
#define VERBOSE
@@ -1204,9 +1206,21 @@
int __numFloatOrDoubleArgs = 0;
union u {
- INT iVal;
+ int iVal;
+ int8_t i8Val;
+ int16_t i16Val;
+ int32_t i32Val;
+ int64_t i64Val;
+
+ unsigned int uVal;
+ uint8_t u8Val;
+ uint16_t u16Val;
+ uint32_t u32Val;
+ uint64_t u64Val;
+
float fVal;
double dVal;
+
void *pointerVal;
# if 0 && defined(HAS_LONGLONG)
long long longLongVal;
@@ -2559,25 +2573,26 @@
printf("retval is %"_ld_" (0x%"_lx_")\n", (INT)(__returnValue.iVal), (INT)(__returnValue.iVal));
})
- if ((returnTypeSymbol == @symbol(int))
- || (returnTypeSymbol == @symbol(sint))
- || (returnTypeSymbol == @symbol(sint8))
- || (returnTypeSymbol == @symbol(sint16))
- || (returnTypeSymbol == @symbol(sint32))) {
- DEBUGCODE_IF( @global(Verbose), {
- printf("return int: %"_lx_"\n", (INT)(__returnValue.iVal));
- })
- RETURN ( __MKINT(__returnValue.iVal) );
+ if ((returnTypeSymbol == @symbol(int)) || (returnTypeSymbol == @symbol(sint))) {
+ RETURN ( __MKINT((INT)__returnValue.iVal) );
+ } else if (returnTypeSymbol == @symbol(sint8)) {
+ RETURN ( __MKINT((INT)__returnValue.i8Val) );
+ } else if (returnTypeSymbol == @symbol(sint16)) {
+ RETURN ( __MKINT((INT)__returnValue.i16Val) );
+ } else if (returnTypeSymbol == @symbol(sint32)) {
+ RETURN ( __MKINT((INT)__returnValue.i32Val) );
}
- if ((returnTypeSymbol == @symbol(uint))
- || (returnTypeSymbol == @symbol(uint8))
- || (returnTypeSymbol == @symbol(uint16))
- || (returnTypeSymbol == @symbol(uint32))) {
- DEBUGCODE_IF( @global(Verbose), {
- printf("return uint: %"_lx_"\n", (INT)(__returnValue.iVal));
- })
- RETURN ( __MKUINT(__returnValue.iVal) );
- }
+
+ if (returnTypeSymbol == @symbol(uint)) {
+ RETURN ( __MKUINT((unsigned INT)__returnValue.uVal) );
+ } else if (returnTypeSymbol == @symbol(uint8)) {
+ RETURN ( __MKUINT((unsigned INT)__returnValue.u8Val) );
+ } else if (returnTypeSymbol == @symbol(uint16)) {
+ RETURN ( __MKUINT((unsigned INT)__returnValue.u16Val) );
+ } else if (returnTypeSymbol == @symbol(uint32)) {
+ RETURN ( __MKUINT((unsigned INT)__returnValue.u32Val) );
+ }
+
if (returnTypeSymbol == @symbol(bool)) {
RETURN ( __returnValue.iVal ? true : false );
}