ExternalLibraryFunction.st
branchjv
changeset 25390 a9603ce7b17e
parent 25159 a79acbf33772
child 25391 cad52f81f60c
--- 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 );
     }