From 65d12d83a581c833b3c09acead57dd1134154e46 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Fri, 6 Jun 2008 20:58:08 +0000 Subject: 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. --- gdb/doc/ChangeLog | 4 ++++ gdb/doc/gdb.texinfo | 40 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 43 insertions(+), 1 deletion(-) (limited to 'gdb/doc') diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index a6f98e6..c249253 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,3 +1,7 @@ +2008-06-06 Tom Tromey + + * gdb.texinfo (Completion): Add field name example. + 2008-06-06 Marc Khouzam * gdb.texinfo (GDB/MI Program Context): Added example diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 9915ea1..5cef05b 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -1,6 +1,6 @@ \input texinfo @c -*-texinfo-*- @c Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998, -@c 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 +@c 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2008 @c Free Software Foundation, Inc. @c @c %**start of header @@ -1531,6 +1531,44 @@ Expressions, ,C@t{++} Expressions}. You can use the command @code{set overload-resolution off} to disable overload resolution; see @ref{Debugging C Plus Plus, ,@value{GDBN} Features for C@t{++}}. +@cindex completion of structure field names +@cindex structure field name completion +@cindex completion of union field names +@cindex union field name completion +When completing in an expression which looks up a field in a +structure, @value{GDBN} also tries@footnote{The completer can be +confused by certain kinds of invalid expressions. Also, it only +examines the static type of the expression, not the dynamic type.} to +limit completions to the field names available in the type of the +left-hand-side: + +@smallexample +(@value{GDBP}) p gdb_stdout.@kbd{M-?} +magic to_delete to_fputs to_put to_rewind +to_data to_flush to_isatty to_read to_write +@end smallexample + +@noindent +This is because the @code{gdb_stdout} is a variable of the type +@code{struct ui_file} that is defined in @value{GDBN} sources as +follows: + +@smallexample +struct ui_file +@{ + int *magic; + ui_file_flush_ftype *to_flush; + ui_file_write_ftype *to_write; + ui_file_fputs_ftype *to_fputs; + ui_file_read_ftype *to_read; + ui_file_delete_ftype *to_delete; + ui_file_isatty_ftype *to_isatty; + ui_file_rewind_ftype *to_rewind; + ui_file_put_ftype *to_put; + void *to_data; +@} +@end smallexample + @node Help @section Getting Help -- cgit v1.1