diff --git a/dmd/expression.c b/dmd/expression.c index 31d03122..a9c23614 100644 --- a/dmd/expression.c +++ b/dmd/expression.c @@ -963,10 +963,9 @@ void Expression::warning(const char *format, ...) { if (global.params.warnings && !global.gag) { - fprintf(stdmsg, "warning - "); va_list ap; va_start(ap, format); - ::warning(loc, format, ap); + ::vwarning(loc, format, ap); va_end( ap ); } } diff --git a/dmd/mars.c b/dmd/mars.c index 2d817856..8837cc01 100644 --- a/dmd/mars.c +++ b/dmd/mars.c @@ -109,13 +109,10 @@ void warning(Loc loc, const char *format, ...) { if (global.params.warnings && !global.gag) { - fprintf(stdmsg, "warning - "); - va_list ap; - va_start(ap, format); - char* p = loc.toChars(); - fprintf(stdmsg, "Warning: %s:", p?p:""); - vfprintf(stdmsg, format, ap); - va_end( ap ); + va_list ap; + va_start(ap, format); + vwarning(loc, format, ap); + va_end( ap ); } } @@ -137,6 +134,23 @@ void verror(Loc loc, const char *format, va_list ap) global.errors++; } +void vwarning(Loc loc, const char *format, va_list ap) +{ + if (global.params.warnings && !global.gag) + { + char *p = loc.toChars(); + + if (*p) + fprintf(stdmsg, "%s: ", p); + mem.free(p); + + fprintf(stdmsg, "Warning: "); + vfprintf(stdmsg, format, ap); + fprintf(stdmsg, "\n"); + fflush(stdmsg); + } +} + /*************************************** * Call this after printing out fatal error messages to clean up and exit * the compiler. diff --git a/dmd/mars.h b/dmd/mars.h index 85842384..5464716a 100644 --- a/dmd/mars.h +++ b/dmd/mars.h @@ -388,6 +388,7 @@ enum MATCH }; void warning(Loc loc, const char *format, ...); +void vwarning(Loc loc, const char *format, va_list); void error(Loc loc, const char *format, ...); void verror(Loc loc, const char *format, va_list); void fatal(); diff --git a/dmd/mtype.c b/dmd/mtype.c index 87c9f21f..d1ad6587 100644 --- a/dmd/mtype.c +++ b/dmd/mtype.c @@ -714,10 +714,9 @@ void Type::warning(Loc loc, const char *format, ...) { if (global.params.warnings && !global.gag) { - fprintf(stdmsg, "warning - "); va_list ap; va_start(ap, format); - ::verror(loc, format, ap); + ::vwarning(loc, format, ap); va_end( ap ); } } diff --git a/dmd/statement.c b/dmd/statement.c index 899fddcf..66c9bf60 100644 --- a/dmd/statement.c +++ b/dmd/statement.c @@ -100,10 +100,9 @@ void Statement::warning(const char *format, ...) { if (global.params.warnings && !global.gag) { - fprintf(stdmsg, "warning - "); va_list ap; va_start(ap, format); - ::verror(loc, format, ap); + ::vwarning(loc, format, ap); va_end( ap ); } } diff --git a/gen/logger.cpp b/gen/logger.cpp index fa69157f..a3f6fab9 100644 --- a/gen/logger.cpp +++ b/gen/logger.cpp @@ -71,13 +71,11 @@ namespace Logger { return _enabled; } - void attention(const Loc& loc, const char* fmt,...) + void attention(Loc loc, const char* fmt,...) { - printf("Warning: %s: ", loc.toChars()); va_list va; va_start(va,fmt); - vprintf(fmt,va); + vwarning(loc,fmt,va); va_end(va); - printf("\n"); } } diff --git a/gen/logger.h b/gen/logger.h index ef5db19c..5d8d71b8 100644 --- a/gen/logger.h +++ b/gen/logger.h @@ -16,7 +16,7 @@ namespace Logger void disable(); bool enabled(); - void attention(const Loc& loc, const char* fmt, ...); + void attention(Loc loc, const char* fmt, ...); struct LoggerScope {