如何使用clang::TreeTransform?

How to use clang::TreeTransform?

我正在尝试找出 clang::TreeTransform 的集成点。

目标是在代码生成之前转换 AST。

提前致谢。

一种方法是使用 ASTFrontEndAction,然后重新定义方法 CreateASTConsumer 以创建 SemaConsumer(而不是 ASTConsumer)。

然后在 handleTopLevelDecl 方法中通过将 Sema 传递给 RecursiveASTVisitor 创建一个 RecursiveASTVisitor,这对于 TreeTransform 是必需的。

然后RecursiveASTVisitor 的Visit 方法可以创建一个TreeTransform 的实例,然后调用适当的转换方法。

PS:有时在转换复合语句时,函数作用域可能为空。你可以做到

SemaRef.PushFunctionScope();
SemaRef.PushCompoundScope();

在调用转换函数之前。