From d87b1ed22a43c22b62c3ea19eb557cd808561527 Mon Sep 17 00:00:00 2001 From: Rangi42 Date: Sat, 24 Feb 2024 19:05:29 -0500 Subject: [PATCH] Refactor some redundant error/warning-printing code --- src/asm/warning.cpp | 10 ++++---- src/link/main.cpp | 57 +++++++++++++++++++++------------------------ 2 files changed, 32 insertions(+), 35 deletions(-) diff --git a/src/asm/warning.cpp b/src/asm/warning.cpp index 60415eb8..73a06aca 100644 --- a/src/asm/warning.cpp +++ b/src/asm/warning.cpp @@ -331,8 +331,10 @@ void printDiag(char const *fmt, va_list args, char const *type, char const *flagfmt, char const *flag) { fputs(type, stderr); + fputs(": ", stderr); fstk_DumpCurrent(); fprintf(stderr, flagfmt, flag); + fputs("\n ", stderr); vfprintf(stderr, fmt, args); lexer_DumpStringExpansions(); } @@ -342,7 +344,7 @@ void error(char const *fmt, ...) va_list args; va_start(args, fmt); - printDiag(fmt, args, "error: ", ":\n ", NULL); + printDiag(fmt, args, "error", ":", NULL); va_end(args); // This intentionally makes 0 act as "unlimited" (or at least "limited to sizeof(unsigned)") @@ -357,7 +359,7 @@ void error(char const *fmt, ...) va_list args; va_start(args, fmt); - printDiag(fmt, args, "FATAL: ", ":\n ", NULL); + printDiag(fmt, args, "FATAL", ":", NULL); va_end(args); exit(1); @@ -375,11 +377,11 @@ void warning(enum WarningID id, char const *fmt, ...) break; case WARNING_ENABLED: - printDiag(fmt, args, "warning: ", ": [-W%s]\n ", flag); + printDiag(fmt, args, "warning", ": [-W%s]", flag); break; case WARNING_ERROR: - printDiag(fmt, args, "error: ", ": [-Werror=%s]\n ", flag); + printDiag(fmt, args, "error", ": [-Werror=%s]", flag); break; case WARNING_DEFAULT: diff --git a/src/link/main.cpp b/src/link/main.cpp index 3129f427..e74ac225 100644 --- a/src/link/main.cpp +++ b/src/link/main.cpp @@ -72,34 +72,35 @@ char const *dumpFileStack(struct FileStackNode const *node) return lastName; } -void warning(struct FileStackNode const *where, uint32_t lineNo, char const *fmt, ...) +void printDiag(char const *fmt, va_list args, char const *type, + struct FileStackNode const *where, uint32_t lineNo) { - va_list ap; - - fputs("warning: ", stderr); + fputs(type, stderr); + fputs(": ", stderr); if (where) { dumpFileStack(where); fprintf(stderr, "(%" PRIu32 "): ", lineNo); } - va_start(ap, fmt); - vfprintf(stderr, fmt, ap); - va_end(ap); + vfprintf(stderr, fmt, args); putc('\n', stderr); } +void warning(struct FileStackNode const *where, uint32_t lineNo, char const *fmt, ...) +{ + va_list args; + + va_start(args, fmt); + printDiag(fmt, args, "warning", where, lineNo); + va_end(args); +} + void error(struct FileStackNode const *where, uint32_t lineNo, char const *fmt, ...) { - va_list ap; + va_list args; - fputs("error: ", stderr); - if (where) { - dumpFileStack(where); - fprintf(stderr, "(%" PRIu32 "): ", lineNo); - } - va_start(ap, fmt); - vfprintf(stderr, fmt, ap); - va_end(ap); - putc('\n', stderr); + va_start(args, fmt); + printDiag(fmt, args, "error", where, lineNo); + va_end(args); if (nbErrors != UINT32_MAX) nbErrors++; @@ -107,12 +108,12 @@ void error(struct FileStackNode const *where, uint32_t lineNo, char const *fmt, void argErr(char flag, char const *fmt, ...) { - va_list ap; + va_list args; fprintf(stderr, "error: Invalid argument for option '%c': ", flag); - va_start(ap, fmt); - vfprintf(stderr, fmt, ap); - va_end(ap); + va_start(args, fmt); + vfprintf(stderr, fmt, args); + va_end(args); putc('\n', stderr); if (nbErrors != UINT32_MAX) @@ -121,17 +122,11 @@ void argErr(char flag, char const *fmt, ...) [[noreturn]] void fatal(struct FileStackNode const *where, uint32_t lineNo, char const *fmt, ...) { - va_list ap; + va_list args; - fputs("FATAL: ", stderr); - if (where) { - dumpFileStack(where); - fprintf(stderr, "(%" PRIu32 "): ", lineNo); - } - va_start(ap, fmt); - vfprintf(stderr, fmt, ap); - va_end(ap); - putc('\n', stderr); + va_start(args, fmt); + printDiag(fmt, args, "FATAL", where, lineNo); + va_end(args); if (nbErrors != UINT32_MAX) nbErrors++;