0

我正在编写一个将表达式转换expr1 + expr2myFunc(expr1, expr2). 我面临的问题是,当且仅当我执行转换时,我必须注入包含 myFunc 声明的标头,也就是说,我的 AST 匹配器回调被成功调用。

Matchcallback::onEndOfTranslationUnit()通过检查一个简单的标志translationOccured来决定是否必须注入标头来执行此操作。我可以通过检索位置来注入标头,SourceManager::getLocForStartOfFile()但是有两个问题

  1. 它包含在所有内容之前,甚至是许可证注释
  2. 我无法检查该标题是否已包含在内。

我的问题是

  1. 如何获得第一个包含的位置?我可以在没有 的情况下向前移动位置Lexer吗?
  2. 我可以在此阶段处理包含列表,还是应该使用FrontendActionlike运行第二遍RewriteIncludesFrontend

谢谢。

4

0 回答 0