[PATCH 1/2] Whitespace terminates keywords in the linespec parser.

Joel Brobecker brobecker@adacore.com
Thu Mar 19 12:18:00 GMT 2015


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



More information about the Gdb-patches mailing list