From 01313eec7f11d5071996265bb654d92d4f598052 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 23 Feb 2021 14:59:28 +0000 Subject: Add flags `-ignore-warnings` and `-warnings-as-errors` --- src/tokenizer.cpp | 65 ++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 40 insertions(+), 25 deletions(-) (limited to 'src/tokenizer.cpp') diff --git a/src/tokenizer.cpp b/src/tokenizer.cpp index 66e42e737..3ef1e19fe 100644 --- a/src/tokenizer.cpp +++ b/src/tokenizer.cpp @@ -316,6 +316,10 @@ ERROR_OUT_PROC(default_error_out_va) { ErrorOutProc *error_out_va = default_error_out_va; +// NOTE: defined in build_settings.cpp +bool global_warnings_as_errors(void); +bool global_ignore_warnings(void); + void error_out(char const *fmt, ...) { va_list va; va_start(va, fmt); @@ -323,22 +327,6 @@ void error_out(char const *fmt, ...) { va_end(va); } -void warning_va(Token token, char const *fmt, va_list va) { - gb_mutex_lock(&global_error_collector.mutex); - global_error_collector.warning_count++; - // NOTE(bill): Duplicate error, skip it - if (token.pos.line == 0) { - error_out("Warning: %s\n", gb_bprintf_va(fmt, va)); - } else if (global_error_collector.prev != token.pos) { - global_error_collector.prev = token.pos; - error_out("%.*s(%td:%td) Warning: %s\n", - LIT(token.pos.file), token.pos.line, token.pos.column, - gb_bprintf_va(fmt, va)); - } - - gb_mutex_unlock(&global_error_collector.mutex); -} - void error_va(Token token, char const *fmt, va_list va) { gb_mutex_lock(&global_error_collector.mutex); @@ -358,6 +346,28 @@ void error_va(Token token, char const *fmt, va_list va) { } } +void warning_va(Token token, char const *fmt, va_list va) { + if (global_warnings_as_errors()) { + error_va(token, fmt, va); + return; + } + gb_mutex_lock(&global_error_collector.mutex); + global_error_collector.warning_count++; + if (!global_ignore_warnings()) { + // NOTE(bill): Duplicate error, skip it + if (token.pos.line == 0) { + error_out("Warning: %s\n", gb_bprintf_va(fmt, va)); + } else if (global_error_collector.prev != token.pos) { + global_error_collector.prev = token.pos; + error_out("%.*s(%td:%td) Warning: %s\n", + LIT(token.pos.file), token.pos.line, token.pos.column, + gb_bprintf_va(fmt, va)); + } + } + gb_mutex_unlock(&global_error_collector.mutex); +} + + void error_line_va(char const *fmt, va_list va) { gb_mutex_lock(&global_error_collector.mutex); error_out_va(fmt, va); @@ -403,18 +413,23 @@ void syntax_error_va(Token token, char const *fmt, va_list va) { } void syntax_warning_va(Token token, char const *fmt, va_list va) { + if (global_warnings_as_errors()) { + syntax_error_va(token, fmt, va); + return; + } gb_mutex_lock(&global_error_collector.mutex); global_error_collector.warning_count++; - // NOTE(bill): Duplicate error, skip it - if (global_error_collector.prev != token.pos) { - global_error_collector.prev = token.pos; - error_out("%.*s(%td:%td) Syntax Warning: %s\n", - LIT(token.pos.file), token.pos.line, token.pos.column, - gb_bprintf_va(fmt, va)); - } else if (token.pos.line == 0) { - error_out("Warning: %s\n", gb_bprintf_va(fmt, va)); + if (!global_ignore_warnings()) { + // NOTE(bill): Duplicate error, skip it + if (global_error_collector.prev != token.pos) { + global_error_collector.prev = token.pos; + error_out("%.*s(%td:%td) Syntax Warning: %s\n", + LIT(token.pos.file), token.pos.line, token.pos.column, + gb_bprintf_va(fmt, va)); + } else if (token.pos.line == 0) { + error_out("Warning: %s\n", gb_bprintf_va(fmt, va)); + } } - gb_mutex_unlock(&global_error_collector.mutex); } -- cgit v1.2.3