<div dir="ltr">I was looking into this last week when investigating "expand macro" & "preprocess" actions for Clang's new refactoring engine. I came to the conclusion that the best way to solve this full preprocessing issue is to re-preprocess the whole translation unit, use a custom PP frontend action, and call a modified version of clang::DoPrintPreprocessedInput which implements the -E mode. The modification in `DoPrintPreprocessedInput` boiled down to a source range constraint that controlled which tokens should be printed to ensure that only the relevant tokens (that actually make-up the BAZ(test) expansion) are printed instead of the whole preprocessed source. Btw, would you be interested in working on a patch for Clang that implements this modification if you decide to use this approach?<div><br></div><div>I hope this helps,</div><div>Alex</div></div><div class="gmail_extra"><br><div class="gmail_quote">On 17 August 2017 at 12:25, Alexander Graf via cfe-dev <span dir="ltr"><<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi all,<br>
<br>
I am currently working on a source-to-source transformation using libtooling/clang. I would like to selectively expand some macros to their definition during rewrite. Possible recursion and other macros in the expansion shall be expanded as well. e.g.<br>
<br>
#define FOO( name, line ) name##line<br>
#define BAR( name, line ) FOO( name, line )<br>
#define BAZ( name ) BAR( name, __LINE__ )<br>
<br>
such that<br>
<br>
BAZ( test )<br>
<br>
at line 42 can be expanded to the string "test42". How can I do that? I found an old, similar question on the clang list, which never received a proper answer[1]. It cannot be that hard, can it?<br>
<br>
Thank you!<br>
<br>
Regards,<br>
Alex<br>
<br>
[1] <a href="http://clang-developers.42468.n3.nabble.com/Using-Clang-to-Expand-Macros-td4028424.html" rel="noreferrer" target="_blank">http://clang-developers.42468.<wbr>n3.nabble.com/Using-Clang-to-E<wbr>xpand-Macros-td4028424.html</a><br>
______________________________<wbr>_________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-dev</a><br>
</blockquote></div><br></div>