我正在尝试找出 clang::TreeTransform 的集成点。
目标是在代码生成之前转换 AST。
提前致谢。
最佳答案
一种方法是使用 ASTFrontEndAction ,然后重新定义方法 CreateASTConsumer 以创建 SemaConsumer(而不是 ASTConsumer)。
然后在 handleTopLevelDecl 方法中通过将 Sema 传递给 RecursiveASTVisitor 创建一个 RecursiveASTVisitor,这对于 TreeTransform 是必需的。
然后 RecursiveASTVisitor 的 Visit 方法可以创建 TreeTransform 的实例,然后调用适当的转换方法。
PS:有时在转换 compund 语句时,函数作用域可能为空。你可以做
SemaRef.PushFunctionScope();
SemaRef.PushCompoundScope();
在调用转换函数之前。
关于c++ - 如何使用 clang::TreeTransform?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38146529/