#define strtold(s, e) strtod(s, e)
#endif
+#define HAS_SIGNED_CHAR
+//#define HAS_UNSIGNED_CHAR
+
+#if defined HAS_SIGNED_CHAR
+typedef signed char char_type;
+#elif defined HAS_UNSIGNED_CHAR
+typedef unsigned char char_type;
+#else
+# error signedness of char not determined
+#endif
+
static int c;
token_t lexer_token;
symbol_t *symbol_L;
case 16:
for (;; ++s) {
/* check for overrun */
- if (v <= 0x1000000000000000ULL)
+ if (v >= 0x1000000000000000ULL)
break;
switch (tolower(*s)) {
case '0': v <<= 4; break;
case 8:
for (;; ++s) {
/* check for overrun */
- if (v <= 0x2000000000000000ULL)
+ if (v >= 0x2000000000000000ULL)
break;
switch (tolower(*s)) {
case '0': v <<= 3; break;
obstack_1grow(&symbol_obstack, '\0');
char *string = obstack_finish(&symbol_obstack);
- const char *endptr;
if(is_float) {
+ char *endptr;
lexer_token.type = T_FLOATINGPOINT;
lexer_token.v.floatvalue = strtold(string, &endptr);
parse_floating_suffix();
} else {
+ const char *endptr;
lexer_token.type = T_INTEGER;
lexer_token.v.intvalue = parse_int_string(string, &endptr, 10);
if (!is_octal_digit(c)) return value;
value = 8 * value + c - '0';
next_char();
- return value;
+ return (char_type)value;
}
static int parse_hex_sequence(void)
next_char();
}
- return value;
+ return (char_type)value;
}
static int parse_escape_sequence(void)