From ee0f311c10ad6c2270213b4a84f0df98300e4675 Mon Sep 17 00:00:00 2001 From: Rangi42 Date: Mon, 21 Jul 2025 19:49:08 -0400 Subject: [PATCH] Make `nbErrors` not `extern` --- include/asm/warning.hpp | 5 +++-- src/asm/main.cpp | 9 +++------ src/asm/warning.cpp | 13 +++++++++++++ 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/include/asm/warning.hpp b/include/asm/warning.hpp index 6862aeed..b479c983 100644 --- a/include/asm/warning.hpp +++ b/include/asm/warning.hpp @@ -7,8 +7,6 @@ #include "diagnostics.hpp" -extern unsigned int nbErrors; - enum WarningLevel { LEVEL_DEFAULT, // Warnings that are enabled by default LEVEL_ALL, // Warnings that probably indicate an error @@ -82,4 +80,7 @@ void error(char const *fmt, ...); // once. void error(std::function callback); +void forceError(); +void requireZeroErrors(); + #endif // RGBDS_ASM_WARNING_HPP diff --git a/src/asm/main.cpp b/src/asm/main.cpp index 1ca9ce96..35188150 100644 --- a/src/asm/main.cpp +++ b/src/asm/main.cpp @@ -418,8 +418,8 @@ int main(int argc, char *argv[]) { fstk_Init(mainFileName, maxDepth); // Perform parse (`yy::parser` is auto-generated from `parser.y`) - if (yy::parser parser; parser.parse() != 0 && nbErrors == 0) { - nbErrors = 1; + if (yy::parser parser; parser.parse() != 0) { + forceError(); } if (!fstk_FailedOnMissingInclude()) { @@ -432,10 +432,7 @@ int main(int argc, char *argv[]) { sect_CheckStack(); } - if (nbErrors != 0) { - fprintf(stderr, "Assembly aborted with %u error%s!\n", nbErrors, nbErrors == 1 ? "" : "s"); - exit(1); - } + requireZeroErrors(); // If parse aborted due to missing an include, and `-MG` was given, exit normally if (fstk_FailedOnMissingInclude()) { diff --git a/src/asm/warning.cpp b/src/asm/warning.cpp index afdb3e48..77b460fc 100644 --- a/src/asm/warning.cpp +++ b/src/asm/warning.cpp @@ -125,6 +125,19 @@ void fatal(char const *fmt, ...) { exit(1); } +void forceError() { + if (nbErrors == 0) { + nbErrors = 1; + } +} + +void requireZeroErrors() { + if (nbErrors != 0) { + fprintf(stderr, "Assembly aborted with %u error%s!\n", nbErrors, nbErrors == 1 ? "" : "s"); + exit(1); + } +} + void warning(WarningID id, char const *fmt, ...) { char const *flag = warnings.warningFlags[id].name; va_list args;