aboutsummaryrefslogtreecommitdiff
path: root/gdb/completer.c
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2019-06-13 00:06:52 +0100
committerPedro Alves <palves@redhat.com>2019-06-13 00:06:52 +0100
commit00b56dbe7016bc33f882525a47faab943fdeda9a (patch)
treeddf551efcbf295a750aaa6880eee2704b579b37e /gdb/completer.c
parente4c4ac46e8e7ef92311181f85b193af369897151 (diff)
downloadgdb-00b56dbe7016bc33f882525a47faab943fdeda9a.zip
gdb-00b56dbe7016bc33f882525a47faab943fdeda9a.tar.gz
gdb-00b56dbe7016bc33f882525a47faab943fdeda9a.tar.bz2
Fix latent bug in custom word point completion handling
Without this fix, if we switch the "print" completer to custom word point handling, we regress gdb.base/completion.exp like this: (gdb) p "break1.c FAIL: gdb.base/completion.exp: complete 'p "break1' (timeout) The problem is that completing an expression that starts with double quotes, and resolves to a filename, like this: (gdb) p "break1[TAB] would change from this, with current master: (gdb) p "break1.c"| ^^^^^^^^^^| \- cursor here to this: (gdb) p "break1.c | ^^^^^^^^^^| \- quote replaced by space The issue is that completer.c:advance_to_completion_word misses telling the completion tracker to emulate readline's handling of completing a string when rl_find_completion_word returns a delimiter. This commit fixes the latent bug. gdb/ChangeLog: 2019-06-13 Pedro Alves <palves@redhat.com> * completer.c (advance_to_completion_word): Handle delimiters.
Diffstat (limited to 'gdb/completer.c')
-rw-r--r--gdb/completer.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/gdb/completer.c b/gdb/completer.c
index d4773f2..03d0d0e 100644
--- a/gdb/completer.c
+++ b/gdb/completer.c
@@ -365,11 +365,18 @@ advance_to_expression_complete_word_point (completion_tracker &tracker,
info.quote_characters = gdb_completer_quote_characters;
info.basic_quote_characters = rl_basic_quote_characters;
+ int delimiter;
const char *start
- = gdb_rl_find_completion_word (&info, NULL, NULL, text);
+ = gdb_rl_find_completion_word (&info, NULL, &delimiter, text);
tracker.advance_custom_word_point_by (start - text);
+ if (delimiter)
+ {
+ tracker.set_quote_char (delimiter);
+ tracker.set_suppress_append_ws (true);
+ }
+
return start;
}