Refactor some redundant error/warning-printing code

This commit is contained in:
Rangi42
2024-02-24 19:05:29 -05:00
parent 595c066c2a
commit d87b1ed22a
2 changed files with 32 additions and 35 deletions

View File

@@ -331,8 +331,10 @@ void printDiag(char const *fmt, va_list args, char const *type,
char const *flagfmt, char const *flag) char const *flagfmt, char const *flag)
{ {
fputs(type, stderr); fputs(type, stderr);
fputs(": ", stderr);
fstk_DumpCurrent(); fstk_DumpCurrent();
fprintf(stderr, flagfmt, flag); fprintf(stderr, flagfmt, flag);
fputs("\n ", stderr);
vfprintf(stderr, fmt, args); vfprintf(stderr, fmt, args);
lexer_DumpStringExpansions(); lexer_DumpStringExpansions();
} }
@@ -342,7 +344,7 @@ void error(char const *fmt, ...)
va_list args; va_list args;
va_start(args, fmt); va_start(args, fmt);
printDiag(fmt, args, "error: ", ":\n ", NULL); printDiag(fmt, args, "error", ":", NULL);
va_end(args); va_end(args);
// This intentionally makes 0 act as "unlimited" (or at least "limited to sizeof(unsigned)") // 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_list args;
va_start(args, fmt); va_start(args, fmt);
printDiag(fmt, args, "FATAL: ", ":\n ", NULL); printDiag(fmt, args, "FATAL", ":", NULL);
va_end(args); va_end(args);
exit(1); exit(1);
@@ -375,11 +377,11 @@ void warning(enum WarningID id, char const *fmt, ...)
break; break;
case WARNING_ENABLED: case WARNING_ENABLED:
printDiag(fmt, args, "warning: ", ": [-W%s]\n ", flag); printDiag(fmt, args, "warning", ": [-W%s]", flag);
break; break;
case WARNING_ERROR: case WARNING_ERROR:
printDiag(fmt, args, "error: ", ": [-Werror=%s]\n ", flag); printDiag(fmt, args, "error", ": [-Werror=%s]", flag);
break; break;
case WARNING_DEFAULT: case WARNING_DEFAULT:

View File

@@ -72,34 +72,35 @@ char const *dumpFileStack(struct FileStackNode const *node)
return lastName; 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(type, stderr);
fputs(": ", stderr);
fputs("warning: ", stderr);
if (where) { if (where) {
dumpFileStack(where); dumpFileStack(where);
fprintf(stderr, "(%" PRIu32 "): ", lineNo); fprintf(stderr, "(%" PRIu32 "): ", lineNo);
} }
va_start(ap, fmt); vfprintf(stderr, fmt, args);
vfprintf(stderr, fmt, ap);
va_end(ap);
putc('\n', stderr); 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, ...) void error(struct FileStackNode const *where, uint32_t lineNo, char const *fmt, ...)
{ {
va_list ap; va_list args;
fputs("error: ", stderr); va_start(args, fmt);
if (where) { printDiag(fmt, args, "error", where, lineNo);
dumpFileStack(where); va_end(args);
fprintf(stderr, "(%" PRIu32 "): ", lineNo);
}
va_start(ap, fmt);
vfprintf(stderr, fmt, ap);
va_end(ap);
putc('\n', stderr);
if (nbErrors != UINT32_MAX) if (nbErrors != UINT32_MAX)
nbErrors++; nbErrors++;
@@ -107,12 +108,12 @@ void error(struct FileStackNode const *where, uint32_t lineNo, char const *fmt,
void argErr(char flag, 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); fprintf(stderr, "error: Invalid argument for option '%c': ", flag);
va_start(ap, fmt); va_start(args, fmt);
vfprintf(stderr, fmt, ap); vfprintf(stderr, fmt, args);
va_end(ap); va_end(args);
putc('\n', stderr); putc('\n', stderr);
if (nbErrors != UINT32_MAX) 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, ...) [[noreturn]] void fatal(struct FileStackNode const *where, uint32_t lineNo, char const *fmt, ...)
{ {
va_list ap; va_list args;
fputs("FATAL: ", stderr); va_start(args, fmt);
if (where) { printDiag(fmt, args, "FATAL", where, lineNo);
dumpFileStack(where); va_end(args);
fprintf(stderr, "(%" PRIu32 "): ", lineNo);
}
va_start(ap, fmt);
vfprintf(stderr, fmt, ap);
va_end(ap);
putc('\n', stderr);
if (nbErrors != UINT32_MAX) if (nbErrors != UINT32_MAX)
nbErrors++; nbErrors++;