如何找到 ValueDecl 的所有用途?
How can I find all uses of a ValueDecl?
我想拿clang AST,分析一下某个变量是怎么用的,做一些
如果识别出特定的使用模式,则进行源到源转换。
特别是,我正在寻找这样的模式:
void *h;
h = create_handler(...);
use_handler(h);
destroy_handler(h);
到目前为止,我能够检测到 ValueDecl
对应于 void *h
。下一步
将找到 h
的所有用途并查看它们是否安全以及是否
create_handler/destroy_handler
正确 dominate/post-dominate 彼此。
不幸的是,我不知道如何迭代 h
的用途,似乎
ValueDecl
class.
中没有这样的界面
如果你能建议我如何找到 a 的所有用途,我将不胜感激
AST 中的变量,或向我指出一些处理类似问题的基于 clang 的工具。
谢谢!
可以匹配 declRefExpr
引用变量(使用 AST 匹配器)。之后,ParentMap
可用于向后遍历 AST 并递归查找使用这些 declRefExpr
的 AST 节点。请记住,通常 ParentMap
不是为整个 AST 构造的,而是仅为子树构造的(作为参数传递给构造函数)。
我想拿clang AST,分析一下某个变量是怎么用的,做一些 如果识别出特定的使用模式,则进行源到源转换。 特别是,我正在寻找这样的模式:
void *h;
h = create_handler(...);
use_handler(h);
destroy_handler(h);
到目前为止,我能够检测到 ValueDecl
对应于 void *h
。下一步
将找到 h
的所有用途并查看它们是否安全以及是否
create_handler/destroy_handler
正确 dominate/post-dominate 彼此。
不幸的是,我不知道如何迭代 h
的用途,似乎
ValueDecl
class.
如果你能建议我如何找到 a 的所有用途,我将不胜感激 AST 中的变量,或向我指出一些处理类似问题的基于 clang 的工具。
谢谢!
可以匹配 declRefExpr
引用变量(使用 AST 匹配器)。之后,ParentMap
可用于向后遍历 AST 并递归查找使用这些 declRefExpr
的 AST 节点。请记住,通常 ParentMap
不是为整个 AST 构造的,而是仅为子树构造的(作为参数传递给构造函数)。