* completer.c (complete_line): Don't special-case
	expression_completer.
	(expression_completer): Only pass last word to
	location_completer.
	* c-exp.y (yylex): Check 'token', not 'operator'.
gdb/testsuite
	* gdb.base/completion.exp: New tests for field name completion
	with spaces, and field name completion with '->'.
This commit is contained in:
Tom Tromey 2008-06-09 19:25:15 +00:00
parent 7b3082352f
commit 37cd5d19fe
5 changed files with 55 additions and 7 deletions

View file

@ -1,3 +1,11 @@
2008-06-09 Tom Tromey <tromey@redhat.com>
* completer.c (complete_line): Don't special-case
expression_completer.
(expression_completer): Only pass last word to
location_completer.
* c-exp.y (yylex): Check 'token', not 'operator'.
2008-06-09 Daniel Jacobowitz <dan@codesourcery.com>
* configure.ac (build_warnings): Add -Wno-format for mingw.

View file

@ -1433,7 +1433,7 @@ yylex ()
{
lexptr += 2;
yylval.opcode = tokentab2[i].opcode;
if (in_parse_field && tokentab2[i].opcode == ARROW)
if (in_parse_field && tokentab2[i].token == ARROW)
last_was_structop = 1;
return tokentab2[i].token;
}

View file

@ -387,7 +387,7 @@ char **
expression_completer (char *text, char *word)
{
struct type *type;
char *fieldname;
char *fieldname, *p;
/* Perform a tentative parse of the expression, to see whether a
field completion is required. */
@ -418,8 +418,15 @@ expression_completer (char *text, char *word)
}
}
/* Commands which complete on locations want to see the entire
argument. */
for (p = word;
p > text && p[-1] != ' ' && p[-1] != '\t';
p--)
;
/* Not ideal but it is what we used to do before... */
return location_completer (text, word);
return location_completer (p, word);
}
/* Complete on command names. Used by "help". */
@ -604,8 +611,7 @@ complete_line (const char *text, char *line_buffer, int point)
rl_completer_word_break_characters =
gdb_completer_file_name_break_characters;
}
else if (c->completer == location_completer
|| c->completer == expression_completer)
else if (c->completer == location_completer)
{
/* Commands which complete on locations want to
see the entire argument. */
@ -673,8 +679,7 @@ complete_line (const char *text, char *line_buffer, int point)
rl_completer_word_break_characters =
gdb_completer_file_name_break_characters;
}
else if (c->completer == location_completer
|| c->completer == expression_completer)
else if (c->completer == location_completer)
{
for (p = word;
p > tmp_command

View file

@ -1,3 +1,8 @@
2008-06-09 Tom Tromey <tromey@redhat.com>
* gdb.base/completion.exp: New tests for field name completion
with spaces, and field name completion with '->'.
2008-06-06 Tom Tromey <tromey@redhat.com>
* gdb.base/break1.c (struct some_struct): New struct.

View file

@ -654,6 +654,36 @@ gdb_expect {
timeout { fail "(timeout) complete 'p values\[0\].a' 2" }
}
send_gdb "p values\[0\] . a\t"
gdb_expect {
-re "^p values.0. . a_field $"\
{ send_gdb "\n"
gdb_expect {
-re "^.* = 0.*$gdb_prompt $"\
{ pass "complete 'p values\[0\] . a'"}
-re ".*$gdb_prompt $" { fail "complete 'p values\[0\] . a'"}
timeout {fail "(timeout) complete 'p values\[0\] . a'"}
}
}
-re ".*$gdb_prompt $" { fail "complete 'p values\[0\] . a'" }
timeout { fail "(timeout) complete 'p values\[0\] . a' 2" }
}
send_gdb "p &values\[0\] -> a\t"
gdb_expect {
-re "^p &values.0. -> a_field $"\
{ send_gdb "\n"
gdb_expect {
-re "^.* = .*0x\[0-9a-fA-F\]*.*$gdb_prompt $"\
{ pass "complete 'p &values\[0\] -> a'"}
-re ".*$gdb_prompt $" { fail "complete 'p &values\[0\] -> a'"}
timeout {fail "(timeout) complete 'p &values\[0\] -> a'"}
}
}
-re ".*$gdb_prompt $" { fail "complete 'p &values\[0\] -> a'" }
timeout { fail "(timeout) complete 'p &values\[0\] -> a' 2" }
}
# The following tests used to simply try to complete `${objdir}/file',
# and so on. The problem is that ${objdir} can be very long; the
# completed filename may be more than eighty characters wide. When