我写一个铛插件在C代码中插入断言。 我实现了一个类访问每个一元运算符,并检查它是否是一个指针引用。 如果是这样,我想插入一个空指针断言检查它。 但我坚持,因为我无法弄清楚如何使包含在锵后面的Expr对象的语句对象。
这是我的代码,仪器的说法,但在一个完全错误的位置(即刚刚指针引用后,我想只含有反引用的语句之前做到这一点。
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;
}