Improve tokenizing wrong number literals

This commit is contained in:
gingerBill
2024-06-28 09:16:01 +01:00
parent 5a9698e8cb
commit 862a04376f
2 changed files with 12 additions and 1 deletions
+11 -1
View File
@@ -718,7 +718,17 @@ gb_internal ExactValue exact_value_from_token(AstFile *f, Token const &token) {
} }
ExactValue value = exact_value_from_basic_literal(token.kind, s); ExactValue value = exact_value_from_basic_literal(token.kind, s);
if (value.kind == ExactValue_Invalid) { if (value.kind == ExactValue_Invalid) {
syntax_error(token, "Invalid token literal"); switch (token.kind) {
case Token_Integer:
syntax_error(token, "Invalid integer literal");
break;
case Token_Float:
syntax_error(token, "Invalid float literal");
break;
default:
syntax_error(token, "Invalid token literal");
break;
}
} }
return value; return value;
} }
+1
View File
@@ -433,6 +433,7 @@ gb_internal gb_inline i32 digit_value(Rune r) {
} }
gb_internal gb_inline void scan_mantissa(Tokenizer *t, i32 base) { gb_internal gb_inline void scan_mantissa(Tokenizer *t, i32 base) {
base = 16; // always check for any possible letter
while (digit_value(t->curr_rune) < base || t->curr_rune == '_') { while (digit_value(t->curr_rune) < base || t->curr_rune == '_') {
advance_to_next_rune(t); advance_to_next_rune(t);
} }