【发布时间】: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