Я работаю над 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")
Кто-нибудь, пожалуйста, скажите мне, как я могу получить тип данных всех переменных delcared?
Недавно я учусь 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()
};
Других решений пока нет …