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! ATB, Ramsay Jones