Sfoglia il codice sorgente

Improve tokenizing wrong number literals

gingerBill 1 anno fa
parent
commit
862a04376f
2 ha cambiato i file con 12 aggiunte e 1 eliminazioni
  1. 11 1
      src/parser.cpp
  2. 1 0
      src/tokenizer.cpp

+ 11 - 1
src/parser.cpp

@@ -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 - 0
src/tokenizer.cpp

@@ -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);
 	}
 	}