瀏覽代碼

Improve tokenizing wrong number literals

gingerBill 1 年之前
父節點
當前提交
862a04376f
共有 2 個文件被更改,包括 12 次插入1 次删除
  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);
 	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;
 }

+ 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) {
+	base = 16; // always check for any possible letter
 	while (digit_value(t->curr_rune) < base || t->curr_rune == '_') {
 		advance_to_next_rune(t);
 	}