From 67694c0df07c758effbc7dcb10c76a2b2bffe5d0 Mon Sep 17 00:00:00 2001 From: Ginger Bill Date: Sat, 17 Sep 2016 11:39:08 +0100 Subject: VarDecl and ConstDecl split; error, warning, et al. now global --- src/tokenizer.cpp | 51 +++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 39 insertions(+), 12 deletions(-) (limited to 'src/tokenizer.cpp') 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); + } } -- cgit v1.2.3