我正在编写一个将表达式转换expr1 + expr2
为myFunc(expr1, expr2)
. 我面临的问题是,当且仅当我执行转换时,我必须注入包含 myFunc 声明的标头,也就是说,我的 AST 匹配器回调被成功调用。
我Matchcallback::onEndOfTranslationUnit()
通过检查一个简单的标志translationOccured
来决定是否必须注入标头来执行此操作。我可以通过检索位置来注入标头,SourceManager::getLocForStartOfFile()
但是有两个问题
- 它包含在所有内容之前,甚至是许可证注释
- 我无法检查该标题是否已包含在内。
我的问题是
- 如何获得第一个包含的位置?我可以在没有 的情况下向前移动位置
Lexer
吗? - 我可以在此阶段处理包含列表,还是应该使用
FrontendAction
like运行第二遍RewriteIncludesFrontend
?
谢谢。