Reporting the error count after compilation
This commit is contained in:
parent
6ba294f137
commit
03f1e24d2b
@ -37,6 +37,8 @@ struct _C99
|
||||
/* parsing */
|
||||
Token * token;
|
||||
int in_switch;
|
||||
unsigned int error_cnt;
|
||||
unsigned int warning_cnt;
|
||||
};
|
||||
|
||||
|
||||
|
14
src/parser.c
14
src/parser.c
@ -115,8 +115,13 @@ static int _parse_check(C99 * c99, TokenCode code)
|
||||
int ret = 0;
|
||||
|
||||
if(!_parse_is_code(c99, code))
|
||||
{
|
||||
ret = _parse_error(c99, "Expected \"%s\"",
|
||||
code_get_string(code));
|
||||
while(c99_scan(c99) == 0
|
||||
&& c99->token != NULL
|
||||
&& !_parse_is_code(c99, code));
|
||||
}
|
||||
ret |= c99_scan(c99);
|
||||
return ret;
|
||||
}
|
||||
@ -128,6 +133,7 @@ static int _parse_error(C99 * c99, char const * format, ...)
|
||||
Token * token = c99->token;
|
||||
va_list ap;
|
||||
|
||||
c99->error_cnt++;
|
||||
if(token == NULL) /* XXX not very elegant */
|
||||
fputs(PACKAGE ": near end of file: error: ", stderr);
|
||||
else
|
||||
@ -705,6 +711,7 @@ static int _parameter_declaration(C99 * c99)
|
||||
fprintf(stderr, "DEBUG: %s()\n", __func__);
|
||||
#endif
|
||||
ret = _declaration_specifiers(c99);
|
||||
/* FIXME ambiguity between declarator and abstract declarator */
|
||||
if(token_in_set(c99->token, c99set_abstract_declarator))
|
||||
ret |= _abstract_declarator(c99);
|
||||
else if(token_in_set(c99->token, c99set_declarator))
|
||||
@ -1669,7 +1676,14 @@ int c99_parse(C99 * c99)
|
||||
if(c99->flags & C99PREFS_E)
|
||||
return _parse_E(c99);
|
||||
if((ret = _translation_unit(c99)) != 0)
|
||||
{
|
||||
unlink(c99->outfile);
|
||||
fprintf(stderr, "%s%s%s%u%s%u%s", PACKAGE ": ",
|
||||
cpp_get_filename(c99->cpp),
|
||||
": Compilation failed with ", c99->error_cnt,
|
||||
" error(s) and ", c99->warning_cnt,
|
||||
" warning(s)\n");
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -62,6 +62,7 @@ char const * code_get_string(TokenCode code)
|
||||
/* useful */
|
||||
/* c99_scan */
|
||||
static int _scan_skip_meta(C99 * c99);
|
||||
static void _meta_error(C99 * c99, TokenCode code);
|
||||
|
||||
int c99_scan(C99 * c99)
|
||||
{
|
||||
@ -104,7 +105,7 @@ int c99_scan(C99 * c99)
|
||||
static int _scan_skip_meta(C99 * c99)
|
||||
{
|
||||
int ret;
|
||||
int code;
|
||||
TokenCode code;
|
||||
|
||||
while((ret = cpp_scan(c99->cpp, &c99->token)) == 0)
|
||||
{
|
||||
@ -115,13 +116,21 @@ static int _scan_skip_meta(C99 * c99)
|
||||
|| code > C99_CODE_META_LAST))
|
||||
break;
|
||||
if(code == C99_CODE_META_ERROR || code == C99_CODE_META_WARNING)
|
||||
fprintf(stderr, "%s%s%s%u%s%s%s%s\n", PACKAGE ": ",
|
||||
token_get_filename(c99->token), ":",
|
||||
token_get_line(c99->token), ": ",
|
||||
(code == C99_CODE_META_ERROR)
|
||||
? "error" : "warning", ": ",
|
||||
token_get_string(c99->token));
|
||||
_meta_error(c99, code);
|
||||
token_delete(c99->token);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void _meta_error(C99 * c99, TokenCode code)
|
||||
{
|
||||
if(code == C99_CODE_META_ERROR)
|
||||
c99->error_cnt++;
|
||||
else
|
||||
c99->warning_cnt++;
|
||||
fprintf(stderr, "%s%s%s%u%s%s%s%s\n", PACKAGE ": ",
|
||||
token_get_filename(c99->token), ":",
|
||||
token_get_line(c99->token), ": ",
|
||||
(code == C99_CODE_META_ERROR) ? "error" : "warning",
|
||||
": ", token_get_string(c99->token));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user