2014-10-01 47 views
2

我试图找到如何使用CXXMemberCallExpr铛查询和CXXMemberCallExpr匹配

我已经尝试了各种情况下的排列用铿锵-查询匹配,不能得到它的工作。看起来,第一个字符比转储更低,例如FunctionDecl在铿锵查询中变为functionDecl

如果-ast-dump匹配器名称与clang-query名称相匹配 - 但猜测它们不是' t

例如。

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 

如果人们想帮助更多的我想创造一个匹配到虚拟:: 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(太长,粘贴)铛-Xclang -ast突降virt.cc

回答

7

我的代码尚未使用clang-query,但我正在查找如何将它用于我自己的项目。

看着ASTMatcher reference我觉得你想要使用的功能是memberCallExpr()CXXMemberCallExpr是一种类型,我不认为它在查询中使用。

0

铿锵已经移动 - 我尝试称之为不正确的原始方式是match cxxMemberCallExpr()