Just keep T_INTEGER.
lexer_token.number.number = identify_string(string, size);
lexer_token.kind =
- is_float ? T_FLOATINGPOINT_HEXADECIMAL : T_INTEGER_HEXADECIMAL;
+ is_float ? T_FLOATINGPOINT_HEXADECIMAL : T_INTEGER;
if (!has_digits) {
errorf(&lexer_token.base.source_position, "invalid number literal '%S'", &lexer_token.number.number);
char *string = obstack_finish(&symbol_obstack);
lexer_token.number.number = identify_string(string, size);
- /* is it an octal number? */
if (is_float) {
lexer_token.kind = T_FLOATINGPOINT;
- } else if (string[0] == '0') {
- lexer_token.kind = T_INTEGER_OCTAL;
-
- /* check for invalid octal digits */
- for (size_t i= 0; i < size; ++i) {
- char t = string[i];
- if (t >= '8')
- errorf(&lexer_token.base.source_position,
- "invalid digit '%c' in octal number", t);
- }
} else {
lexer_token.kind = T_INTEGER;
+
+ if (string[0] == '0') {
+ /* check for invalid octal digits */
+ for (size_t i= 0; i < size; ++i) {
+ char t = string[i];
+ if (t >= '8')
+ errorf(&lexer_token.base.source_position, "invalid digit '%c' in octal number", t);
+ }
+ }
}
if (!has_digits) {
case T_FLOATINGPOINT: \
case T_FLOATINGPOINT_HEXADECIMAL: \
case T_INTEGER: \
- case T_INTEGER_HEXADECIMAL: \
- case T_INTEGER_OCTAL: \
case T_MINUSMINUS: \
case T_PLUSPLUS: \
case T_STRING_LITERAL: \
case T_FLOATINGPOINT:
case T_FLOATINGPOINT_HEXADECIMAL:
case T_INTEGER:
- case T_INTEGER_HEXADECIMAL:
- case T_INTEGER_OCTAL:
case T_STRING_LITERAL:
case T_WIDE_CHARACTER_CONSTANT:
case T_WIDE_STRING_LITERAL:
switch (token.kind) {
case T_INTEGER:
- case T_INTEGER_OCTAL:
- case T_INTEGER_HEXADECIMAL:
kind = EXPR_LITERAL_INTEGER;
check_integer_suffix();
type = type_int;
case T_false: return parse_boolean_literal(false);
case T_true: return parse_boolean_literal(true);
case T_INTEGER:
- case T_INTEGER_OCTAL:
- case T_INTEGER_HEXADECIMAL:
case T_FLOATINGPOINT:
case T_FLOATINGPOINT_HEXADECIMAL: return parse_number_literal();
case T_CHARACTER_CONSTANT: return parse_character_constant();
fprintf(f, "identifier '%s'", token->identifier.symbol->string);
break;
case T_INTEGER:
- case T_INTEGER_OCTAL:
- case T_INTEGER_HEXADECIMAL:
case T_FLOATINGPOINT:
case T_FLOATINGPOINT_HEXADECIMAL:
print_token_kind(f, (token_kind_t)token->kind);
TS(IDENTIFIER, "identifier",)
TS(INTEGER, "integer number",)
-TS(INTEGER_OCTAL, "octal integer number",)
-TS(INTEGER_HEXADECIMAL, "hexadecimal integer number",)
TS(FLOATINGPOINT, "floatingpoint number",)
TS(FLOATINGPOINT_HEXADECIMAL, "hexadecimal floatingpoint number",)
TS(CHARACTER_CONSTANT, "character constant",)