Clang 是否可能';不改变标题?
我有一个LibTooling(timelag),用于为每个forstmt/whilestmt添加一个标志。我使用Clang 是否可能';不改变标题?,clang,llvm,llvm-clang,libtooling,Clang,Llvm,Llvm Clang,Libtooling,我有一个LibTooling(timelag),用于为每个forstmt/whilestmt添加一个标志。我使用/timelag lalalala.cpp--在lalala.cpp中插入标志 不幸的是,此工具还将更改标头,甚至更改系统库 那么,是否有一些方法可以让LibTooling只处理输入文件?这里有两种可能性:如果使用RecursiveASTVisitor,可以使用SourceManager确定语句或声明的位置是否在主扩展文件中: clang::SourceManager &sm(
/timelag lalalala.cpp--
在lalala.cpp中插入标志
不幸的是,此工具还将更改标头,甚至更改系统库
那么,是否有一些方法可以让LibTooling只处理输入文件?这里有两种可能性:如果使用RecursiveASTVisitor,可以使用SourceManager确定语句或声明的位置是否在主扩展文件中:
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";
}
还有一个类似的匹配器,
isexpansionsystemheader
非常感谢您的支持。事实上,我正在使用文件路径来识别系统头,这看起来太愚蠢了。我将使用isInSystemHeader来改进我的代码。再次感谢你。
auto matcher = forStmt( isExpansionInMainFile());