2011年11月20日日曜日

CLangでクラスの中身を調べる:クラスの重複反復を抑制する

ちょっと時間が空いた。llvmとclangを3.0 RC4にして継続。

clang::ASTContext::types_begin()だと、クラスが重複して反復されてしまう。これをなんとかしたい。でもclang::Typeやclang::CXXRecordDeclにはoperator==()がないので、反復済みかどうかの判定では対処できない。

clang::Typeのメンバ関数に、getTypeClass()というものがあった。これを調べてみると重複されて反復されるclang::Typeは片方がRecordでもう片方がElaboratedであるようだ。
clang::ASTContext::const_type_iterator t = astContext.types_begin();
clang::ASTContext::const_type_iterator eot = astContext.types_end();
for(; t != eot; ++t)
{
    if((*t)->getTypeClass() == clang::Type::Elaborated)
    {
        continue;
    }

これでOKになった。clang::Type::Recordのみ通すようにすれば確実性は上がるだろう。
※問題は、これが何を意味するのかさっぱり理解していないところだ・・・。

ところで、今年12/3のboost勉強会(#7)ではclangやるセッションがいくつかあるのね・・・。カミさんと日程調整していたら参加が締め切られてorz。

0 件のコメント:

コメントを投稿