On Tue, Nov 20, 2018 at 12:49:36AM +0000, Ramsay Jones wrote: > > > On 20/11/2018 00:18, Luc Van Oostenryck wrote: > > On Mon, Nov 19, 2018 at 08:52:42PM +0000, Ramsay Jones wrote: > >> > >> The current -dD option outputs the macro definitions, in addition to the > >> pre-processed text. In contrast, the -dM option outputs only the macro > >> definitions. > >> > >> Signed-off-by: Ramsay Jones <ramsay@xxxxxxxxxxxxxxxxxxxx> > >> --- > >> lib.c | 41 +++++++++++++++++----- > >> lib.h | 1 + > >> validation/preprocessor/dump-macros-only.c | 36 +++++++++++++++++++ > >> validation/preprocessor/dump-macros.c | 6 ++++ > >> 4 files changed, 75 insertions(+), 9 deletions(-) > >> create mode 100644 validation/preprocessor/dump-macros-only.c > >> > >> diff --git a/lib.c b/lib.c > >> index 07a5b9c..23c3d27 100644 > >> --- a/lib.c > >> +++ b/lib.c > >> @@ -287,6 +287,7 @@ int Wunknown_attribute = 0; > >> int Wvla = 1; > >> > >> int dump_macro_defs = 0; > >> +int dump_macros_only = 0; > >> > >> int dbg_compound = 0; > >> int dbg_dead = 0; > >> @@ -794,16 +795,34 @@ static char **handle_switch_v(char *arg, char **next) > >> return next; > >> } > >> > >> -static struct flag dumps[] = { > >> - { "D", &dump_macro_defs}, > >> -}; > >> - > >> static char **handle_switch_d(char *arg, char **next) > >> { > >> - char ** ret = handle_onoff_switch(arg, next, dumps, ARRAY_SIZE(dumps)); > >> - if (ret) > >> - return ret; > >> + char *arg_char = arg + 1; > >> > >> + /* > >> + * -d<CHARS>, where <CHARS> is a sequence of characters, not preceded > >> + * by a space. If you specify characters whose behaviour conflicts, > >> + * the result is undefined. > >> + */ > >> + while (*arg_char) { > >> + switch (*arg_char) { > >> + case 'M': /* dump just the macro definitions */ > >> + dump_macros_only = 1; > >> + dump_macro_defs = 0; > > > > I prefer a small change in the logic to have dump_macro_defs set > > here too. > > Hmm, I don't quite follow. Sorry, I didn't saw this mail yesterday. I just meant that I would prefer to let dump_macro_defs set to 1 here and then later the test can just be: if (dump_macro_defs) { ... } > > > >> + break; > >> + case 'D': /* like 'M', but also output pre-processed text */ > >> + dump_macro_defs = 1; > >> + dump_macros_only = 0; > >> + break; > > > > > >> + case 'N': /* like 'D', but only output macro names not bodies */ > >> + break; > >> + case 'I': /* like 'D', but also output #include directives */ > >> + break; > >> + case 'U': /* like 'D', but only output expanded macros */ > >> + break; > > > > Do you have a specific reason to add those three too? > > Now if someone use 'gcc -d[NIU] ...' will silently succeed, right? > > Heh, yeah, I was going to see how much effort it would take to > implement all of the options that gcc provides, so I put these > here as a reminder/place-holder ... but didn't get back to it! :-D Yes :) -dN should be easy to add but -dI and -dU would need much more work. Best regards, -- Luc