Is it possible to clone a node in an AST?

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?

Thank you so much in advance,

Jorge.

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

Nice, I was guessing that probably TreeTransform could be a solution, now with your answer I’m sure of it, :wink:

Thank you so much!

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