This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Add autocompletion for convenience vars in print and set


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

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]