首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有可能LibTooling不会改变报头?

有没有可能LibTooling不会改变报头?
EN

Stack Overflow用户
提问于 2017-07-18 09:16:58
回答 1查看 87关注 0票数 0

我有一个LibTooling (TimeFlag),它用于为每个forstmt/whilestmt添加一个标志。并且我使用./TimeFlag lalala.cpp --在lalala.cpp中插入标志

不幸的是,这个工具也会改变头文件,甚至系统库。

那么有没有什么方法可以让LibTooling只处理输入文件呢?

EN

回答 1

Stack Overflow用户

发布于 2017-07-19 23:05:12

这里有两种可能性:如果使用RecursiveASTVisitor,可以使用SourceManager来确定语句或声明的位置是否在主展开文件中:

代码语言:javascript
复制
clang::SourceManager &sm(astContext->getSourceManager());
bool const inMainFile(
  sm.isInMainFile( sm.getExpansionLoc( stmt->getLocStart())));
if(inMainFile){
  /* process decl or stmt */
}
else{
  std::cout << "'" << stmt->getNameAsString() << "' is not in main file\n";
}  

在SourceManager中有几种类似的方法,比如isInSystemHeader,可以帮助完成这项任务。

如果您使用的是AST匹配器,您可以使用isExpansionInMainFile来缩小匹配的节点范围:

代码语言:javascript
复制
auto matcher = forStmt( isExpansionInMainFile());

有一个类似的匹配器,isExpansionInSystemHeader

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45155944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档