base_class_iterator bases_begin() { return data().getBases(); }
名前から、当該型の基本クラスを反復できることは容易に想像できる。
ところがこのbases_begin()をコールするとアサーションされてしまう。どうもメンバ変数が設定されてない様子。
CXXRecordDecl::hasDecinition()にて、このメンバ変数が設定されているかどうかを判定できるようだ。
こんなコードで
clang::ASTContext::const_type_iterator t = astContext.types_begin();
clang::ASTContext::const_type_iterator eot = astContext.types_end();
for(; t != eot; ++t)
{
clang::CXXRecordDecl* pDecl = (*t)->getAsCXXRecordDecl();
if( (pDecl != nullptr) && pDecl->isClass() )
{
if(pDecl->hasDefinition())
{
clang::CXXRecordDecl::base_class_iterator base = pDecl->bases_begin();
clang::CXXRecordDecl::base_class_iterator eobase = pDecl->bases_end();
for(; base != eobase; ++base)
{
base->getType().dump();
}
}
}
}
こんな結果
: class Super identifier
正しく判定できている様子。
このhasDefinition()が何を意味するのか・・・。
0 件のコメント:
コメントを投稿