aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog8
-rw-r--r--gdb/c-exp.y2
-rw-r--r--gdb/completer.c17
-rw-r--r--gdb/testsuite/ChangeLog5
-rw-r--r--gdb/testsuite/gdb.base/completion.exp30
5 files changed, 55 insertions, 7 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 89d6070..475d952 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -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.
diff --git a/gdb/c-exp.y b/gdb/c-exp.y
index 9cf63d8..0f2ee16 100644
--- a/gdb/c-exp.y
+++ b/gdb/c-exp.y
@@ -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;
}
diff --git a/gdb/completer.c b/gdb/completer.c
index 163a9dc..62f0b69 100644
--- a/gdb/completer.c
+++ b/gdb/completer.c
@@ -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
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index ef42b4d..d767305 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -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.
diff --git a/gdb/testsuite/gdb.base/completion.exp b/gdb/testsuite/gdb.base/completion.exp
index 79f588b..f4ab1b1 100644
--- a/gdb/testsuite/gdb.base/completion.exp
+++ b/gdb/testsuite/gdb.base/completion.exp
@@ -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