[cfe-dev] Is it possible to clone a node in an AST?

Jorge Fernández Fabeiro fabeirojorge at gmail.com
Thu May 3 14:59:31 PDT 2012

Nice, I was guessing that probably TreeTransform could be a solution, now
with your answer I'm sure of it, ;)

Thank you so much!

2012/5/3 Douglas Gregor <dgregor at apple.com>

> On May 3, 2012, at 5:14 AM, Jorge Fernández Fabeiro <
> fabeirojorge at gmail.com> wrote:
> > Hi!
> >
> > I'm working on a tool that do some source-to-source transformations of
> an OpenCL kernel mainly using the Rewriter class of the Clang C++ API.
> However, now I want to do some more complex transformations, and in order
> to do them I'd need to clone a ForStmt node of an AST and add its copy at
> the same level of the tree (i.e., I want to create a copy of the node and
> just after add it to the tree as a sibling node of the original ForStmt).
> >
> > I know that I can do it very simply using the Rewriter class, but the
> cloning is just the first step of a more complex transformation that can't
> be done properly if I just rewrite the loop: I want to do some auxiliary
> transformations in the cloned loop and I need to access to its different
> parts using the ForStmt functions (GetBody(), GetInc(), GetCond()...).
> >
> > In summary, and returning to the subject of this mail, is it possible to
> clone a node in an AST using the Clang C++ API?
> There is no AST-cloning facility in Clang. The closest thing we have is
> Sema's TreeTransform, which recursively rebuilds (and re-type checks)
> nodes. You may be able to build a tweaked clone with it.
>        - Doug
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20120503/4a294af5/attachment.html>

More information about the cfe-dev mailing list