diff --git a/config/watcom.h b/config/watcom.h index b43b7fb4..029a36f8 100644 --- a/config/watcom.h +++ b/config/watcom.h @@ -69,5 +69,6 @@ #define HAVE_UNISTD_H 1 #define HAVE_VSNPRINTF 1 #define STDC_HEADERS 1 +#define inline __inline #endif /* NASM_CONFIG_WATCOM_H */ diff --git a/include/compiler.h b/include/compiler.h index 061b3441..4cecf9ce 100644 --- a/include/compiler.h +++ b/include/compiler.h @@ -81,6 +81,7 @@ #include #include #include +#include #ifdef HAVE_SYS_TYPES_H # include @@ -248,4 +249,20 @@ char *strsep(char **, const char *); # define pure_func #endif +/* Watcom doesn't handle switch statements with 64-bit types, hack around it */ +#ifdef __WATCOM__ +# define BOGUS_CASE 0x76543210 + +static inline unsigned int watcom_switch_hack(uint64_t x) +{ + if (x > UINT_MAX) + return BOGUS_CASE; + else + return (unsigned int)x; +} + +# define switch(x) switch(watcom_switch_hack(x)) +# define default case BOGUS_CASE: default +#endif + #endif /* NASM_COMPILER_H */