如何在 Matchcallback::onEndOfTranslationUnit() 中正确注入标头

问题描述

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

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

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

我的问题是

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

谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)