代码之家  ›  专栏  ›  技术社区  ›  anirudh

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

  •  6
  • anirudh  · 技术社区  · 10 年前

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

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

    bool MyRecursiveASTVisitor::VisitUnaryOperator(UnaryOperator *E){
        if (E->getOpcode() == UO_Deref ){
            Expr *e1 = E->getSubExpr();
            SourceLocation SL = E->getLocStart();
        }
        return true;
    }
    
    1 回复  |  直到 10 年前
        1
  •  3
  •   Community Keith    7 年前

    您可以使用 getSourceRange() 返回的语句 SourceRange SourceRange类具有 getBegin() 它将返回 SourceLocation .

    你可以结账 https://github.com/eschulte/clang-mutate 看一个例子。。。

    编辑 :

    为了从Stmt中提取Expr,您可以检查此SO问题 How to get Stmt class object from Expr object in Clang