C++ clang查询和CxMemberCallExpr匹配器
我试图找到如何使用CXXMemberCallExpr将匹配器与clang查询结合使用 我尝试过各种案例排列,但都没能成功。与dump相比,第一个字符的大小写似乎较低,因此在clang查询中,eg FunctionDecl变成FunctionDecl 如果-ast dump matcher名称与铿锵查询名称匹配就好了,但我猜它们不匹配 例如 如果人们想提供更多帮助,我想创建一个到Virtual::foo()的匹配器,所以所有对基类Virtual函数的调用都是如此 这就是我试图使用的代码C++ clang查询和CxMemberCallExpr匹配器,c++,clang,abstract-syntax-tree,matcher,C++,Clang,Abstract Syntax Tree,Matcher,我试图找到如何使用CXXMemberCallExpr将匹配器与clang查询结合使用 我尝试过各种案例排列,但都没能成功。与dump相比,第一个字符的大小写似乎较低,因此在clang查询中,eg FunctionDecl变成FunctionDecl 如果-ast dump matcher名称与铿锵查询名称匹配就好了,但我猜它们不匹配 例如 如果人们想提供更多帮助,我想创建一个到Virtual::foo()的匹配器,所以所有对基类Virtual函数的调用都是如此 这就是我试图使用的代码 class
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-Xclang-AST dump virt.cc的clang命令我还没有使用clang查询,但我目前正在研究如何在我自己的项目中使用它
看看ASTMatcher,我认为您想要使用的函数是
memberCallExpr()
CxMemberCallExpr
是一种类型,我认为在查询中没有使用它。Clang已经继续-我最初尝试调用它的方式不正确,它是match CxMemberCallExpr()
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;
}