This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Re: RFA: add macro commands
Neil Booth <neil@daikokuya.demon.co.uk> writes:
> Jim Blandy wrote:-
>
> > > It would be nice to have completion only on macro names in these
> > > commands. But if that cannot be done easily, at least let's disable
> > > completion entirely until something appropriate is coded.
> >
> > I hadn't thought about completion at all.
> >
> > Given that the macros are stored in a splay tree, they're all sorted
> > in a way that would make efficient completion straightforward. So it
> > wouldn't be too hard to write a macro-only completion function.
>
> Just in case you'd not realized, macro expansions are frequently
> different, depending on location in the source files.
GDB's macro data structures are meant to take into account macros
being #defined, #undefined, and re-#defined, and source files being
#included multiple times, and perhaps #defining different symbols each
time (e.g., under the influence of #if directives).
In order to look up a macro's definition, you need to provide the
macro name, the line number, and a structure representing, not a
source file, but a particular #inclusion of a source file. The lookup
function returns you the #definition that was in force at that line of
that #inclusion. (The main source file is treated as the "root"
#inclusion.)
I believe GDB's data structures are as precise as libcpp's linemap
structures and logical line numbers. I think the linemap structure is
more graceful, though.
For the details, see the data structures in macrotab.h and macrotab.c:
http://sources.redhat.com/ml/gdb-patches/2002-05/msg00135.html