Clang 中 ParentMap 的使用
Usage of ParentMap in Clang
网上好像没有例子,根据文档Path,ParentMap的构造函数接受"Stmt *ASTRoot",这可能意味着后面的ParentMap实例会在[=下的AST子树下找到parents 19=]。但是如何获取翻译单元的根节点呢?我试过了
virtual bool VisitTranslationUnitDecl(TranslationUnitDecl *decl) {
//decl->dump();
Stmt *stmt = decl->getBody();
mParentMap = new ParentMap(stmt);
return true;
}
目标是围绕根节点创建一个 ParentMap,然后在扫描过程中将其用于其他 Visit*** 回调。但是 decl->getBody() 为空。 decl->dump() 会打印所有内容,甚至第二次扫描 AST decl->getBody() 仍然是 null.
如何获取AST的根Stmt? right/better ParentMap 的使用方法是什么?
ParentMap
并不是真的打算单独使用。您可以使用 ASTContext::getParents,它构造并维护 ParentMap
.
网上好像没有例子,根据文档Path,ParentMap的构造函数接受"Stmt *ASTRoot",这可能意味着后面的ParentMap实例会在[=下的AST子树下找到parents 19=]。但是如何获取翻译单元的根节点呢?我试过了
virtual bool VisitTranslationUnitDecl(TranslationUnitDecl *decl) {
//decl->dump();
Stmt *stmt = decl->getBody();
mParentMap = new ParentMap(stmt);
return true;
}
目标是围绕根节点创建一个 ParentMap,然后在扫描过程中将其用于其他 Visit*** 回调。但是 decl->getBody() 为空。 decl->dump() 会打印所有内容,甚至第二次扫描 AST decl->getBody() 仍然是 null.
如何获取AST的根Stmt? right/better ParentMap 的使用方法是什么?
ParentMap
并不是真的打算单独使用。您可以使用 ASTContext::getParents,它构造并维护 ParentMap
.