【发布时间】:2017-08-28 16:32:00
【问题描述】:
我需要检查块(在 Objective C 中)是否在其主体中没有自引用。我尝试过的方法如下。
首先我尝试使用VisitBlockDecl,获取BlockDecl主体并通过以下方式对其进行迭代以从中获取DeclRefExpr:
bool VisitBlockDecl (BlockDecl *block) {
CompoundStmt *blockBody = block->getCompoundBody();
for (CompoundStmt::body_iterator i = blockBody->body_begin(), e = blockBody->body_end(); i != e; ++i) {
if (Expr *expr = dyn_cast<Expr>(*i)) {
Expr *ref = expr->IgnoreImpCasts();
if (DeclRefExpr *dre = dyn_cast<DeclRefExpr>(ref)) {
printf("DeclRefExpr from CompoundStmt\n");
}
}
}
return true;
}
在这种情况下,我希望为位于 BlockDecl 内的 DeclRefExpr 输出 DeclRefExpr from CompoundStmt。但它不起作用。
然后我尝试其他方式并访问DeclRefExpr并使用ASTContext。但在这种情况下,我不知道如何获得DeclRefExpr父母。
有没有人知道如何解决这个任务?
【问题讨论】:
标签: clang llvm abstract-syntax-tree