微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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

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

我的问题是

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

谢谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。