我必须通过在它之前添加一个语句来处理clang中的某些语句。我有一个指向Expr对象的指针,我需要在包含它的语句之前插入另一个语句。现在我正在使用一个hacky方法,它只是移回SourceLocation指针直到我看到一个;或}或{。但这并不适用于所有情况。例如,当我尝试检测for语句时,它失败了。 clang中是否有任何类提供了一种更清洁的方法?
编辑:这是我的代码片段。我需要在包含指针解除引用的语句之前插入一个断言。
bool MyRecursiveASTVisitor::VisitUnaryOperator(UnaryOperator *E){
if (E->getOpcode() == UO_Deref ){
Expr *e1 = E->getSubExpr();
SourceLocation SL = E->getLocStart();
}
return true;
}
答案 0 :(得分:3)
您可以在返回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