如何在另一个语句之前使用clang插入一个语句

如何在另一个语句之前使用clang插入一个语句,clang,llvm,instrumentation,Clang,Llvm,Instrumentation,我必须在某些语句之前添加一个语句,从而使其发出铿锵声。我有一个指向Expr对象的指针,我需要使用它在包含它的语句之前插入另一个语句。现在我使用的是一种黑客方法,它只是将SourceLocation指针向后移动,直到我看到一个;或}或{。但这并不适用于所有情况。例如,当我尝试插入for语句时,它失败了。clang中是否有任何类提供了一种更干净的方法来实现这一点 编辑:这是我的代码片段。我需要在包含指针取消引用的语句之前插入一个断言 bool MyRecursiveASTVisitor::Visit

我必须在某些语句之前添加一个语句,从而使其发出铿锵声。我有一个指向Expr对象的指针,我需要使用它在包含它的语句之前插入另一个语句。现在我使用的是一种黑客方法,它只是将SourceLocation指针向后移动,直到我看到一个;或}或{。但这并不适用于所有情况。例如,当我尝试插入for语句时,它失败了。clang中是否有任何类提供了一种更干净的方法来实现这一点

编辑:这是我的代码片段。我需要在包含指针取消引用的语句之前插入一个断言

bool MyRecursiveASTVisitor::VisitUnaryOperator(UnaryOperator *E){
    if (E->getOpcode() == UO_Deref ){
        Expr *e1 = E->getSubExpr();
        SourceLocation SL = E->getLocStart();
    }
    return true;
}
您可以在返回SourceRange类的语句上使用将返回的
getBegin()

您可以签出并在那里看到一个示例

编辑


为了从Stmt中提取Expr,你可以检查这个问题,所以你是否使用libclang的clang插件LibTooling?我想我正在使用LibTooling。我使用了一个用于插入的启动代码,所以我不能完全确定。虽然我没有Stmt指针,但我所得到的只是语句中指向Expr的指针。有什么方法吗要使用Expr指针指向Stmt指针?@anirudh-你能展示一下你的代码片段吗…我不确定我是否理解你的意思