Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/SymTab/Mangler.cc

    r69911c11 r78dd0da  
    3030
    3131namespace SymTab {
    32         std::string Mangler::mangleType( Type *ty ) {
    33                 Mangler mangler( false, true );
    34                 maybeAccept( ty, mangler );
    35                 return mangler.get_mangleName();
    36         }
    37        
    38         Mangler::Mangler( bool mangleOverridable, bool typeMode )
    39                 : nextVarNum( 0 ), isTopLevel( true ), mangleOverridable( mangleOverridable ), typeMode( typeMode ) {}
     32        Mangler::Mangler( bool mangleOverridable, bool includeQualifiers )
     33                : nextVarNum( 0 ), isTopLevel( true ), mangleOverridable( mangleOverridable ), includeQualifiers(includeQualifiers) {}
    4034               
    4135        Mangler::Mangler( const Mangler &rhs ) : mangleName() {
     
    4438                isTopLevel = rhs.isTopLevel;
    4539                mangleOverridable = rhs.mangleOverridable;
    46                 typeMode = rhs.typeMode;
     40                includeQualifiers = rhs.includeQualifiers;
    4741        }
    4842
     
    155149        void Mangler::mangleRef( ReferenceToType *refType, std::string prefix ) {
    156150                printQualifiers( refType );
    157 
    158151                mangleName << ( refType->get_name().length() + prefix.length() ) << prefix << refType->get_name();
    159152        }
    160153
    161         void Mangler::mangleGenericRef( ReferenceToType *refType, std::string prefix ) {
    162                 printQualifiers( refType );
    163 
    164                 std::ostringstream oldName( mangleName.str() );
    165                 mangleName.clear();
    166 
    167                 mangleName << prefix << refType->get_name();
    168 
    169                 std::list< Expression* >& params = refType->get_parameters();
    170                 if ( ! params.empty() ) {
    171                         mangleName << "_";
    172                         for ( std::list< Expression* >::const_iterator param = params.begin(); param != params.end(); ++param ) {
    173                                 TypeExpr *paramType = dynamic_cast< TypeExpr* >( *param );
    174                                 assert(paramType && "Aggregate parameters should be type expressions");
    175                                 maybeAccept( paramType->get_type(), *this );
    176                         }
    177                         mangleName << "_";
    178                 }
    179 
    180                 oldName << mangleName.str().length() << mangleName.str();
    181                 mangleName.str( oldName.str() );
    182         }
    183 
    184154        void Mangler::visit( StructInstType *aggregateUseType ) {
    185                 if ( typeMode ) mangleGenericRef( aggregateUseType, "s" );
    186                 else mangleRef( aggregateUseType, "s" );
     155                mangleRef( aggregateUseType, "s" );
    187156        }
    188157
    189158        void Mangler::visit( UnionInstType *aggregateUseType ) {
    190                 if ( typeMode ) mangleGenericRef( aggregateUseType, "u" );
    191                 else mangleRef( aggregateUseType, "u" );
     159                mangleRef( aggregateUseType, "u" );
    192160        }
    193161
     
    239207        void Mangler::printQualifiers( Type *type ) {
    240208                // skip if not including qualifiers
    241                 if ( typeMode ) return;
     209                if ( ! includeQualifiers ) return;
    242210               
    243211                if ( ! type->get_forall().empty() ) {
     
    259227                                varNums[ (*i )->get_name() ] = std::pair< int, int >( nextVarNum++, (int )(*i )->get_kind() );
    260228                                for ( std::list< DeclarationWithType* >::iterator assert = (*i )->get_assertions().begin(); assert != (*i )->get_assertions().end(); ++assert ) {
    261                                         Mangler sub_mangler( mangleOverridable, typeMode );
     229                                        Mangler sub_mangler( mangleOverridable, includeQualifiers );
    262230                                        sub_mangler.nextVarNum = nextVarNum;
    263231                                        sub_mangler.isTopLevel = false;
Note: See TracChangeset for help on using the changeset viewer.