【问题标题】:How to print source location from a clang AST Node如何从 clang AST 节点打印源位置
【发布时间】:2014-02-14 22:22:58
【问题描述】:

我正在大致遵循 http://clang.llvm.org/docs/LibASTMatchersTutorial.html 的教程。我设法创建了一个匹配类定义的 AST Matcher,我的 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,或者是否有其他方法可以获取可打印的源位置。

【问题讨论】:

    标签: c++ clang abstract-syntax-tree


    【解决方案1】:

    正确的 SourceManager 可以通过

    result.Context->getSourceManager();
    

    【讨论】:

      猜你喜欢
      • 2015-08-28
      • 1970-01-01
      • 1970-01-01
      • 2019-07-10
      • 2017-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-25
      相关资源
      最近更新 更多