Reporting the error count after compilation
This commit is contained in:
parent
6ba294f137
commit
03f1e24d2b
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
14
src/parser.c
14
src/parser.c
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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));
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user