On Tue, Nov 20, 2018 at 12:42:20AM +0000, Ramsay Jones wrote: > > > On 20/11/2018 00:03, Luc Van Oostenryck wrote: > > On Mon, Nov 19, 2018 at 08:49:42PM +0000, Ramsay Jones wrote: > >> > >> The dump_macro() function fails to correctly output the definitions of > >> macros that contain the string operator '#', the concatenation operator > >> '##' and any macro parameter in the definition token list. For example, > >> the following macros: > >> > >> #define STRING(x) #x > >> #define CONCAT(x,y) x ## y > >> > >> are output like so: > >> > >> #define STRING(x) unhandled token type '21' > >> #define CONCAT(x, y) unhandled token type '22' unhandled token type '23' unhandled token type '22' > > > > Mmmm, yes. I never thought about these. > > > >> Add the code necessary to handle those token types to the dump_macros() > >> function and add the above macros to the 'dump-macros.c' test file. > >> > >> Signed-off-by: Ramsay Jones <ramsay@xxxxxxxxxxxxxxxxxxxx> > >> --- > >> pre-process.c | 7 +++++++ > >> validation/preprocessor/dump-macros.c | 5 +++++ > >> 2 files changed, 12 insertions(+) > >> > >> diff --git a/pre-process.c b/pre-process.c > >> index 8abd5e6..eca7ab5 100644 > >> --- a/pre-process.c > >> +++ b/pre-process.c > >> @@ -2196,6 +2196,13 @@ static void dump_macro(struct symbol *sym) > >> switch (token_type(token)) { > >> case TOKEN_UNTAINT: > >> break; > >> + case TOKEN_STR_ARGUMENT: > >> + printf("#%s", show_token(args[token->argnum])); > >> + break; > >> + case TOKEN_CONCAT: > >> + printf("## "); > >> + break; > >> + case TOKEN_QUOTED_ARGUMENT: > >> case TOKEN_MACRO_ARGUMENT: > > > > I'm wondering if there could be some other TOKEN type that would > > need to be handled here. > > Good question, but I don't know the answer! ;-) > > These patches were written months ago and I was being driven by > the need to harmonize the output of the 'meld ggc-macs sp-macs' > command! I quite literally wrote each of these patches, in the > given order, to address each irritation as I noticed it! Yes, nervermind. It was as much a note to myself than a real question. I quickly checked and I think only TOKEN_GNU_KLUDGE may need some extra processing. Best regards, -- Luc