<div class="gmail_quote">On Sat Jan 17 2015 at 10:32:07 PM Deepak Rajendrakumaran <<a href="mailto:deepak3@vt.edu">deepak3@vt.edu</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">James,<div><br></div><div>Thank you for answering my query.<br><div><br></div><div>I might have misunderstood the issues. We have been using 'Rose', which is another source to source compiler. Rose generates a single AST. I expected something similar which is why I was looking for a way to generate a single AST. But having gone through some some documentation, it seems like it is indeed possible to implement this using multiple ASTs. But my problem is I will need to revisit each AST multiple times and make incremental changes on source files. Is '<span style="color:rgb(0,0,0);font-family:Consolas,monaco,monospace;font-size:14px;line-height:20.5714282989502px;white-space:nowrap;background-color:rgb(247,247,247)">clang-apply-replacements</span>' a solution to this?</div></div></div></blockquote><div><br></div><div>Yes. Generally, you'll want to run over all TUs, and create replacements, and then apply them in one step in the end. </div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div>I am also confused as to if I should be using LibClang or LibTooling keeping in mind I'll need to make significant changes to my source code. Is there any functionality constraint on LibClang/LibTooling which I can use to make up my mind??</div></div></div></blockquote><div><br></div><div>libclang currently doesn't have refactoring support, so if you want to rewrite code, you'll want to use libtooling...</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><br></div><div>Regards,</div><div>Deepak</div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jan 15, 2015 at 4:11 PM, James Dennett <span dir="ltr"><<a href="mailto:james.dennett@gmail.com" target="_blank">james.dennett@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><span>On Thu, Jan 15, 2015 at 12:51 PM, Deepak Rajendrakumaran <span dir="ltr"><<a href="mailto:deepak3@vt.edu" target="_blank">deepak3@vt.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Hello,</div><div><br></div><div>I am new to Clang and so I am having some problem figuring out how to create AST for a program with multiple files .<div><br></div><div><br></div><div>What I am trying to do:</div><div>- In an application containing multiple .cpp/.c and .h files, parse through all the files and identify all instances of a particular function</div><div>-Move the function definition to a new file with a changed name(changed function name)</div><div>-Find all instances where the particular function is called and change the function name to the new name</div><div><br></div><div>(I am ignoring the other dependencies like nested functions/headers etc so that I can focus on my actual question. So assume this works:))<br><div><br></div><div><div>I have been reading up on Clang/libtooling inorder to figure out a way to do the same. From what I understand, the steps to do this would be</div><div>- Compile and create ASTs for the entire source code(assuming it includes multiple .cpp and .h files)</div><div>-Somehow traverse these ASTs(RecursiveASTVisitor)  to figure out where all this the particular function I am interested in exists(ASTMatchers??)</div><div>-First write the function definition to a new file </div><div>-Now use the rewriter to write the original file without the function definition and replace all the places where a call to this function exists with its new name</div><div>(I have tried to simplify the problem statement so that I can pinpoint my issue better. I'll ofcourse have to manipulate the ASTs and the source code more to get a working program )</div></div></div><div><br></div><div>First of all, I need to have ASTs of all TUs and not just one AST. Is there any way in libtooling to obtain a single AST for multiple TUs? If not is there any standard practice for the same incase anyone has faced the same problem?</div><div><br></div></div></div></blockquote><div><br></div></span><div>I'm not sure that I understand.  Standard practice is to process one AST per TU.  I've not found it to be a problem, but maybe it is for you for some reason -- in which case it might help to say what that reason is.  There may well be solutions.</div><span><font color="#888888"><div><br></div><div>-- James</div></font></span></div></div></div>
</blockquote></div><br></div>
______________________________<u></u>_________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@cs.uiuc.edu" target="_blank">cfe-dev@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/<u></u>mailman/listinfo/cfe-dev</a><br>
</blockquote></div>