Reporting the error count after compilation

This commit is contained in:
Pierre Pronchery 2008-03-13 19:27:03 +00:00
parent 6ba294f137
commit 03f1e24d2b
3 changed files with 32 additions and 7 deletions

View File

@ -37,6 +37,8 @@ struct _C99
/* parsing */ /* parsing */
Token * token; Token * token;
int in_switch; int in_switch;
unsigned int error_cnt;
unsigned int warning_cnt;
}; };

View File

@ -115,8 +115,13 @@ static int _parse_check(C99 * c99, TokenCode code)
int ret = 0; int ret = 0;
if(!_parse_is_code(c99, code)) if(!_parse_is_code(c99, code))
{
ret = _parse_error(c99, "Expected \"%s\"", ret = _parse_error(c99, "Expected \"%s\"",
code_get_string(code)); code_get_string(code));
while(c99_scan(c99) == 0
&& c99->token != NULL
&& !_parse_is_code(c99, code));
}
ret |= c99_scan(c99); ret |= c99_scan(c99);
return ret; return ret;
} }
@ -128,6 +133,7 @@ static int _parse_error(C99 * c99, char const * format, ...)
Token * token = c99->token; Token * token = c99->token;
va_list ap; va_list ap;
c99->error_cnt++;
if(token == NULL) /* XXX not very elegant */ if(token == NULL) /* XXX not very elegant */
fputs(PACKAGE ": near end of file: error: ", stderr); fputs(PACKAGE ": near end of file: error: ", stderr);
else else
@ -705,6 +711,7 @@ static int _parameter_declaration(C99 * c99)
fprintf(stderr, "DEBUG: %s()\n", __func__); fprintf(stderr, "DEBUG: %s()\n", __func__);
#endif #endif
ret = _declaration_specifiers(c99); ret = _declaration_specifiers(c99);
/* FIXME ambiguity between declarator and abstract declarator */
if(token_in_set(c99->token, c99set_abstract_declarator)) if(token_in_set(c99->token, c99set_abstract_declarator))
ret |= _abstract_declarator(c99); ret |= _abstract_declarator(c99);
else if(token_in_set(c99->token, c99set_declarator)) else if(token_in_set(c99->token, c99set_declarator))
@ -1669,7 +1676,14 @@ int c99_parse(C99 * c99)
if(c99->flags & C99PREFS_E) if(c99->flags & C99PREFS_E)
return _parse_E(c99); return _parse_E(c99);
if((ret = _translation_unit(c99)) != 0) if((ret = _translation_unit(c99)) != 0)
{
unlink(c99->outfile); 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; return ret;
} }

View File

@ -62,6 +62,7 @@ char const * code_get_string(TokenCode code)
/* useful */ /* useful */
/* c99_scan */ /* c99_scan */
static int _scan_skip_meta(C99 * c99); static int _scan_skip_meta(C99 * c99);
static void _meta_error(C99 * c99, TokenCode code);
int c99_scan(C99 * c99) int c99_scan(C99 * c99)
{ {
@ -104,7 +105,7 @@ int c99_scan(C99 * c99)
static int _scan_skip_meta(C99 * c99) static int _scan_skip_meta(C99 * c99)
{ {
int ret; int ret;
int code; TokenCode code;
while((ret = cpp_scan(c99->cpp, &c99->token)) == 0) 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)) || code > C99_CODE_META_LAST))
break; break;
if(code == C99_CODE_META_ERROR || code == C99_CODE_META_WARNING) if(code == C99_CODE_META_ERROR || code == C99_CODE_META_WARNING)
fprintf(stderr, "%s%s%s%u%s%s%s%s\n", PACKAGE ": ", _meta_error(c99, code);
token_get_filename(c99->token), ":",
token_get_line(c99->token), ": ",
(code == C99_CODE_META_ERROR)
? "error" : "warning", ": ",
token_get_string(c99->token));
token_delete(c99->token); token_delete(c99->token);
} }
return ret; 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));
}