From fe344cb5b29516f26105f0fe2aeaf66d4dbb6d34 Mon Sep 17 00:00:00 2001 From: "Wolfgang (Blub) Bumiller" Date: Mon, 17 Dec 2012 18:22:33 +0100 Subject: [PATCH] vcompile_error, vcompile_warning; fixed: removed opts_ globals from con.c; made the lexer use vcompile_warning --- con.c | 31 ++++++++++++++++++++----------- gmqcc.h | 6 ++++-- lexer.c | 15 ++++++--------- 3 files changed, 30 insertions(+), 22 deletions(-) diff --git a/con.c b/con.c index 1cd7b32..7adf2a9 100644 --- a/con.c +++ b/con.c @@ -22,9 +22,6 @@ */ #include "gmqcc.h" -uint32_t opts_warn [1 + (COUNT_WARNINGS / 32)]; -bool opts_werror = false; - /* * isatty/STDERR_FILENO/STDOUT_FILNO * + some other things likewise. @@ -368,33 +365,45 @@ void con_cprintmsg (void *ctx, int lvl, const char *msgtype, const char *msg, .. size_t compile_errors = 0; size_t compile_warnings = 0; +void vcompile_error(lex_ctx ctx, const char *msg, va_list ap) +{ + ++compile_errors; + con_cvprintmsg((void*)&ctx, LVL_ERROR, "error", msg, ap); +} + void compile_error(lex_ctx ctx, const char *msg, ...) { va_list ap; - ++compile_errors; va_start(ap, msg); - con_cvprintmsg((void*)&ctx, LVL_ERROR, "error", msg, ap); + vcompile_error(ctx, msg, ap); va_end(ap); } -bool GMQCC_WARN compile_warning(lex_ctx ctx, int warntype, const char *fmt, ...) +bool GMQCC_WARN vcompile_warning(lex_ctx ctx, int warntype, const char *fmt, va_list ap) { - va_list ap; int lvl = LVL_WARNING; if (!OPTS_WARN(warntype)) return false; - if (opts_werror) { + if (opts.werror) { ++compile_errors; lvl = LVL_ERROR; } else ++compile_warnings; + con_vprintmsg(lvl, ctx.file, ctx.line, (opts.werror ? "error" : "warning"), fmt, ap); + + return opts.werror; +} + +bool GMQCC_WARN compile_warning(lex_ctx ctx, int warntype, const char *fmt, ...) +{ + bool r; + va_list ap; va_start(ap, fmt); - con_vprintmsg(lvl, ctx.file, ctx.line, (opts_werror ? "error" : "warning"), fmt, ap); + r = vcompile_warning(ctx, warntype, fmt, ap); va_end(ap); - - return opts_werror; + return r; } diff --git a/gmqcc.h b/gmqcc.h index 9a07d7a..02a8c89 100644 --- a/gmqcc.h +++ b/gmqcc.h @@ -623,8 +623,10 @@ int con_out (const char *, ...); extern size_t compile_errors; extern size_t compile_warnings; -void /********/ compile_error (lex_ctx ctx, /*LVL_ERROR*/ const char *msg, ...); -bool GMQCC_WARN compile_warning(lex_ctx ctx, int warntype, const char *fmt, ...); +void /********/ compile_error (lex_ctx ctx, /*LVL_ERROR*/ const char *msg, ...); +bool GMQCC_WARN compile_warning(lex_ctx ctx, int warntype, const char *fmt, ...); +void /********/ vcompile_error (lex_ctx ctx, /*LVL_ERROR*/ const char *msg, va_list); +bool GMQCC_WARN vcompile_warning(lex_ctx ctx, int warntype, const char *fmt, va_list); /*===================================================================*/ /*========================= assembler.c =============================*/ diff --git a/lexer.c b/lexer.c index f1ef767..6f8853d 100644 --- a/lexer.c +++ b/lexer.c @@ -74,20 +74,17 @@ void lexerror(lex_file *lex, const char *fmt, ...) bool lexwarn(lex_file *lex, int warntype, const char *fmt, ...) { + bool r; + lex_ctx ctx; va_list ap; - int lvl = LVL_WARNING; - if (!OPTS_WARN(warntype)) - return false; - - if (opts.werror) - lvl = LVL_ERROR; + ctx.file = lex->name; + ctx.line = lex->sline; va_start(ap, fmt); - con_vprintmsg(lvl, lex->name, lex->sline, (opts.werror ? "error" : "warning"), fmt, ap); + r = vcompile_warning(ctx, warntype, fmt, ap); va_end(ap); - - return opts.werror; + return r; } -- 2.39.2