clang-query和CXXMemberCallExpr匹配器

Adr*_*ian 2 c++ matcher clang abstract-syntax-tree

我试图找到如何使用CXXMemberCallExpr使用具有clang查询的匹配器

我已经尝试了各种情况排列,但无法让它发挥作用.看起来第一个char与转储相比较低,因此例如FunctionDecl在clang-query中变为functionDecl

如果-ast-dump匹配器名称与clang-query名称匹配会很好 - 但是猜测它们没有

例如.

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
Run Code Online (Sandbox Code Playgroud)

如果人们想要帮助更多我想创建一个匹配到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;
}
Run Code Online (Sandbox Code Playgroud)

并命令clang为完整的AST(太长时间不能粘贴)clang -Xclang -ast-dump virt.cc

Shu*_*ump 7

我还没有使用过clang-query,但我目前正在查看如何将它用于我自己的项目.

看看ASTMatcher 参考文献,我认为你想要使用的功能是memberCallExpr().CXXMemberCallExpr是一种类型,我不认为它在查询中使用.