This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH 1/2] Whitespace terminates keywords in the linespec parser.
- From: Joel Brobecker <brobecker at adacore dot com>
- To: Keith Seitz <keiths at redhat dot com>
- Cc: gdb-patches at sourceware dot org
- Date: Thu, 19 Mar 2015 08:18:34 -0400
- Subject: Re: [PATCH 1/2] Whitespace terminates keywords in the linespec parser.
- Authentication-results: sourceware.org; auth=none
- References: <20150317205942 dot 9650 dot 84728 dot stgit at valrhona dot uglyboxes dot com>
Hi Keith,
> This patch changes the linespec lexer so that any keyword seen
> in the input stream is only a keyword if the next character is
> whitespace (as opposed to a non-identifier character).
>
> As a result, the lexer and find_condition_and_thread will both
> share the same keyword-terminal behavior.
>
> gdb/ChangeLog
>
> * linespec.c (linespec_lexer_lex_keyword): According to
> find_condition_and_thread, keywords must be followed by
> whitespace. Follow that requirement here.
I think you know this code better than anyone, but what about
testing for the nul character as well? I'm guessing that, many times,
a keyword at the end of the linespec is going to result in an invalid
linespec, but it's still a keyword?
> ---
> gdb/linespec.c | 5 ++---
> 1 file changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/gdb/linespec.c b/gdb/linespec.c
> index 9ec4a5e..597df87 100644
> --- a/gdb/linespec.c
> +++ b/gdb/linespec.c
> @@ -433,10 +433,9 @@ linespec_lexer_lex_keyword (const char *p)
> int len = strlen (linespec_keywords[i]);
>
> /* If P begins with one of the keywords and the next
> - character is not a valid identifier character,
> - we have found a keyword. */
> + character is whitespace, we have found a keyword. */
> if (strncmp (p, linespec_keywords[i], len) == 0
> - && !(isalnum (p[len]) || p[len] == '_'))
> + && isspace (p[len]))
> return linespec_keywords[i];
> }
> }
--
Joel