我想使用clang AST,分析如何使用某个变量并做一些 如果可以识别特定的使用模式,则可以进行源到源的转换。 特别是,我正在寻找这样的模式:
void *h;
h = create_handler(...);
use_handler(h);
destroy_handler(h);
到目前为止,我已经能够检测到与ValueDecl
相对应的void *h
。下一步
将是找到h
的所有用法,看看它们是否安全以及是否
create_handler/destroy_handler
正确地相互支配/后支配。
不幸的是,我不知道如何遍历h
的使用,看来
ValueDecl
类中没有此类接口。
如果您能提出我如何找到a的所有用法,我将不胜感激 AST中的变量,或者让我指向一些处理类似问题的基于clang的工具。
谢谢!
答案 0 :(得分:0)
一个可以匹配引用变量的declRefExpr
(使用AST匹配器)。之后,ParentMap
可用于向后遍历AST,并递归查找使用那些declRefExpr
的AST节点。请记住,ParentMap
通常不是为整个AST而是为子树而构造的(作为参数传递给构造函数)。