我正在研究CLang 3.5。我试图获取有关在C ++项目中声明的变量的信息。
如何在clang::VarDecl
,clang::FieldDecl
或clang::ParmVarDecl
对象中获取变量的数据类型或限定类名?我试图找到一个函数,它可以返回此处提供的clang::VarDecl
文档中变量的数据类型或类名。
http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html
我还尝试查看$LLVM/tools/clang/tools/clang-check/ClangCheck.cpp
的代码,因为在传递cmd arg --ast-dump
时,它显示了有关每个AST节点的所有信息,包括声明的所有变量。我想知道如何访问所有这些信息。
我正在使用ASTMatchers
来查找我的变量声明,它们是:
fieldDecl().bind("field")
parmVarDecl().bind("param")
varDecl().bind("var")
有人可以告诉我如何获得所有变量的数据类型?
答案 0 :(得分:1)
最近,我正在学习Clang
,我在阅读完这个问题后写了一些代码。它可能会对你有帮助。
完整源代码可在github.com中找到 (见ex04.cc)
DeclarationMatcher FieldDeclMatcher =
clang::ast_matchers::fieldDecl().bind("field_decl");
class LoopPrinter : public MatchFinder::MatchCallback
{
public :
virtual void run(const MatchFinder::MatchResult& result)
{
if (const clang::FieldDecl* fd
= result.Nodes.getNodeAs<clang::FieldDecl>("field_decl"))
{
std::cout << "======== FieldDecl found ======" << std::endl;
const clang::RecordDecl* rd = fd->getParent();
const clang::QualType qt = fd->getType();
const clang::Type* t = qt.getTypePtr();
std::cout << "FieldDecl found '"
<< fd->getQualifiedNameAsString() << " "
<< fd->getName().str() << "' in '"
<< rd->getName().str() << "'. "
<< "is Builtintype = " << t->isBuiltinType() << " "
<< std::endl << std::endl;
}
} // end of run()
};