diff options
| author | Ginger Bill <bill@gingerbill.org> | 2016-09-17 11:39:08 +0100 |
|---|---|---|
| committer | Ginger Bill <bill@gingerbill.org> | 2016-09-17 11:40:00 +0100 |
| commit | 67694c0df07c758effbc7dcb10c76a2b2bffe5d0 (patch) | |
| tree | d1b0d26cfbb81fba0b16410856dcf21a3f274a69 /src/tokenizer.cpp | |
| parent | eb424bb315a880bf52fe843733445dfb502c1525 (diff) | |
VarDecl and ConstDecl split; error, warning, et al. now global
Diffstat (limited to 'src/tokenizer.cpp')
| -rw-r--r-- | src/tokenizer.cpp | 51 |
1 files changed, 39 insertions, 12 deletions
diff --git a/src/tokenizer.cpp b/src/tokenizer.cpp index 12b394a01..6f645b7a6 100644 --- a/src/tokenizer.cpp +++ b/src/tokenizer.cpp @@ -155,31 +155,58 @@ Token empty_token = {Token_Invalid}; struct ErrorCollector { TokenPos prev; i64 count; + i64 warning_count; }; -gb_no_inline void error(ErrorCollector *ec, Token token, char *fmt, ...) { - ec->count++; +gb_global ErrorCollector global_error_collector; + + +void warning(Token token, char *fmt, ...) { + global_error_collector.warning_count++; // NOTE(bill): Duplicate error, skip it - if (!token_pos_are_equal(ec->prev, token.pos)) { - ec->prev = token.pos; + if (!token_pos_are_equal(global_error_collector.prev, token.pos)) { + va_list va; + + global_error_collector.prev = token.pos; + va_start(va, fmt); + gb_printf_err("%.*s(%td:%td) Warning: %s\n", + LIT(token.pos.file), token.pos.line, token.pos.column, + gb_bprintf_va(fmt, va)); + va_end(va); + } +} + +void error(Token token, char *fmt, ...) { + global_error_collector.count++; + // NOTE(bill): Duplicate error, skip it + if (!token_pos_are_equal(global_error_collector.prev, token.pos)) { va_list va; + + global_error_collector.prev = token.pos; + va_start(va, fmt); gb_printf_err("%.*s(%td:%td) %s\n", LIT(token.pos.file), token.pos.line, token.pos.column, gb_bprintf_va(fmt, va)); va_end(va); - } } -gb_no_inline void warning(Token token, char *fmt, ...) { - va_list va; - va_start(va, fmt); - gb_printf_err("%.*s(%td:%td) Warning: %s\n", - LIT(token.pos.file), token.pos.line, token.pos.column, - gb_bprintf_va(fmt, va)); - va_end(va); +void syntax_error(Token token, char *fmt, ...) { + global_error_collector.count++; + // NOTE(bill): Duplicate error, skip it + if (!token_pos_are_equal(global_error_collector.prev, token.pos)) { + va_list va; + + global_error_collector.prev = token.pos; + + va_start(va, fmt); + gb_printf_err("%.*s(%td:%td) Syntax Error: %s\n", + LIT(token.pos.file), token.pos.line, token.pos.column, + gb_bprintf_va(fmt, va)); + va_end(va); + } } |