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

Daniel Gutson daniel.gutson@tallertechnologies.com
Thu May 22 15:17:00 GMT 2014


Second version.
Comments below:

On Tue, May 20, 2014 at 1:36 PM, Tom Tromey <tromey@redhat.com> wrote:
>>>>>> "Daniel" == Daniel Gutson <daniel.gutson@tallertechnologies.com> writes:
>
> Daniel> I could not find any testsuite where to add tests for this; if
> Daniel> there are, please let me know.
>
> See testsuite/gdb.base/completion.exp

Thanks, I ran all the tests and passed. I did not add a new test
case though since I didn't check how to add a new convenience var
and undefine it later from the test framework. (Should I try harder?)

>
> Daniel>  exp    :       VARIABLE
> Daniel>                         {
> Daniel> -                         write_dollar_variable (pstate, $1);
> Daniel> +                         if (!parse_completion)
> Daniel> +                           write_dollar_variable (pstate, $1);
> Daniel>                         }
>
> I think this isn't correct.  I think it won't work if you try to
> complete on a field name where the "LHS" has a convenience variable.
> That is something like:
>
>    set $var = (struct x *) malloc (...)
>    complete print $var.somethin

You were right, that was broken.

>
> Instead I think you need a new production, like "exp : VARIABLE COMPLETE".

I found another solution without touching the yacc file: adding a check
inside write_dollar_variable

>
> Daniel> +  if (p != NULL && *p == '$')
> Daniel> +    return complete_internalvar (p + 1);
>
> I'm not sure this is correct either, but offhand I don't know.
> Should it not look at "word"?

It actually works ("word" didn't have the $).

However, I noticed that 'set' cmd autocomplete doesn't work for
members of structures (neither with convenience vars nor regular
symbols). I'll address that in the next patch once this gets approved
and committed.

>
> Daniel> +  VEC (char_ptr) * ret = current_language->la_make_symbol_completion_list (
> Daniel> +                                                      text, word,
> Daniel> +                                                      TYPE_CODE_UNDEF);
>
> No space before "ret".
> The line breaks look odd, I would break before the "=" and not after the "(".
>
> thanks,
> Tom

2014-05-22  Daniel Gutson  <daniel.gutson@tallertechnologies.com>

gdb/
        * parse.c (write_dollar_variable): Do not create an internal
var when completing.
        * completer.c (expression_completer): Call complete_internalvar.
        * symtab.c (make_symbol_completion_list): Call complete_internalvar.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: completer2.patch
Type: text/x-patch
Size: 2620 bytes
Desc: not available
URL: <http://sourceware.org/pipermail/gdb-patches/attachments/20140522/1782b9fa/attachment.bin>


More information about the Gdb-patches mailing list