写作Clang AST Matchers

时间:2015-10-19 06:52:19

标签: clang llvm-clang clang-static-analyzer

是否可以在另一个表达式上使用绑定字符串,如下面的代码:

expr(declRefExpr().bind("id"), hasDesendent(declRefExpr(has("id")));

基本上使用一个节点的bind id字符串来查找另一个节点。

2 个答案:

答案 0 :(得分:2)

比较2个节点的最佳方法是绑定不同的id string,然后在回调方法中对它们进行比较。

这在tutorial中有解释。

在上面的链接中,您可以找到以下代码:

const VarDecl *IncVar = Result.Nodes.getNodeAs<VarDecl>("incVarName");
const VarDecl *CondVar = Result.Nodes.getNodeAs<VarDecl>("condVarName");
if (!areSameVariable(IncVar, CondVar))
    return;

此代码旨在比较回调函数中变量incVarNamecondVarName中绑定的节点。

答案 1 :(得分:2)

是的,可以使用 equalsBoundNode

用法:

expr(declRefExpr().bind("id"), hasDesendent(declRefExpr(equalsBoundNode("id")));