如何从clang AST节点中打印源代码位置

8

我在松散地跟随http://clang.llvm.org/docs/LibASTMatchersTutorial.html上的教程。我成功创建了一个匹配类定义的AST匹配器,我的MatchFinder看起来像这样:

class ClassDeclPrinter : public MatchFinder::MatchCallback
{
public:
  virtual void run(const MatchFinder::MatchResult &result) override
  {
    if (clang::NamedDecl const* nd = result.Nodes.getNodeAs<clang::NamedDecl>("id"))
    {
      nd->dump();
    }
  }
};

如果我在匹配的节点上调用dump(),输出已经包含了它的文件和源位置:
CXXRecordDecl 0x10dd250 </home/name/llvm-dev/build/../../cpp/classes.cpp:4:1, line:6:1> class B definition

然而,当我调用getLocation()时,我只得到了一个SourceLocation对象,它的print()和dump()函数需要一个SourceManager实例才能工作。我不知道如何获取这个SourceManager,或者是否有另一种方法可以获得可打印的源位置。
1个回答

8

正确的SourceManager可以通过以下方式获得

result.Context->getSourceManager();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接