DLi*_*ght 2 clang llvm-clang libtooling
我正在使用Clang / libtooling(ASTComsumer带有Matcher)来访问所有return语句(ReturnStmt)。我需要提取return字符串形式的关键字之后的表达式,以便可以将其放入替换return语句的宏中。
例如,我要替换以下行:
return somefunc() + 1;
Run Code Online (Sandbox Code Playgroud)
与
FUNCTION_EXIT(somefunc() + 1); // FUNCTION_EXIT is a C macro
Run Code Online (Sandbox Code Playgroud)
return进行一些记录后,宏将从函数中获取。
我正在使用ReturnStmt::getRetValue()该返回值,Expr并尝试以字符串形式获取它(以便可以将其传递给宏),但是我还没有找到一种方法。有没有一种方法可以分类Expr?
Clang在抽象语法树(AST)和实际源代码之间严格考虑了关注点。在这两者之间进行转换的组件是Lexer。获取原始资源Expr e:
const string text = Lexer::getSourceText(e.getSourceRange(), source_manager, opt);
Run Code Online (Sandbox Code Playgroud)
请注意,可以从ASTContext获得SourceManager和LangOptions。如果您要解析的代码具有宏,那么事情就会变得更加复杂,因为您必须注意拼写位置与扩展位置;SourceManager具有许多不同的功能,可以在这些功能之间进行转换。
祝好运!
| 归档时间: |
|
| 查看次数: |
567 次 |
| 最近记录: |