mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-04 22:58:46 +00:00
Improve a tokenizer error message; Add extra tokens for in and notin for fun!
This commit is contained in:
+2
-1
@@ -4539,6 +4539,7 @@ ParseFileError process_imported_file(Parser *p, ImportedFile imported_file) {
|
|||||||
|
|
||||||
TokenPos err_pos = {0};
|
TokenPos err_pos = {0};
|
||||||
ParseFileError err = init_ast_file(file, fi->fullpath, &err_pos);
|
ParseFileError err = init_ast_file(file, fi->fullpath, &err_pos);
|
||||||
|
err_pos.file = fi->fullpath;
|
||||||
|
|
||||||
if (err != ParseFile_None) {
|
if (err != ParseFile_None) {
|
||||||
if (err == ParseFile_EmptyFile) {
|
if (err == ParseFile_EmptyFile) {
|
||||||
@@ -4563,7 +4564,7 @@ ParseFileError process_imported_file(Parser *p, ImportedFile imported_file) {
|
|||||||
error(pos, "Failed to parse file: %.*s; file cannot be found ('%.*s')", LIT(fi->name), LIT(fi->fullpath));
|
error(pos, "Failed to parse file: %.*s; file cannot be found ('%.*s')", LIT(fi->name), LIT(fi->fullpath));
|
||||||
break;
|
break;
|
||||||
case ParseFile_InvalidToken:
|
case ParseFile_InvalidToken:
|
||||||
error(pos, "Failed to parse file: %.*s; invalid token found in file at (%td:%td)", LIT(fi->name), err_pos.line, err_pos.column);
|
error(err_pos, "Failed to parse file: %.*s; invalid token found in file", LIT(fi->name));
|
||||||
break;
|
break;
|
||||||
case ParseFile_EmptyFile:
|
case ParseFile_EmptyFile:
|
||||||
error(pos, "Failed to parse file: %.*s; file contains no tokens", LIT(fi->name));
|
error(pos, "Failed to parse file: %.*s; file contains no tokens", LIT(fi->name));
|
||||||
|
|||||||
+13
-14
@@ -927,13 +927,15 @@ Token tokenizer_get_token(Tokenizer *t) {
|
|||||||
case '}': token.kind = Token_CloseBrace; break;
|
case '}': token.kind = Token_CloseBrace; break;
|
||||||
case '\\': token.kind = Token_BackSlash; break;
|
case '\\': token.kind = Token_BackSlash; break;
|
||||||
|
|
||||||
case 0x2260: token.kind = Token_NotEq; break; // '≠'
|
case 0x2260: token.kind = Token_NotEq; break; // '≠'
|
||||||
case 0x2264: token.kind = Token_LtEq; break; // '≤'
|
case 0x2264: token.kind = Token_LtEq; break; // '≤'
|
||||||
case 0x2265: token.kind = Token_GtEq; break; // '≥'
|
case 0x2265: token.kind = Token_GtEq; break; // '≥'
|
||||||
|
case 0x2208: token.kind = Token_in; break; // '∈'
|
||||||
|
case 0x2209: token.kind = Token_notin; break; // '∉'
|
||||||
|
|
||||||
case '%': token.kind = token_kind_dub_eq(t, '%', Token_Mod, Token_ModEq, Token_ModMod, Token_ModModEq); break;
|
case '%': token.kind = token_kind_dub_eq(t, '%', Token_Mod, Token_ModEq, Token_ModMod, Token_ModModEq); break;
|
||||||
|
|
||||||
case '*': token.kind = token_kind_variant2(t, Token_Mul, Token_MulEq); break;
|
case '*': token.kind = token_kind_variant2(t, Token_Mul, Token_MulEq); break;
|
||||||
case '=':
|
case '=':
|
||||||
token.kind = Token_Eq;
|
token.kind = Token_Eq;
|
||||||
if (t->curr_rune == '>') {
|
if (t->curr_rune == '>') {
|
||||||
@@ -944,21 +946,18 @@ Token tokenizer_get_token(Tokenizer *t) {
|
|||||||
token.kind = Token_CmpEq;
|
token.kind = Token_CmpEq;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case '~': token.kind = token_kind_variant2(t, Token_Xor, Token_XorEq); break;
|
case '~': token.kind = token_kind_variant2(t, Token_Xor, Token_XorEq); break;
|
||||||
case '!': token.kind = token_kind_variant2(t, Token_Not, Token_NotEq); break;
|
case '!': token.kind = token_kind_variant2(t, Token_Not, Token_NotEq); break;
|
||||||
case '+': token.kind = token_kind_variant2(t, Token_Add, Token_AddEq); break;
|
case '+': token.kind = token_kind_variant2(t, Token_Add, Token_AddEq); break;
|
||||||
case '-':
|
case '-':
|
||||||
token.kind = Token_Sub;
|
token.kind = Token_Sub;
|
||||||
if (t->curr_rune == '=') {
|
if (t->curr_rune == '=') {
|
||||||
advance_to_next_rune(t);
|
advance_to_next_rune(t);
|
||||||
token.kind = Token_SubEq;
|
token.kind = Token_SubEq;
|
||||||
} else if (t->curr_rune == '-') {
|
} else if (t->curr_rune == '-' && t->read_curr[0] == '-') {
|
||||||
advance_to_next_rune(t);
|
advance_to_next_rune(t);
|
||||||
token.kind = Token_Invalid;
|
advance_to_next_rune(t);
|
||||||
if (t->curr_rune == '-') {
|
token.kind = Token_Undef;
|
||||||
advance_to_next_rune(t);
|
|
||||||
token.kind = Token_Undef;
|
|
||||||
}
|
|
||||||
} else if (t->curr_rune == '>') {
|
} else if (t->curr_rune == '>') {
|
||||||
advance_to_next_rune(t);
|
advance_to_next_rune(t);
|
||||||
token.kind = Token_ArrowRight;
|
token.kind = Token_ArrowRight;
|
||||||
|
|||||||
Reference in New Issue
Block a user