clang查询和CXXMemberCallExpr匹配器

clang-query and CXXMemberCallExpr matcher

本文关键字:CXXMemberCallExpr 查询 clang      更新时间:2023-10-16

我正试图找到如何使用CXXMemberCallExpr 将匹配器与clang查询一起使用

我试过各种各样的案例排列,但都无法奏效。与转储相比,第一个字符的大小写似乎更低,因此例如FunctionDecl在clang查询中变为FunctionDecl

如果-ast转储匹配器名称与clang查询名称匹配,那就太好了——但我猜它们不匹配

例如。

clang-query> match CXXMemberCallExpr()
1:2: Matcher not found: CXXMemberCallExpr
clang-query> match cxxmemberCallExpr()
1:2: Matcher not found: cxxmemberCallExpr
clang-query> match CxxMemberCallExpr()
1:2: Matcher not found: CxxMemberCallExpr
clang-query> match CXXmemberCallExpr()
1:2: Matcher not found: CXXmemberCallExpr
clang-query> match cxxMemberCallExpr()
1:2: Matcher not found: cxxMemberCallExpr

如果人们想提供更多帮助,我想创建一个Virtual::foo()的匹配器,所以所有对基类虚拟函数的调用。

这是我试图使用的代码

class Virtual
{
   public:
      virtual void foo()
      {
      }
};
class Real : public Virtual
{
   public:
      virtual void foo()
      {
      }
};
void bar()
{
   Virtual *v=new Real();
   Real *r=new Real();
   Virtual *v2=new Virtual();
   v->foo();
   r->foo();
   v2->foo();
   delete v;
   delete r;
   delete v2;
}

和完整AST的clang命令(太长,无法粘贴)clang-Xclang-AST dump virt.cc

我还没有使用clang查询,但我目前正在研究如何将其用于我自己的项目。

看看ASTMatcher引用,我认为您想要使用的函数是memberCallExpr()CXXMemberCallExpr是一种类型,我不认为它在查询中使用。

Clang已经离开了-我最初尝试调用它的方式不正确,它是match cxxMemberCallExpr()

相关文章:
  • 没有找到相关文章