summaryrefslogtreecommitdiff
path: root/gdb/testsuite
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2008-06-06 20:58:08 +0000
committerTom Tromey <tromey@redhat.com>2008-06-06 20:58:08 +0000
commit96d06332153b28d32d3b0a1d65fa88d1f5d911d7 (patch)
tree9c14d6a1bdbdd9e2df41cf2a0e947e17d96ff3a3 /gdb/testsuite
parent17db8ecec884aa520424ac2955ae1b2b3cba3a63 (diff)
downloadgdb-96d06332153b28d32d3b0a1d65fa88d1f5d911d7.tar.gz
gdb
* value.h (evaluate_subexpression_type, extract_field_op): Declare. * printcmd.c (_initialize_printcmd): Use expression_completer for 'p', 'inspect', 'call'. * parser-defs.h (parse_field_expression): Declare. * parse.c: Include exceptions.h. (in_parse_field, expout_last_struct): New globals. (mark_struct_expression): New function. (prefixify_expression): Return int. (prefixify_subexp): Return int. Use expout_last_struct. (parse_exp_1): Update. (parse_exp_in_context): Add 'out_subexp' argument. Handle in_parse_field. (parse_field_expression): New function. * expression.h (parse_field_expression): Declare. (in_parse_field): Likewise. * eval.c (evaluate_subexpression_type): New function. (extract_field_op): Likewise. * completer.h (expression_completer): Declare. * completer.c (expression_completer): New function. (count_struct_fields, add_struct_fields): New functions. * c-exp.y (yyparse): Redefine. (COMPLETE): New token. (exp): New productions. (saw_name_at_eof, last_was_structop): New globals. (yylex): Return COMPLETE when needed. Recognize in_parse_field. (c_parse): New function. * breakpoint.c (_initialize_breakpoint): Use expression_completer for watch, awatch, and rwatch. * Makefile.in (parse.o): Depend on exceptions_h. gdb/testsuite * gdb.base/break1.c (struct some_struct): New struct. (values): New global. * gdb.base/completion.exp: Add field name completion test. gdb/doc * gdb.texinfo (Completion): Add field name example.
Diffstat (limited to 'gdb/testsuite')
-rw-r--r--gdb/testsuite/ChangeLog6
-rw-r--r--gdb/testsuite/gdb.base/break1.c9
-rw-r--r--gdb/testsuite/gdb.base/completion.exp16
3 files changed, 31 insertions, 0 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 917d9302463..ef42b4d4f72 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2008-06-06 Tom Tromey <tromey@redhat.com>
+
+ * gdb.base/break1.c (struct some_struct): New struct.
+ (values): New global.
+ * gdb.base/completion.exp: Add field name completion test.
+
2008-06-06 Paul Pluzhnikov <ppluzhnikov@google.com>
* gdb.cp/call-c.exp: Test for incorrect handling of reference
diff --git a/gdb/testsuite/gdb.base/break1.c b/gdb/testsuite/gdb.base/break1.c
index 3272cbd6a00..9cbcd3036e8 100644
--- a/gdb/testsuite/gdb.base/break1.c
+++ b/gdb/testsuite/gdb.base/break1.c
@@ -41,3 +41,12 @@ int marker2 (a) int a; { return (1); } /* set breakpoint 9 here */
void marker3 (a, b) char *a, *b; {} /* set breakpoint 18 here */
void marker4 (d) long d; {} /* set breakpoint 13 here */
#endif
+
+/* A structure we use for field name completion tests. */
+struct some_struct
+{
+ int a_field;
+ int b_field;
+};
+
+struct some_struct values[50];
diff --git a/gdb/testsuite/gdb.base/completion.exp b/gdb/testsuite/gdb.base/completion.exp
index 09f04dfeaa2..79f588b8aab 100644
--- a/gdb/testsuite/gdb.base/completion.exp
+++ b/gdb/testsuite/gdb.base/completion.exp
@@ -637,6 +637,22 @@ gdb_expect {
timeout { fail "(timeout) complete (2) 'p no_var_named_this-'" }
}
+send_gdb "p values\[0\].a\t"
+sleep 3
+gdb_expect {
+ -re "^p values.0..a_field $"\
+ { send_gdb "\n"
+ sleep 1
+ 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" }
+ }
# The following tests used to simply try to complete `${objdir}/file',
# and so on. The problem is that ${objdir} can be very long; the