This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[PATCH] Add autocompletion for convenience vars in print and set
- From: Daniel Gutson <daniel dot gutson at tallertechnologies dot com>
- To: gdb-patches <gdb-patches at sourceware dot org>
- Date: Tue, 20 May 2014 12:51:46 -0300
- Subject: [PATCH] Add autocompletion for convenience vars in print and set
- Authentication-results: sourceware.org; auth=none
Hi,
this small patch adds autocompletion for convenience variables
for 'print' and 'set' commands. I guess other commands using the
same completers will be benefited as well.
I could not find any testsuite where to add tests for this; if there are,
please let me know.
2014-05-20 Daniel Gutson <daniel.gutson@tallertechnologies.com>
gdb/
* c-exp.y (exp): Do not create an internal var when completing.
* completer.c (expression_completer): Call complete_internalvar.
* symtab.c (make_symbol_completion_list): Call complete_internalvar.
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