169        struct __class_type_info : std::type_info
 
  173        struct __si_class_type_info : __class_type_info
 
  175            const __class_type_info* __base_type;
 
  178        struct __base_class_type_info
 
  180            const __class_type_info* __base_type;
 
  184        struct __vmi_class_type_info : __class_type_info
 
  186            unsigned int           __flags;
 
  187            unsigned int           __base_count;
 
  188            __base_class_type_info __base_info[1];
 
  194            std::set<const std::type_info*> seen_;
 
  197            Dumper( 
const char* label ) : label_( label ) {}
 
  198            void dump_type( 
const std::type_info* 
info, 
int indent );
 
  201        const int kIndent = 4;
 
  203        void Dumper::dump_type( 
const std::type_info* 
info, 
int indent )
 
  205            ::rtti_dump::dump_type( 
info, label_, indent * kIndent );
 
  212            const std::type_info*         info_type = runtime_typeid( 
info );
 
  213            __base_class_type_info        lone_base = { 0 };
 
  214            const __base_class_type_info* base_table = NULL;
 
  215            unsigned int                  base_count = 0;
 
  221            const int sub_indent_sp = ( indent + 1 ) * kIndent;
 
  223            if( info_type == NULL )
 
  226                RTTI_DUMP_LOG( 
"%s: %*sERROR: runtime_typeid(info) was NULL!", label_,
 
  229            else if( !strcmp( info_type->name(), 
"N10__cxxabiv120__si_class_type_infoE" ) )
 
  231                const __si_class_type_info& infox =
 
  232                        *
reinterpret_cast<const __si_class_type_info*
>( 
info );
 
  233                lone_base.__base_type = infox.__base_type;
 
  235                base_table = &lone_base;
 
  237            else if( !strcmp( info_type->name(), 
"N10__cxxabiv121__vmi_class_type_infoE" ) )
 
  239                const __vmi_class_type_info& infox =
 
  240                        *
reinterpret_cast<const __vmi_class_type_info*
>( 
info );
 
  241                base_count = infox.__base_count;
 
  242                base_table = infox.__base_info;
 
  247                if( seen_.find( 
info ) != seen_.end() )
 
  249                    RTTI_DUMP_LOG( 
"%s: %*sbase classes: ...elided...", label_, sub_indent_sp, 
"" );
 
  253                    RTTI_DUMP_LOG( 
"%s: %*sbase classes:", label_, sub_indent_sp, 
"" );
 
  254                    seen_.insert( 
info );
 
  256                    for( 
unsigned int i = 0; i < base_count; ++i )
 
  258                        dump_type( base_table[i].__base_type, indent + 2 );