我想找到带有“&”的声明;例如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
}
}
答案 0 :(得分:0)
&
是变量声明初始化内的一元运算符。这将产生以下匹配器:
varDecl(unless(parmVarDecl()), hasInitializer(unaryOperator(hasOperatorName("&"))))
注意:您可以使用 clang 小组的一个有用的小工具: clang-query 。它可以帮助您以交互方式检查匹配器。
使用clang进行了愉快的黑客入侵!