diff options
| author | Matias Fernandez <matiasfmolinari@gmail.com> | 2023-05-08 23:52:21 -0400 |
|---|---|---|
| committer | Matias Fernandez <matiasfmolinari@gmail.com> | 2023-05-08 23:52:21 -0400 |
| commit | 1ed105205c23910b8f017fa8de09caca29a3781f (patch) | |
| tree | cbeb73d7c8fdac621df9d683acd5868b1c04d371 /src/error.cpp | |
| parent | 46da53ba151b410efb8f4646008e1ebdcfa6ad40 (diff) | |
| parent | 182b269e4642be2e40afbb39f7d8a9ac0a5aeed5 (diff) | |
Merge branch 'master' of https://github.com/matias-eduardo/Odin
Diffstat (limited to 'src/error.cpp')
| -rw-r--r-- | src/error.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/error.cpp b/src/error.cpp index e3e1381f4..6314c43bb 100644 --- a/src/error.cpp +++ b/src/error.cpp @@ -436,6 +436,32 @@ gb_internal void syntax_error_va(TokenPos const &pos, TokenPos end, char const * } } +gb_internal void syntax_error_with_verbose_va(TokenPos const &pos, TokenPos end, char const *fmt, va_list va) { + global_error_collector.count.fetch_add(1); + + mutex_lock(&global_error_collector.mutex); + // NOTE(bill): Duplicate error, skip it + if (pos.line == 0) { + error_out_coloured("Syntax_Error: ", TerminalStyle_Normal, TerminalColour_Red); + error_out_va(fmt, va); + error_out("\n"); + } else if (global_error_collector.prev != pos) { + global_error_collector.prev = pos; + error_out_pos(pos); + if (has_ansi_terminal_colours()) { + error_out_coloured("Syntax_Error: ", TerminalStyle_Normal, TerminalColour_Red); + } + error_out_va(fmt, va); + error_out("\n"); + show_error_on_line(pos, end); + } + mutex_unlock(&global_error_collector.mutex); + if (global_error_collector.count > MAX_ERROR_COLLECTOR_COUNT()) { + gb_exit(1); + } +} + + gb_internal void syntax_warning_va(TokenPos const &pos, TokenPos end, char const *fmt, va_list va) { if (global_warnings_as_errors()) { syntax_error_va(pos, end, fmt, va); @@ -515,6 +541,14 @@ gb_internal void syntax_warning(Token const &token, char const *fmt, ...) { va_end(va); } +gb_internal void syntax_error_with_verbose(TokenPos pos, TokenPos end, char const *fmt, ...) { + va_list va; + va_start(va, fmt); + syntax_error_with_verbose_va(pos, end, fmt, va); + va_end(va); +} + + gb_internal void compiler_error(char const *fmt, ...) { va_list va; |