def __load_classes( self ):
classes = {}#unique symbol id : class decl
is_udt = lambda smbl: smbl.symTag == msdia.SymTagUDT
self.logger.info( 'building udt objects' )
for udt_smbl in itertools.ifilter( is_udt, self.symbols.itervalues() ):
classes[udt_smbl.symIndexId] = self.__create_class(udt_smbl)
self.logger.info( 'building udt objects(%d) - done', len(classes) )
self.logger.info( 'integrating udt objects with namespaces' )
does_parent_exists = self.parent_exists_t( self.global_ns, classes, self.__id2decl )
while classes:
to_be_integrated = len( classes )
self.logger.info( 'there are %d classes to go', len( classes ) )
to_be_deleted = filter( does_parent_exists, classes.itervalues() )
map( self.__update_decls_tree, to_be_deleted )
map( lambda decl: classes.pop( decl.dia_symbols[0].symIndexId )
, to_be_deleted )
if not ( to_be_integrated - len( classes ) ):
for cls in classes.itervalues():
self.logger.warning( 'unable to integrate class "%s" into declarations tree', cls.dia_symbols[0].uname )
break
self.logger.info( 'integrating udt objects with namespaces - done' )
评论列表
文章目录