vcompile_error, vcompile_warning; fixed: removed opts_ globals from con.c; made the lexer use vcompile_warning

This commit is contained in:
Wolfgang (Blub) Bumiller 2012-12-17 18:22:33 +01:00
parent 6fa30fdaf4
commit fe344cb5b2
3 changed files with 31 additions and 23 deletions

33
con.c
View file

@ -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;
va_start(ap, fmt);
con_vprintmsg(lvl, ctx.file, ctx.line, (opts_werror ? "error" : "warning"), fmt, ap);
va_end(ap);
con_vprintmsg(lvl, ctx.file, ctx.line, (opts.werror ? "error" : "warning"), fmt, ap);
return opts_werror;
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);
r = vcompile_warning(ctx, warntype, fmt, ap);
va_end(ap);
return r;
}

View file

@ -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 =============================*/

15
lexer.c
View file

@ -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;
}