]> granicus.if.org Git - flex/commitdiff
scanner: More compatible flex integer type definitions.
authorExplorer09 <explorer09@gmail.com>
Thu, 8 Mar 2018 02:00:33 +0000 (10:00 +0800)
committerWill Estes <westes575@gmail.com>
Thu, 8 Mar 2018 21:00:24 +0000 (16:00 -0500)
Visual C++ 2010 does not define __STDC_VERSION__, and (before Visual
C++ 2013) has <stdint.h> and not <inttypes.h>.

ANSI/ISO C only requires at least 16 bits for int type (not 32 bits as
required by POSIX since SUSv2), so check the bit length before the
typedef.

Signed-off-by: Kang-Che Sung <explorer09@gmail.com>
src/flexint_shared.h

index 569f0730b01207fdddb212daa4ac756690fbf08a..5532813bf510d1882b92693676cb17dbf9d03259 100644 (file)
@@ -6,6 +6,17 @@
  * and not the latter.
  */
 #include <inttypes.h>
+# define YYFLEX_USE_STDINT
+#else
+# if defined(_MSC_VER) && _MSC_VER >= 1600
+/* Visual C++ 2010 does not define __STDC_VERSION__ and has <stdint.h> but not
+ * <inttypes.h>.
+ */
+#include <stdint.h>
+#  define YYFLEX_USE_STDINT
+# endif
+#endif
+#ifdef YYFLEX_USE_STDINT
 typedef int8_t flex_int8_t;
 typedef uint8_t flex_uint8_t;
 typedef int16_t flex_int16_t;
@@ -13,10 +24,23 @@ typedef uint16_t flex_uint16_t;
 typedef int32_t flex_int32_t;
 typedef uint32_t flex_uint32_t;
 #else
-typedef signed char flex_int8_t;
-typedef short int flex_int16_t;
-typedef int flex_int32_t;
 typedef unsigned char flex_uint8_t;
+typedef short int flex_int16_t;
 typedef unsigned short int flex_uint16_t;
+# ifdef __STDC__
+typedef signed char flex_int8_t;
+/* ISO C only requires at least 16 bits for int. */
+#include <limits.h>
+#  if UINT_MAX >= 4294967295
+#   define YYFLEX_INT32_DEFINED
+typedef int flex_int32_t;
 typedef unsigned int flex_uint32_t;
-#endif /* ! C99 */
+#  endif
+# else
+typedef char flex_int8_t;
+# endif
+# ifndef YYFLEX_INT32_DEFINED
+typedef long int flex_int32_t;
+typedef unsigned long int flex_uint32_t;
+# endif
+#endif