Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Pedro Alves <palves@redhat.com>
To: Keith Seitz <keiths@redhat.com>, gdb-patches@sourceware.org
Subject: Re: [PATCH 18/40] A smarter linespec completer
Date: Mon, 17 Jul 2017 18:21:00 -0000	[thread overview]
Message-ID: <f1742157-4c16-3d07-ed61-4d4c1358b3a3@redhat.com> (raw)
In-Reply-To: <59695CC2.2090206@redhat.com>

Hi Keith!

On 07/15/2017 01:07 AM, Keith Seitz wrote:
> This is awesome. Just some minor nits.
> 
> On 06/02/2017 05:22 AM, Pedro Alves wrote:
>> gdb/testsuite/ChangeLog:
>> yyyy-mm-dd  Pedro Alves  <palves@redhat.com>
>>
>>         * gdb.linespec/ls-errs.exp: Don't sent tab characters, now that
>>         the completer works.
> 
> Typo "sent"

Fixed.

> 
>> diff --git a/gdb/completer.h b/gdb/completer.h
>> index eab9c69..fbfe4d5 100644
>> --- a/gdb/completer.h
>> +++ b/gdb/completer.h
>> @@ -255,6 +265,14 @@ private:
>>       completable words.  */
>>    int m_custom_word_point = 0;
>>  
>> +  /* If true, tell readline to skip appending a whitespace after the
>> +     completion.  Automatically set if we have a unique completion
>> +     that already has a space at the end.  Completer may also
>> +     explicitly set this.  E.g., the linespec completer sets when when
> 
> Typos: "... completer sets [this] when *when* .."

Thanks, fixed.

> 
>> +     the completion ends with the ":" separator between filename and
>> +     function name.  */
>> +  bool m_suppress_append_ws = false;
>> +
>>    /* Our idea of lowest common denominator to hand over to readline.
>>       See intro.  */
>>    char *m_lowest_common_denominator = NULL;
>> @@ -347,6 +365,11 @@ extern completer_handle_brkchars_ftype *
>>  
>>  /* Exported to linespec.c */
>>  
>> +extern completion_list complete_source_filenames (const char *text);
>> +
>> +extern void complete_expression (completion_tracker &tracker,
>> +				 const char *text, const char *word);
>> +
>>  extern const char *skip_quoted_chars (const char *, const char *,
>>  				      const char *);
> 
> Should the explanatory comments in completer.c be moved here?

Moved.

> 
>> diff --git a/gdb/linespec.c b/gdb/linespec.c
>> index f24cca2..c993c67 100644
>> --- a/gdb/linespec.c
>> +++ b/gdb/linespec.c
>> @@ -271,6 +293,29 @@ struct ls_parser
>>    /* The result of the parse.  */
>>    struct linespec result;
>>  #define PARSER_RESULT(PPTR) (&(PPTR)->result)
>> +
>> +  /* What the parser believes the current word point should complete
>> +     to.  */
>> +  linespec_complete_what complete_what;
>> +
>> +  /* The completion word point.  The parser advances this as is skips
> 
> Typo "as i[t] skips"

Fixed.

> 
>> +     tokens.  At some point the input string will end or parsing will
>> +     fail, and then we attempt completion at the captured completion
>> +     word point, interpreting the string at completion_word as
>> +     COMPLETE_WHAT.  */
>> +  const char *completion_word;
>> +
>> +  /* If the current token was a quoted string, then this is the
>> +     quoting character (either " or '.).  */
> 
> Typo {either " or '.).} (extra period inside parenthesis)

Fixed.

> 
>> +  int completion_quote_char;
> 
> Why int?

Mainly because the related readline code uses int too.
E.g., gdb_rl_find_completion_word -> completion_find_completion_word,
and then the tracker uses int for the quote char too.
I suspect that the reason readline uses int it to avoid issues
with having to remember to cast a char to unsigned char when calling
functions like isdigit, etc. everywhere.  We have some functions
in GDB that take a quote char and use int too:

extern void generic_emit_char (int c, struct type *type, struct ui_file *stream,
			       int quoter, const char *encoding);

extern void generic_printstr (struct ui_file *stream, struct type *type, 
			      const gdb_byte *string, unsigned int length, 
			      const char *encoding, int force_ellipses,
			      int quote_char, int c_style_terminator,
			      const struct value_print_options *options);

might be related, not sure.

I can make this a char, and for consistency try to make completer_tracker
use char too, though I'd prefer to do that as a patch on top of this one
that touches every path in a single go, than update the few related
completer_tracker patches, mainly because gdb_rl_find_completion_word
is already in master.  Would you mind that?

> 
>> @@ -543,6 +588,30 @@ find_parameter_list_end (const char *input)
>>    return p;
>>  }
>>  
>> +/* If the [STRING, STRING_LEN) string ends with what looks like a
>> +   keyword, return the keyword start offset in STRING.  Return -1
>> +   otherwise.  */
>> +
>> +size_t
>> +string_find_incomplete_keyword_at_end (const char * const *keywords,
>> +				       const char *string, size_t string_len)
> 
> Should this be static?

