[PATCH 2/2] avoid multiple error message after parsing error

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Parsing error triggered by expect() insert bad_token as the
current token. This allows to skip other errors with expect().
So far so good but this token is a fake token which has no
position set, if another parsing error is detected by something
else than expect(), the error message will use the position of
this bad token which will be displayed like:
	builtin:0:0: ...
which is confusing.

Since the concerned error message are secondary ones, the primary
one have been already be repported by expect(), the best is to
simply skip all these secondary error messages.

Do this by creating a new token type (TOKEN_BAD) and use it for
bad_token, then filter error messages based on this token type.

Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@xxxxxxxxx>
---
 lib.c   | 9 ++++++++-
 token.h | 1 +
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/lib.c b/lib.c
index a05d04744..c451a88ce 100644
--- a/lib.c
+++ b/lib.c
@@ -70,7 +70,7 @@ struct token *skip_to(struct token *token, int op)
 	return token;
 }
 
-static struct token bad_token;
+static struct token bad_token = { .pos.type = TOKEN_BAD };
 struct token *expect(struct token *token, int op, const char *where)
 {
 	if (!match_op(token, op)) {
@@ -123,6 +123,10 @@ static void do_warn(const char *type, struct position pos, const char * fmt, va_
 	static char buffer[512];
 	const char *name;
 
+	/* Shut up warnings if position is bad_token.pos */
+	if (pos.type == TOKEN_BAD)
+		return;
+
 	vsprintf(buffer, fmt, args);	
 	name = stream_name(pos.stream);
 		
@@ -150,6 +154,9 @@ static void do_error(struct position pos, const char * fmt, va_list args)
 	static int errors = 0;
         die_if_error = 1;
 	show_info = 1;
+	/* Shut up warnings if position is bad_token.pos */
+	if (pos.type == TOKEN_BAD)
+		return;
 	/* Shut up warnings after an error */
 	has_error |= ERROR_CURR_PHASE;
 	if (errors > 100) {
diff --git a/token.h b/token.h
index 847fdf4d0..292db167e 100644
--- a/token.h
+++ b/token.h
@@ -79,6 +79,7 @@ struct ident {
 
 enum token_type {
 	TOKEN_EOF,
+	TOKEN_BAD,
 	TOKEN_ERROR,
 	TOKEN_IDENT,
 	TOKEN_ZERO_IDENT,
-- 
2.17.0

--
To unsubscribe from this list: send the line "unsubscribe linux-sparse" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Newbies FAQ]     [LKML]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Trinity Fuzzer Tool]

  Powered by Linux