[cfe-dev] Creating single AST for multiple files

Deepak Rajendrakumaran deepak3 at vt.edu
Thu Jan 15 12:51:02 PST 2015


Hello,

I am new to Clang and so I am having some problem figuring out how to
create AST for a program with multiple files .


What I am trying to do:
- In an application containing multiple .cpp/.c and .h files, parse through
all the files and identify all instances of a particular function
-Move the function definition to a new file with a changed name(changed
function name)
-Find all instances where the particular function is called and change the
function name to the new name

(I am ignoring the other dependencies like nested functions/headers etc so
that I can focus on my actual question. So assume this works:))

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
- Compile and create ASTs for the entire source code(assuming it includes
multiple .cpp and .h files)
-Somehow traverse these ASTs(RecursiveASTVisitor)  to figure out where all
this the particular function I am interested in exists(ASTMatchers??)
-First write the function definition to a new file
-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
(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 )

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?


The one related post I could find in the mailingList is
http://lists.cs.uiuc.edu/pipermail/cfe-dev/2012-August/023865.html. But
That was 2 years ago and the answer at that time was that if I am using
LibTooling, it'll get me disfferent ASTs. Has any been any changes recently
to support creating a single AST?

Also will it be better to look at clang tools rather than libTooling for
this?

Regards,
Deepak
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20150115/79cebac2/attachment.html>


More information about the cfe-dev mailing list