9
0
Fork 0

hush: Be more informative on syntax error

Print the token that led to a syntax error, at least for the common
case.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
Sascha Hauer 2013-11-12 10:38:01 +01:00
parent 671cf43e56
commit cc3fc44dbf
1 changed files with 22 additions and 3 deletions

View File

@ -264,8 +264,27 @@ struct in_str {
#define final_printf debug
static void syntax(void) {
printf("syntax error\n");
static void syntax(void)
{
printf("syntax error\n");
}
static void syntaxf(const char *fmt, ...)
{
va_list args;
printf("syntax error: ");
va_start(args, fmt);
vprintf(fmt, args);
va_end(args);
}
static void syntax_unexpected_token(const char *token)
{
syntaxf("unexpected token `%s'\n", token);
}
/* o_string manipulation: */
@ -1201,7 +1220,7 @@ static int reserved_word(o_string *dest, struct p_context *ctx)
initialize_context(ctx);
ctx->stack = new;
} else if (ctx->w == RES_NONE || !(ctx->old_flag & (1 << r->code))) {
syntax();
syntax_unexpected_token(r->literal);
ctx->w = RES_SNTX;
b_reset(dest);
return 1;