Simplified handling of #error

This commit is contained in:
Pierre Pronchery 2008-03-02 12:56:16 +00:00
parent c64bbfda5c
commit 811ac4ba8a
2 changed files with 11 additions and 28 deletions

View File

@ -59,7 +59,7 @@ struct _Cpp
char ** paths; char ** paths;
size_t paths_cnt; size_t paths_cnt;
/* substitutions */ /* substitutions */
char ** defines; /* FIXME also store the value */ char ** defines; /* FIXME also store the value, directly in tokens? */
size_t defines_cnt; size_t defines_cnt;
}; };
@ -405,7 +405,6 @@ static int _cpp_callback_comment(Parser * parser, Token * token, int c,
static int _directive_error(Cpp * cpp, Token * token, char const * str); static int _directive_error(Cpp * cpp, Token * token, char const * str);
static int _directive_include(Cpp * cpp, Token * token, char const * str); static int _directive_include(Cpp * cpp, Token * token, char const * str);
static int _directive_undef(Cpp * cpp, Token * token, char const * str); static int _directive_undef(Cpp * cpp, Token * token, char const * str);
static int _directive_warning(Cpp * cpp, Token * token, char const * str);
static int _cpp_callback_directive(Parser * parser, Token * token, int c, static int _cpp_callback_directive(Parser * parser, Token * token, int c,
void * data) void * data)
@ -455,7 +454,7 @@ static int _cpp_callback_directive(Parser * parser, Token * token, int c,
token_set_code(token, CPP_CODE_META_ENDIF); token_set_code(token, CPP_CODE_META_ENDIF);
break; break;
case CPP_DIRECTIVE_ERROR: case CPP_DIRECTIVE_ERROR:
_directive_error(cpp, token, str); token_set_code(token, CPP_CODE_META_ERROR);
break; break;
case CPP_DIRECTIVE_IF: case CPP_DIRECTIVE_IF:
/* FIXME implement */ /* FIXME implement */
@ -480,7 +479,7 @@ static int _cpp_callback_directive(Parser * parser, Token * token, int c,
_directive_undef(cpp, token, str); _directive_undef(cpp, token, str);
break; break;
case CPP_DIRECTIVE_WARNING: case CPP_DIRECTIVE_WARNING:
_directive_warning(cpp, token, str); token_set_code(token, CPP_CODE_META_WARNING);
break; break;
default: default:
/* FIXME implement */ /* FIXME implement */
@ -495,14 +494,8 @@ static int _directive_error(Cpp * cpp, Token * token, char const * str)
/* FIXME line and column will probably be wrong for included content /* FIXME line and column will probably be wrong for included content
* use a parser to keep track of it? */ * use a parser to keep track of it? */
{ {
char buf[256];
token_set_code(token, CPP_CODE_META_ERROR); token_set_code(token, CPP_CODE_META_ERROR);
snprintf(buf, sizeof(buf), "in %s:%u, %u: %s: %s", token_set_string(token, str);
cpp_get_filename(cpp), token_get_line(token),
token_get_col(token), "Unknown or invalid directive",
str);
token_set_string(token, buf);
return 0; return 0;
} }
@ -611,16 +604,6 @@ static int _directive_undef(Cpp * cpp, Token * token, char const * str)
return 0; return 0;
} }
static int _directive_warning(Cpp * cpp, Token * token, char const * str)
{
int ret;
/* FIXME implement */
ret = _directive_error(cpp, token, str);
token_set_code(token, CPP_CODE_META_WARNING);
return ret;
}
/* cpp_callback_comma */ /* cpp_callback_comma */
static int _cpp_callback_comma(Parser * parser, Token * token, int c, static int _cpp_callback_comma(Parser * parser, Token * token, int c,

View File

@ -108,13 +108,13 @@ static int _cpp_do(Prefs * prefs, FILE * fp, char const * filename)
fprintf(stderr, "DEBUG: %s (%d)\n", token_get_string(token), fprintf(stderr, "DEBUG: %s (%d)\n", token_get_string(token),
token_get_code(token)); token_get_code(token));
#else #else
if((code = token_get_code(token)) == CPP_CODE_META_ERROR) if((code = token_get_code(token)) == CPP_CODE_META_ERROR
{ || code == CPP_CODE_META_WARNING)
fprintf(stderr, "%s%s\n", "Error: ", fprintf(stderr, "%s%s%s%s%u%s%s\n",
token_get_string(token)); code == CPP_CODE_META_ERROR
} ? "Error" : "Warning", " in ",
else if(code == CPP_CODE_META_WARNING) token_get_filename(token), ":",
fprintf(stderr, "%s%s\n", "Warning: ", token_get_line(token), ": ",
token_get_string(token)); token_get_string(token));
else if(code >= CPP_CODE_META_FIRST else if(code >= CPP_CODE_META_FIRST
&& code <= CPP_CODE_META_LAST) && code <= CPP_CODE_META_LAST)