- const char *endptr;
- lexer_token.type = T_INTEGER;
- lexer_token.v.intvalue = parse_int_string(string, &endptr, 16);
- if(*endptr != '\0') {
- parse_error("hex number literal too long");
+ if (is_float) {
+ char *endptr;
+ lexer_token.type = T_FLOATINGPOINT;
+ lexer_token.v.floatvalue = strtold(string, &endptr);
+
+ if(*endptr != '\0') {
+ parse_error("invalid hex float literal");
+ }
+
+ parse_floating_suffix();
+ } else {
+ const char *endptr;
+ lexer_token.type = T_INTEGER;
+ lexer_token.v.intvalue = parse_int_string(string + 2, &endptr, 16);
+ if(*endptr != '\0') {
+ parse_error("hex number literal too long");
+ }
+ parse_integer_suffix(true);