aboutsummaryrefslogtreecommitdiff
path: root/src/tokenizer.cpp
diff options
context:
space:
mode:
authorGinger Bill <bill@gingerbill.org>2016-09-17 11:39:08 +0100
committerGinger Bill <bill@gingerbill.org>2016-09-17 11:40:00 +0100
commit67694c0df07c758effbc7dcb10c76a2b2bffe5d0 (patch)
treed1b0d26cfbb81fba0b16410856dcf21a3f274a69 /src/tokenizer.cpp
parenteb424bb315a880bf52fe843733445dfb502c1525 (diff)
VarDecl and ConstDecl split; error, warning, et al. now global
Diffstat (limited to 'src/tokenizer.cpp')
-rw-r--r--src/tokenizer.cpp51
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);
+ }
}