]> git.rm.cloudns.org Git - xonotic/gmqcc.git/commitdiff
vcompile_error, vcompile_warning; fixed: removed opts_ globals from con.c; made the...
authorWolfgang (Blub) Bumiller <blub@speed.at>
Mon, 17 Dec 2012 17:22:33 +0000 (18:22 +0100)
committerWolfgang (Blub) Bumiller <blub@speed.at>
Mon, 17 Dec 2012 17:22:33 +0000 (18:22 +0100)
con.c
gmqcc.h
lexer.c

diff --git a/con.c b/con.c
index 1cd7b326d10956192bb16983f538ac6744c65767..7adf2a9dfc1612fc08a09fab80c376d148b54a5d 100644 (file)
--- 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 9a07d7aabe662ce90ba42c8116842a8d4116e305..02a8c891f57d5ee4638b66cbdfd8fd1ed7631cb4 100644 (file)
--- 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 f1ef767f09d36a4e02cb041dc4bfb7a0a96095b7..6f8853d453acf132de13f7de4894a578040cda19 100644 (file)
--- 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;
 }