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.
This commit is contained in:
parent
9757332fd2
commit
3f172e2492
4 changed files with 67 additions and 29 deletions
|
@ -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.
|
||||
|
|
|
@ -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));
|
||||
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;
|
||||
}
|
||||
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;
|
||||
}
|
||||
/* If we saw no matching deprecated commands in the first pass,
|
||||
just bail out. */
|
||||
if (!saw_deprecated_match)
|
||||
break;
|
||||
}
|
||||
|
||||
if (matches == 0)
|
||||
{
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in a new issue