我可以使用哪些clang函数来查找具有“&”的声明,例如“ int * m =&b”?

时间:2019-05-27 14:10:06

标签: clang

我想找到带有“&”的声明;例如int *m = &b,然后对此类声明进行翻译。

现在,我使用 ASTMatcher varDecl()查找所有 VarDecl ,并使用declVar->getType().getTypePtr().getAs<clang::PointerType>()获取指针声明。

接下来我可以使用哪些函数来查找此类'm = &b'声明?

Matcher.addMatcher(varDecl(unless(parmVarDecl())).bind("varDecl"), &VarD);
virtual void run(const MatchFinder::MatchResult &Result) {
    ASTContext *Context = Result.Context;
    SourceManager &sourceManager_ = Context->getSourceManager();
    const VarDecl *declVar = Result.Nodes.getNodeAs<VarDecl>("varDecl");
    const clang::Type *type = declVar -> getType().getTypePtr();
    const clang::PointerType *pointer_type = type -> getAs 
    <clang::PointerType>();
    if(pointer_type != NULL){
        // what functions can I use to find m=&b
    }
}

1 个答案:

答案 0 :(得分:0)

&是变量声明初始化内的一元运算符。这将产生以下匹配器:

varDecl(unless(parmVarDecl()), hasInitializer(unaryOperator(hasOperatorName("&"))))

注意:您可以使用 clang 小组的一个有用的小工具: clang-query 。它可以帮助您以交互方式检查匹配器。

使用clang进行了愉快的黑客入侵!