diff --git a/gdb/c-exp.y b/gdb/c-exp.y index 0191067..3ae969f 100644 --- a/gdb/c-exp.y +++ b/gdb/c-exp.y @@ -777,7 +777,8 @@ exp : variable exp : VARIABLE { - write_dollar_variable (pstate, $1); + if (!parse_completion) + write_dollar_variable (pstate, $1); } ; diff --git a/gdb/completer.c b/gdb/completer.c index 94f70a9..6c5cdf8 100644 --- a/gdb/completer.c +++ b/gdb/completer.c @@ -20,6 +20,7 @@ #include "symtab.h" #include "gdbtypes.h" #include "expression.h" +#include "value.h" #include "filenames.h" /* For DOSish file names. */ #include "language.h" #include "gdb_assert.h" @@ -446,8 +447,11 @@ expression_completer (struct cmd_list_element *ignore, p--) ; - /* Not ideal but it is what we used to do before... */ - return location_completer (ignore, p, word); + if (p != NULL && *p == '$') + return complete_internalvar (p + 1); + else + /* Not ideal but it is what we used to do before... */ + return location_completer (ignore, p, word); } /* Here are some useful test cases for completion. FIXME: These diff --git a/gdb/symtab.c b/gdb/symtab.c index 15ac3d1..5ceaf46 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -4542,14 +4542,21 @@ default_make_symbol_completion_list (const char *text, const char *word, } /* Return a vector of all symbols (regardless of class) which begin by - matching TEXT. If the answer is no symbols, then the return value - is NULL. */ + matching TEXT. If the answer is no symbols, then check whether the + text is an internal var ($foo), if so, return what complete_internalvar + returns; otherwise the return value is NULL. */ VEC (char_ptr) * make_symbol_completion_list (const char *text, const char *word) { - return current_language->la_make_symbol_completion_list (text, word, - TYPE_CODE_UNDEF); + VEC (char_ptr) * ret = current_language->la_make_symbol_completion_list ( + text, word, + TYPE_CODE_UNDEF); + + if (ret == NULL && *text == '$') + ret = complete_internalvar (text + 1); + + return ret; } /* Like make_symbol_completion_list, but only return STRUCT_DOMAIN