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

Douglas Gregor dgregor at apple.com
Thu May 3 14:51:59 PDT 2012

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

More information about the cfe-dev mailing list