aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2010-04-26 18:37:14 +0000
committerTom Tromey <tromey@redhat.com>2010-04-26 18:37:14 +0000
commit3f172e2492c90613517c90f46a1161d44e2745ca (patch)
tree32ab2d6df9bb2a911b796965486a780a6e8f8d83 /gdb
parent9757332fd2256ecc8b023181fcd0807e2a159ad6 (diff)
downloadgdb-3f172e2492c90613517c90f46a1161d44e2745ca.zip
gdb-3f172e2492c90613517c90f46a1161d44e2745ca.tar.gz
gdb-3f172e2492c90613517c90f46a1161d44e2745ca.tar.bz2
gdb
* cli/cli-decode.c (complete_on_cmdlist): Make two passes over the command list. gdb/testsuite * gdb.base/completion.exp: Add tests for completion and deprecated commands.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/cli/cli-decode.c80
-rw-r--r--gdb/testsuite/ChangeLog5
-rw-r--r--gdb/testsuite/gdb.base/completion.exp6
4 files changed, 67 insertions, 29 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 6c112a8..405ab22 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,8 @@
+2010-04-26 Tom Tromey <tromey@redhat.com>
+
+ * cli/cli-decode.c (complete_on_cmdlist): Make two passes over the
+ command list.
+
2010-04-26 Pierre Muller <muller@ics.u-strasbg.fr>
Removal of config/i386/nm-i386sol2.h native configuration file.
diff --git a/gdb/cli/cli-decode.c b/gdb/cli/cli-decode.c
index de261fa..1655e0a 100644
--- a/gdb/cli/cli-decode.c
+++ b/gdb/cli/cli-decode.c
@@ -1597,43 +1597,65 @@ complete_on_cmdlist (struct cmd_list_element *list, char *text, char *word)
int sizeof_matchlist;
int matches;
int textlen = strlen (text);
+ int pass;
+ int saw_deprecated_match = 0;
sizeof_matchlist = 10;
matchlist = (char **) xmalloc (sizeof_matchlist * sizeof (char *));
matches = 0;
- for (ptr = list; ptr; ptr = ptr->next)
- if (!strncmp (ptr->name, text, textlen)
- && !ptr->abbrev_flag
- && (ptr->func
- || ptr->prefixlist))
- {
- if (matches == sizeof_matchlist)
+ /* We do one or two passes. In the first pass, we skip deprecated
+ commands. If we see no matching commands in the first pass, and
+ if we did happen to see a matching deprecated command, we do
+ another loop to collect those. */
+ for (pass = 0; matches == 0 && pass < 2; ++pass)
+ {
+ for (ptr = list; ptr; ptr = ptr->next)
+ if (!strncmp (ptr->name, text, textlen)
+ && !ptr->abbrev_flag
+ && (ptr->func
+ || ptr->prefixlist))
{
- sizeof_matchlist *= 2;
- matchlist = (char **) xrealloc ((char *) matchlist,
- (sizeof_matchlist
- * sizeof (char *)));
- }
+ if (pass == 0)
+ {
+ if ((ptr->flags & CMD_DEPRECATED) != 0)
+ {
+ saw_deprecated_match = 1;
+ continue;
+ }
+ }
- matchlist[matches] = (char *)
- xmalloc (strlen (word) + strlen (ptr->name) + 1);
- if (word == text)
- strcpy (matchlist[matches], ptr->name);
- else if (word > text)
- {
- /* Return some portion of ptr->name. */
- strcpy (matchlist[matches], ptr->name + (word - text));
- }
- else
- {
- /* Return some of text plus ptr->name. */
- strncpy (matchlist[matches], word, text - word);
- matchlist[matches][text - word] = '\0';
- strcat (matchlist[matches], ptr->name);
+ if (matches == sizeof_matchlist)
+ {
+ sizeof_matchlist *= 2;
+ matchlist = (char **) xrealloc ((char *) matchlist,
+ (sizeof_matchlist
+ * sizeof (char *)));
+ }
+
+ matchlist[matches] = (char *)
+ xmalloc (strlen (word) + strlen (ptr->name) + 1);
+ if (word == text)
+ strcpy (matchlist[matches], ptr->name);
+ else if (word > text)
+ {
+ /* Return some portion of ptr->name. */
+ strcpy (matchlist[matches], ptr->name + (word - text));
+ }
+ else
+ {
+ /* Return some of text plus ptr->name. */
+ strncpy (matchlist[matches], word, text - word);
+ matchlist[matches][text - word] = '\0';
+ strcat (matchlist[matches], ptr->name);
+ }
+ ++matches;
}
- ++matches;
- }
+ /* If we saw no matching deprecated commands in the first pass,
+ just bail out. */
+ if (!saw_deprecated_match)
+ break;
+ }
if (matches == 0)
{
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 7aee1ec..4c3bf83 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2010-04-26 Tom Tromey <tromey@redhat.com>
+
+ * gdb.base/completion.exp: Add tests for completion and deprecated
+ commands.
+
2010-04-26 Jan Kratochvil <jan.kratochvil@redhat.com>
* gdb.pascal/gdb11492.exp (print integer_array, print /d char_array)
diff --git a/gdb/testsuite/gdb.base/completion.exp b/gdb/testsuite/gdb.base/completion.exp
index fbd8599..5f836b6 100644
--- a/gdb/testsuite/gdb.base/completion.exp
+++ b/gdb/testsuite/gdb.base/completion.exp
@@ -847,6 +847,12 @@ gdb_expect {
eof { fail "(eof) Completing non-existing component #2" }
}
+# If there is a non-deprecated completion, it should be returned.
+gdb_test "complete sav" "save" "test non-deprecated completion"
+# If there is only a deprecated completion, then it should be returned.
+gdb_test "complete save-t" "save-tracepoints" "test deprecated completion"
+
+
# Restore globals modified in this test...
set timeout $oldtimeout1