Second version. Comments below: On Tue, May 20, 2014 at 1:36 PM, Tom Tromey wrote: >>>>>> "Daniel" == Daniel Gutson 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 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.