}
char *endptr;
- int value = strtol(string, &endptr, 16);
+ lexer_token.type = T_INTEGER;
+ lexer_token.v.intvalue = strtoll(string, &endptr, 16);
if(*endptr != '\0') {
parse_error("hex number literal too long");
}
- lexer_token.type = T_INTEGER;
- lexer_token.v.intvalue = value;
-
- parse_integer_suffix();
obstack_free(&symbol_obstack, string);
}
char *string = obstack_finish(&symbol_obstack);
char *endptr;
- int value = strtol(string, &endptr, 8);
+ lexer_token.type = T_INTEGER;
+ lexer_token.v.intvalue = strtoll(string, &endptr, 8);
if(*endptr != '\0') {
parse_error("octal number literal too long");
}
- lexer_token.type = T_INTEGER;
- lexer_token.v.intvalue = value;
-
- parse_integer_suffix();
obstack_free(&symbol_obstack, string);
+ parse_integer_suffix();
}
static void parse_number_dec(void)
char *endptr;
if(is_float) {
lexer_token.type = T_FLOATINGPOINT;
- lexer_token.v.floatvalue = strtod(string, &endptr);
+ lexer_token.v.floatvalue = strtold(string, &endptr);
if(*endptr != '\0') {
parse_error("invalid number literal");
parse_floating_suffix();
} else {
lexer_token.type = T_INTEGER;
- lexer_token.v.intvalue = strtol(string, &endptr, 10);
+ lexer_token.v.intvalue = strtoll(string, &endptr, 10);
if(*endptr != '\0') {
parse_error("invalid number literal");
fprintf(f, "symbol '%s'", token->v.symbol->string);
break;
case T_INTEGER:
- fprintf(f, "integer number %d", token->v.intvalue);
+ fprintf(f, "integer number %lld", token->v.intvalue);
break;
case T_FLOATINGPOINT:
- fprintf(f, "floatingpointer number %f", token->v.floatvalue);
+ fprintf(f, "floatingpointer number %LF", token->v.floatvalue);
break;
case T_STRING_LITERAL:
fprintf(f, "string '%s'", token->v.string);