Indeed.

> 
>> +  else if (component == linespec_complete_what::FUNCTION)
>> +    {
>> +      completion_list fn_list;
>> +
>> +      linespec_complete_function (tracker, text, source_filename);
>> +      if (source_filename == NULL)
>> +	fn_list = complete_source_filenames (text);
>> +
> 
> Maybe I took the description of FUNCTION too literally, but it was not obvious to me why we search for source files here.
> 
> When parse_linespec returns (after, e.g., "break foo"), PARSER_EXPLICIT->function_name == "foo", but here we search for both functions *and* source files starting with "foo". Given the ambiguity in the grammar, this is a necessary evil. The meaning of FUNCTION is overloaded (it is not just "functions/methods").
> 
> Can a comment be added to clarify this (probably at linespec_complete_what::FUNCTION)?

Sure thing.

> 
>> +  else if (parser.complete_what == linespec_complete_what::FUNCTION)
>> +    {
>> +      /* While parsing/lexing, we didn't know whether the completion
>> +	 word completes to a unique function name already or not.  E.g.:
> 
> Similarly here, I would like to see "unique function or source file name". A casual reader may really easily overlook this.
> 
>> +	   "b function() <tab>"
>> +	 may need to complete either to:
>> +	   "b function() const"
>> +	 or to:
>> +	   "b function() if/thread/task"
>> +
>> +	 Or, this:
>> +	   "b foo t"
>> +	 may need to complete either to:
>> +	   "b foo template_fun<T>()"
>> +	 with "foo" being the template function's return type, or to:
>> +	   "b foo thread/task"
>> +
>> +	 Address that by completing assuming function, and seeing if
>> +	 we find a function completion that matches exactly
>> +	 "function()". If so, then we advance the completion word past
>> +	 the function and switch to KEYWORD completion mode.  */
>> +
>> +      const char *text = parser.completion_word;
>> +      const char *word = parser.completion_word;
>> +
>> +      complete_linespec_component (&parser, tracker,
>> +				   parser.completion_word,
>> +				   linespec_complete_what::FUNCTION,
>> +				   PARSER_EXPLICIT (&parser)->source_filename);
>> +
>> +      parser.complete_what = linespec_complete_what::NOTHING;
>> +
>> +      if (tracker.quote_char ())
>> +	{
>> +	  /* The function/file name was not close-quoted, so this
>> +	     can't be a keyword.  */
> 
> quote_char could be ':' (from complete_linespec_component). Please add a comment reminding the reader. [Well, that could easily be me, and I'm gettin' old!]

Here are the comments that I came up with.  WDYT?

From ac03503acbb0796899d51b42c6ac7d9560794bd9 Mon Sep 17 00:00:00 2001
From: Pedro Alves <palves@redhat.com>
Date: Mon, 17 Jul 2017 18:45:57 +0100
Subject: [PATCH] address review

---
 gdb/completer.c |  7 ++-----
 gdb/completer.h |  9 +++++++--
 gdb/linespec.c  | 55 ++++++++++++++++++++++++++++++++++++++++++++-----------
 3 files changed, 53 insertions(+), 18 deletions(-)

diff --git a/gdb/completer.c b/gdb/completer.c
index b23baed..eb80a37 100644
--- a/gdb/completer.c
+++ b/gdb/completer.c
@@ -555,8 +555,7 @@ complete_files_symbols (completion_tracker &tracker,
     }
 }
 
-/* Return a list of all source files whose names begin with matching
-   TEXT.  */
+/* See completer.h.  */
 
 completion_list
 complete_source_filenames (const char *text)
@@ -1000,9 +999,7 @@ add_struct_fields (struct type *type, completion_list &output,
     }
 }
 
-/* Complete on expressions.  Often this means completing on symbol
-   names, but some language parsers also have support for completing
-   field names.  */
+/* See completer.h.  */
 
 void
 complete_expression (completion_tracker &tracker,
diff --git a/gdb/completer.h b/gdb/completer.h
index ba66137..f68c6dc 100644
--- a/gdb/completer.h
+++ b/gdb/completer.h
@@ -267,8 +267,8 @@ private:
 
   /* If true, tell readline to skip appending a whitespace after the
      completion.  Automatically set if we have a unique completion
-     that already has a space at the end.  Completer may also
-     explicitly set this.  E.g., the linespec completer sets when when
+     that already has a space at the end.  A completer may also
+     explicitly set this.  E.g., the linespec completer sets this when
      the completion ends with the ":" separator between filename and
      function name.  */
   bool m_suppress_append_ws = false;
@@ -371,8 +371,13 @@ extern completer_handle_brkchars_ftype *
 
 /* Exported to linespec.c */
 
+/* Return a list of all source files whose names begin with matching
+   TEXT.  */
 extern completion_list complete_source_filenames (const char *text);
 
+/* Complete on expressions.  Often this means completing on symbol
+   names, but some language parsers also have support for completing
+   field names.  */
 extern void complete_expression (completion_tracker &tracker,
 				 const char *text, const char *word);
 
diff --git a/gdb/linespec.c b/gdb/linespec.c
index f2da551..136cb65 100644
--- a/gdb/linespec.c
+++ b/gdb/linespec.c
@@ -54,7 +54,14 @@ enum class linespec_complete_what
   /* Nothing, no possible completion.  */
   NOTHING,
 
-  /* A function/method name.  */
+  /* A function/method name.  Due to ambiguity between
+
+       (gdb) b source[TAB]
+       source_file.c
+       source_function
+
+     this can also indicate a source filename, iff we haven't seen a
+     separate source filename component, as in "b source.c:function".  */
   FUNCTION,
 
   /* A label symbol.  E.g., break file.c:function:LABEL.  */
@@ -298,7 +305,7 @@ struct ls_parser
      to.  */
   linespec_complete_what complete_what;
 
-  /* The completion word point.  The parser advances this as is skips
+  /* The completion word point.  The parser advances this as it skips
      tokens.  At some point the input string will end or parsing will
      fail, and then we attempt completion at the captured completion
      word point, interpreting the string at completion_word as
@@ -306,7 +313,7 @@ struct ls_parser
   const char *completion_word;
 
   /* If the current token was a quoted string, then this is the
-     quoting character (either " or '.).  */
+     quoting character (either " or ').  */
   int completion_quote_char;
 
   /* If the current token was a quoted string, then this points at the
@@ -592,7 +599,7 @@ find_parameter_list_end (const char *input)
    keyword, return the keyword start offset in STRING.  Return -1
    otherwise.  */
 
-size_t
+static size_t
 string_find_incomplete_keyword_at_end (const char * const *keywords,
 				       const char *string, size_t string_len)
 {
@@ -2893,7 +2900,12 @@ complete_linespec_component (linespec_parser *parser,
 
       linespec_complete_function (tracker, text, source_filename);
       if (source_filename == NULL)
-	fn_list = complete_source_filenames (text);
+	{
+	  /* Haven't seen a source component, like in "b
+	     file.c:function[TAB]".  Maybe this wasn't a function, but
+	     a filename instead, like "b file.[TAB]".  */
+	  fn_list = complete_source_filenames (text);
+	}
 
       /* If we only have a single filename completion, append a ':' for
 	 the user, since that's the only thing that can usefully follow
@@ -3066,7 +3078,10 @@ linespec_complete (completion_tracker &tracker, const char *text)
   else if (parser.complete_what == linespec_complete_what::FUNCTION)
     {
       /* While parsing/lexing, we didn't know whether the completion
-	 word completes to a unique function name already or not.  E.g.:
+	 word completes to a unique function/source name already or
+	 not.
+
+	 E.g.:
 	   "b function() <tab>"
 	 may need to complete either to:
 	   "b function() const"
@@ -3080,10 +3095,26 @@ linespec_complete (completion_tracker &tracker, const char *text)
 	 with "foo" being the template function's return type, or to:
 	   "b foo thread/task"
 
-	 Address that by completing assuming function, and seeing if
-	 we find a function completion that matches exactly
-	 "function()". If so, then we advance the completion word past
-	 the function and switch to KEYWORD completion mode.  */
+	 Or, this:
+	   "b file<TAB>"
+	 may need to complete either to a source file name:
+	   "b file.c"
+	 or this, also a filename, but a unique completion:
+	   "b file.c:"
+	 or to a function name:
+	   "b file_function"
+
+	 Address that by completing assuming source or function, and
+	 seeing if we find a completion that matches exactly the
+	 completion word.  If so, then it must be a function (see note
+	 below) and we advance the completion word to the end of input
+	 and switch to KEYWORD completion mode.
+
+	 Note: if we find a unique completion for a source filename,
+	 then it won't match the completion word, because the LCD will
+	 contain a trailing ':'.  And if we're completing at or after
+	 the ':', then complete_linespec_component won't try to
+	 complete on source filenames.  */
 
       const char *text = parser.completion_word;
       const char *word = parser.completion_word;
@@ -3098,7 +3129,9 @@ linespec_complete (completion_tracker &tracker, const char *text)
       if (tracker.quote_char ())
 	{
 	  /* The function/file name was not close-quoted, so this
-	     can't be a keyword.  */
+	     can't be a keyword.  Note: complete_linespec_component
+	     may have swapped the original quote char for ':' when we
+	     get here, but that still indicates the same.  */
 	}
       else if (!tracker.have_completions ())
 	{
-- 
2.5.5



  reply	other threads:[~2017-07-17 18:21 UTC|newest]

Thread overview: 182+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-06-02 12:22 [PATCH 00/40] C++ debugging improvements: breakpoints, TAB completion, more Pedro Alves
2017-06-02 12:22 ` [PATCH 01/40] Make gdb.base/dmsym.exp independent of "set language ada" Pedro Alves
2017-07-18 19:42   ` Simon Marchi
2017-07-20 17:00     ` Pedro Alves
2017-06-02 12:22 ` [PATCH 03/40] Fix gdb.base/completion.exp with --target_board=dwarf4-gdb-index Pedro Alves
2017-07-13 20:28   ` Keith Seitz
2017-07-14 16:02     ` Pedro Alves
2017-06-02 12:22 ` [PATCH 14/40] Introduce CP_OPERATOR_STR/CP_OPERATOR_LEN and use throughout Pedro Alves
2017-07-14 18:04   ` Keith Seitz
2017-07-17 14:55     ` Pedro Alves
2017-06-02 12:22 ` [PATCH 02/40] Eliminate make_cleanup_obstack_free, introduce auto_obstack Pedro Alves
2017-06-26 13:47   ` Yao Qi
2017-06-27 10:25     ` Pedro Alves
2017-06-28 10:36   ` Yao Qi
2017-06-28 14:39     ` Pedro Alves
2017-06-28 21:33       ` Yao Qi
2017-06-02 12:22 ` [PATCH 08/40] completion_list_add_name wrapper functions Pedro Alves
2017-06-27 12:56   ` Yao Qi
2017-06-27 15:35     ` Pedro Alves
2017-06-02 12:22 ` [PATCH 06/40] Expression completer should not match explicit location options Pedro Alves
2017-06-29  8:29   ` Yao Qi
2017-06-29 10:56     ` Pedro Alves
2017-06-29 11:08       ` Pedro Alves
2017-06-29 15:23         ` Pedro Alves
2017-06-29 11:24       ` Yao Qi
2017-06-29 15:25         ` Pedro Alves
2017-06-02 12:23 ` [PATCH 28/40] lookup_name_info::make_ignore_params Pedro Alves
2017-08-08 20:55   ` Keith Seitz
2017-11-08 16:18     ` Pedro Alves
2017-06-02 12:23 ` [PATCH 19/40] Fix cp_find_first_component_aux bug Pedro Alves
2017-07-17 19:17   ` Keith Seitz
2017-07-17 19:50     ` Pedro Alves
2017-07-17 21:38       ` Keith Seitz
2017-07-20 17:03         ` Pedro Alves
2017-06-02 12:23 ` [PATCH 40/40] Document breakpoints / linespec & co improvements (manual + NEWS) Pedro Alves
2017-06-02 13:01   ` Eli Zaretskii
2017-06-02 13:33     ` Pedro Alves
2017-06-21 15:50       ` Pedro Alves
2017-06-21 19:14         ` Pedro Alves
2017-06-22 19:45           ` Eli Zaretskii
2017-06-22 19:42         ` Eli Zaretskii
2017-06-21 13:32     ` Pedro Alves
2017-06-21 18:26       ` Eli Zaretskii
2017-06-21 19:01         ` Pedro Alves
2017-06-22 19:43           ` Eli Zaretskii
2017-06-02 12:23 ` [PATCH 18/40] A smarter linespec completer Pedro Alves
2017-07-15  0:07   ` Keith Seitz
2017-07-17 18:21     ` Pedro Alves [this message]
2017-07-17 19:02       ` Keith Seitz
2017-07-17 19:33         ` Pedro Alves
2017-06-02 12:23 ` [PATCH 38/40] Use TOLOWER in SYMBOL_HASH_NEXT Pedro Alves
2017-08-09 19:25   ` Keith Seitz
2017-11-25  0:35     ` [pushed] " Pedro Alves
2017-06-02 12:23 ` [PATCH 09/40] Rename make_symbol_completion_list_fn -> symbol_completer Pedro Alves
2017-06-28 21:40   ` Yao Qi
2017-07-13 20:46   ` Keith Seitz
2017-07-17 11:00     ` Pedro Alves
2017-06-02 12:23 ` [PATCH 13/40] Introduce strncmp_iw Pedro Alves
2017-06-29  8:42   ` Yao Qi
2017-07-17 19:16     ` Pedro Alves
2017-06-02 12:23 ` [PATCH 11/40] Introduce class completion_tracker & rewrite completion<->readline interaction Pedro Alves
2017-07-14 17:23   ` Keith Seitz
2017-07-17 13:56     ` Pedro Alves
2017-07-18  8:23       ` Christophe Lyon
     [not found]         ` <845f435e-d3d5-b327-4e3a-ce9434bd6ffd@redhat.com>
2017-07-18 10:42           ` [pushed] Fix GDB builds that include the simulator (Re: [PATCH 11/40] Introduce class completion_tracker & rewrite completion<->readline interaction) Pedro Alves
2018-03-05 21:43   ` [PATCH 11/40] Introduce class completion_tracker & rewrite completion<->readline interaction Simon Marchi
2017-06-02 12:23 ` [PATCH 39/40] Breakpoints in symbols with ABI tags (PR c++/19436) Pedro Alves
2017-08-09 19:34   ` Keith Seitz
2017-11-27 17:14     ` Pedro Alves
2017-06-02 12:23 ` [PATCH 15/40] Rewrite/enhance explicit locations completer, parse left->right Pedro Alves
2017-07-14 20:55   ` Keith Seitz
2017-07-17 19:24     ` Pedro Alves
2017-06-02 12:23 ` [PATCH 36/40] Add comprehensive C++ operator linespec/location/completion tests Pedro Alves
2017-08-09 17:59   ` Keith Seitz
2017-11-25  0:18     ` [pushed] " Pedro Alves
2017-11-30 15:43       ` Yao Qi
2017-11-30 16:06         ` Pedro Alves
2017-11-30 16:35           ` [pushed] Fix gdb.linespec/cpls-ops.exp on 32-bit (Re: [pushed] Re: [PATCH 36/40] Add comprehensive C++ operator linespec/location/completion tests) Pedro Alves
2017-06-02 12:23 ` [PATCH 35/40] Comprehensive C++ linespec/completer tests Pedro Alves
2017-08-09 17:30   ` Keith Seitz
2017-11-24 16:25     ` Pedro Alves
2017-06-02 12:23 ` [PATCH 27/40] Make cp_remove_params return a unique_ptr Pedro Alves
2017-08-08 20:35   ` Keith Seitz
2017-10-09 15:13     ` Pedro Alves
2017-06-02 12:23 ` [PATCH 10/40] Clean up "completer_handle_brkchars" callback handling Pedro Alves
2017-07-13 21:08   ` Keith Seitz
2017-07-17 11:14     ` Pedro Alves
2017-06-02 12:23 ` [PATCH 37/40] Fix completing an empty string Pedro Alves
2017-08-09 18:01   ` Keith Seitz
2017-11-25  0:28     ` Pedro Alves
2017-06-02 12:23 ` [PATCH 34/40] Make strcmp_iw NOT ignore whitespace in the middle of tokens Pedro Alves
2017-08-09 15:48   ` Keith Seitz
2017-11-24 23:38     ` [pushed] " Pedro Alves
2017-06-02 12:28 ` [PATCH 24/40] Per-language symbol name hashing algorithm Pedro Alves
2017-07-18 17:33   ` Keith Seitz
2017-07-20 18:53     ` Pedro Alves
2017-11-08 16:08       ` Pedro Alves
2017-06-02 12:29 ` [PATCH 33/40] Make the linespec/location completer ignore data symbols Pedro Alves
2017-08-09 15:42   ` Keith Seitz
2017-11-08 16:22     ` Pedro Alves
2017-06-02 12:29 ` [PATCH 12/40] "complete" command and completion word break characters Pedro Alves
2017-07-14 17:50   ` Keith Seitz
2017-07-17 14:36     ` Pedro Alves
2017-06-02 12:29 ` [PATCH 17/40] Linespec lexing and C++ operators Pedro Alves
2017-07-14 21:45   ` Keith Seitz
2017-07-17 19:34     ` Pedro Alves
2017-06-02 12:29 ` [PATCH 07/40] objfile_per_bfd_storage non-POD Pedro Alves
2017-06-27 12:00   ` Yao Qi
2017-06-27 15:30     ` Pedro Alves
2017-06-02 12:29 ` [PATCH 16/40] Explicit locations -label completer Pedro Alves
2017-07-14 21:32   ` Keith Seitz
2017-06-02 12:29 ` [PATCH 05/40] command.h: Include scoped_restore_command.h Pedro Alves
2017-06-27 11:30   ` Yao Qi
2017-06-27 11:45     ` Pedro Alves
2017-06-27 11:52       ` Pedro Alves
2017-06-27 12:03         ` Pedro Alves
2017-06-27 15:46           ` [PATCH 05/40] command.h: Include common/scoped_restore.h Pedro Alves
2017-06-28  7:54             ` Yao Qi
2017-06-28 14:20               ` Pedro Alves
2017-06-02 12:29 ` [PATCH 21/40] Use SYMBOL_MATCHES_SEARCH_NAME some more Pedro Alves
2017-07-17 21:39   ` Keith Seitz
2017-07-20 17:08     ` Pedro Alves
2017-06-02 12:30 ` [PATCH 20/40] Eliminate block_iter_name_* Pedro Alves
2017-07-17 19:47   ` Keith Seitz
2017-07-20 17:05     ` Pedro Alves
2017-06-02 12:30 ` [PATCH 30/40] Use search_domain::FUNCTIONS_DOMAIN when setting breakpoints Pedro Alves
2017-08-08 21:07   ` Keith Seitz
2017-11-08 16:20     ` Pedro Alves
2017-06-02 12:30 ` [PATCH 32/40] Make "break foo" find "A::foo", A::B::foo", etc. [C++ and wild matching] Pedro Alves
2017-08-08 23:48   ` Keith Seitz
2017-11-22 16:48     ` Pedro Alves
2017-11-24 16:48       ` Pedro Alves
2017-11-24 16:57         ` Pedro Alves
2017-11-28  0:39         ` Keith Seitz
2017-11-28  0:02       ` Keith Seitz
2017-11-28  0:21         ` Pedro Alves
2017-11-28  0:42           ` Keith Seitz
2017-06-02 12:31 ` [PATCH 04/40] Fix TAB-completion + .gdb_index slowness (generalize filename_seen_cache) Pedro Alves
2017-07-13 20:41   ` Keith Seitz
2017-07-14 19:40     ` Pedro Alves
2017-07-17 10:51       ` Pedro Alves
2017-06-02 12:31 ` [PATCH 29/40] Simplify completion_list_add_name | remove sym_text / sym_text_len Pedro Alves
2017-08-08 20:59   ` Keith Seitz
2017-11-08 16:19     ` Pedro Alves
2017-06-02 12:31 ` [PATCH 22/40] get_int_var_value Pedro Alves
2017-07-17 22:11   ` Keith Seitz
2017-07-20 17:15     ` Pedro Alves
2017-06-02 12:33 ` [PATCH 31/40] Handle custom completion match prefix / LCD Pedro Alves
2017-08-08 21:28   ` Keith Seitz
2017-11-27 17:11     ` Pedro Alves
2017-06-02 12:39 ` [PATCH 25/40] Introduce lookup_name_info and generalize Ada's FULL/WILD name matching Pedro Alves
2017-07-18 20:14   ` Keith Seitz
2017-07-18 22:31     ` Pedro Alves
2017-07-20 19:00       ` Pedro Alves
2017-07-20 19:06         ` Pedro Alves
2017-08-08 20:29           ` Keith Seitz
2017-10-19 17:36             ` Pedro Alves
2017-11-01 15:38               ` Joel Brobecker
2017-11-08 16:10                 ` Pedro Alves
2017-11-08 22:15                   ` Joel Brobecker
2017-06-02 12:39 ` [PATCH 23/40] Make language_def O(1) Pedro Alves
2017-07-17 23:03   ` Keith Seitz
2017-07-20 17:40     ` Pedro Alves
2017-07-20 18:12       ` Get rid of "set language local"? (was: Re: [PATCH 23/40] Make language_def O(1)) Pedro Alves
2017-07-20 23:44         ` Matt Rice
2017-06-02 12:39 ` [PATCH 26/40] Optimize .gdb_index symbol name searching Pedro Alves
2017-08-08 20:32   ` Keith Seitz
2017-11-08 16:14     ` Pedro Alves
2017-11-08 16:16       ` [pushed] Reorder/reindent dw2_expand_symtabs_matching & friends (Re: [PATCH 26/40] Optimize .gdb_index symbol name searching) Pedro Alves
2017-11-18  5:23   ` [PATCH 26/40] Optimize .gdb_index symbol name searching Simon Marchi
2017-11-20  0:33     ` Pedro Alves
2017-11-20  0:42       ` [PATCH 3/3] Fix mapped_index::find_name_components_bounds upper bound computation Pedro Alves
2017-11-20  3:17         ` Simon Marchi
2017-11-20  0:42       ` [PATCH 2/3] Unit test name-component bounds searching directly Pedro Alves
2017-11-20  3:16         ` Simon Marchi
2017-11-20 14:17           ` Pedro Alves
2017-11-20  0:42       ` [PATCH 1/3] 0xff chars in name components table; cp-name-parser lex UTF-8 identifiers Pedro Alves
2017-11-20  1:38         ` Simon Marchi
2017-11-20 11:56           ` Pedro Alves
2017-11-20 16:50             ` Simon Marchi
2017-11-21  0:11               ` Pedro Alves
2017-06-02 15:26 ` [PATCH 00/40] C++ debugging improvements: breakpoints, TAB completion, more Pedro Alves

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=f1742157-4c16-3d07-ed61-4d4c1358b3a3@redhat.com \
    --to=palves@redhat.com \
    --cc=gdb-patches@sourceware.org \
    --cc=keiths@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox