我最近开始在Fedora 22机器上使用Clang 3.8来制作一个解析clang AST并从AST节点中提取一些信息的工具。该工具应该用C,C ++和SystemC文件读取。
当我使用我的工具读取文件并转储AST时,它也会显示系统标题的AST。
因此我的问题: 如何让我的工具不显示系统标题的AST?因为我将修改文件,我担心系统头会产生开销。
PS。我已经尝试过isInSystemHeader()函数,但它没有帮助。因为解析器只是不断挖掘系统头,并在某些时候产生错误。错误是
"/llvm/tools/clang/lib/Basic/SourceLocation.cpp:117: bool clang::FullSourceLoc::isInSystemHeader() const: Assertion `isValid()' failed.
中止(核心倾销)"
指向解决方案的指针或解决方案将受到高度赞赏:) 感谢。
答案 0 :(得分:1)
尝试:
FullSourceLoc fullSourceLoc(decl->getLocation(), astContext.getSourceManager());
if (fullSourceLoc.isValid() && !fullSourceLoc.isInSystemHeader()) {
// system header excluded here
}