Szelethus added a comment.

I verified this project on tmux, which uses the preprocessor very heavily. It 
works perfectly, and doesn't crash anywhere despite the **very** liberal use of 
asserts.
In https://reviews.llvm.org/D52988#1267382, @whisperity wrote:

> Looks good.
>
> What happens if the macro is to stringify a partially string argument?
>
>   #define BOOYAH(x) #x ";
>  
>   ... 
>  
>   std::string foo = BOOYAH(blabla)
>   std::string foo2 = BOOYAH("blabla)
>   int x = 2;
>
>
> Not sure if these cases are even valid C(XX), but if they are, we should test.


Lucky, this spawn of a nightmare doesn't compile.

> An idea for a follow-up patch if it's not that hard work: you mentioned your 
> original approach with that madness in the HTML printer. Perhaps it could be 
> refactored to use this implementation too and thus we'll only have 9 places 
> where macro expansion logic is to be maintained, not 10. 馃槇

The HTML output contains the macro expansions for //all// macros in the file, 
so it's justifiable that entire file is lexed and preprocessed. Granted, using 
`const_cast` and the like (there are some next level hacks in that 
implementation) is risky, but as long as it doesn't break, it does it's job 
better then this solution would.

//As long as it doesn't break.// If you generate a HTML output, the report 
generation speed may not be the greatest concern, so I'll definitely think 
about this a little bit.


https://reviews.llvm.org/D52988



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to