Ben*_*nno 6 c++ clang abstract-syntax-tree
我正在松散地关注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();
}
}
};
Run Code Online (Sandbox Code Playgroud)
如果我在匹配的节点上调用dump(),则输出已包含其文件和源位置:
CXXRecordDecl 0x10dd250 </home/name/llvm-dev/build/../../cpp/classes.cpp:4:1, line:6:1> class B definition
Run Code Online (Sandbox Code Playgroud)
但是,当我调用getLocation()时,我只获得一个SourceLocation对象,其print()和dump()函数需要一个SourceManager实例才能工作.我不知道如何获取此SourceManager,或者是否有另一种方法来获取可打印的源位置.
可通过以下方式获得正确的SourceManager
result.Context->getSourceManager();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1631 次 |
| 最近记录: |