1

我正在编写一个用于在 C 代码中插入断言的 clang 插件。我已经实现了一个类来访问每个一元运算符并检查它是否是指针解引用。如果是,我想为它插入一个 NULL 指针断言检查。但是我被卡住了,因为我无法弄清楚如何在 Clang 中获取包含 Expr 对象的 Stmt 对象。

这是我的代码,它检测断言但在一个完全错误的位置(即在指针取消引用之后。我想在包含取消引用的语句之前执行它。

bool MyRecursiveASTVisitor::VisitUnaryOperator(UnaryOperator *E){
    if (E->getOpcode() == UO_Deref ){
        Expr *e1 = E->getSubExpr();
        SourceLocation SL = E->getLocEnd();
        Rewrite.InsertText(SL, "assert(", true, true);
        Rewrite.InsertText(SL, Rewrite.ConvertToString(e1), true, true);
        Rewrite.InsertText(SL, " != NULL);", true, true);
    }
    return true;
}
4

1 回答 1

2

怎么样ASTContext::getParents

您还可以使用ParentMap该类构建部分父映射。

于 2013-09-18T13:15:44.630 回答