This is the mail archive of the gdb-patches@sources.redhat.com 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]

Re: RFC: C/C++ preprocessor macro support for GDB



Yes, yes.  And I'm sure there are even basic preprocessor tokenization
bugs, memory allocation bugs, wrote-=-when-he-meant-== bugs, etc.

If I say, "I believe it would be better if it used libcpp" a third or
fourth time, would that help?  Should I put it in my .sig?  Or should
I just give up?  :)

Maybe people just can't believe that, having written my own macro
expander, I could bear to see it replaced by someone else's code.  But
I *like* libcpp's code.  What I've seen I found quite legible.  Please
believe me, macroexp.c is utterly disposable.  It was written to be
disposed of --- that's why macroexp.h is so short: to make it easy to
see macroexp.c's relationship to the rest of the code, to make it easy
to replace.

What I do not want to do is block GDB's having even the most basic
macro support on integrating a 11kloc library from a different
repository, perhaps negotiating interface changes, etc.  Simply
because one is worried that desireable, important cleanups won't
happen after a change doesn't mean that GDB is better off without the
change at all.


Neil Booth <neil@daikokuya.demon.co.uk> writes:

> Jim Blandy wrote:-
> 
> > 
> > The following patch adds support for C/C++ preprocessor macros to GDB.
> > It's tentative:
> > 
> > - There are no ChangeLog entries.
> > - It's not broken up into relatively independent changes.
> > - There's no documentation.
> > - There are no tests.
> > - There are some unimplemented features.
> > 
> 
> Jim,
> 
> I've looked over your patch a little more, and I don't think your macro
> expander works, because it doesn't mark individual tokens.  A "disabled
> macro" stack is *not* enough by itself to implement ISO C macro expansion
> semantics.  You need to attach information to individual tokens as well.
> I've not tried it, but I'd bet that
> 
> #define A(x) x A(A)(1)
> 
> expands to "1" with your code, whereas the correct expansion is "A(1)".
> Implementing this properly is a PITA, more so with a text-based expander
> like yours.  It would be very hard to get the same (correct) semantics as
> cpplib in corner cases with a text-based expander (2.95 has outstanding
> bugs in this area).
> 
> In addition, as you note #, ## and the various variadic macro semantics
> and GCC extensions have not been implemented, I think a lot of work lies
> ahead in this implementation.  IMO using cpplib will be a lot less effort,
> even after what you've already accomplished.
> 
> Neil.


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