Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/SymTab/Mangler.cc

    r7cddf77 rc3acf0aa  
    3131
    3232namespace SymTab {
    33         std::string Mangler::mangleType( Type * ty ) {
     33        std::string Mangler::mangleType( Type *ty ) {
    3434                Mangler mangler( false, true );
    3535                maybeAccept( ty, mangler );
     
    4848        }
    4949
    50         void Mangler::mangleDecl( DeclarationWithType * declaration ) {
     50        void Mangler::mangleDecl( DeclarationWithType *declaration ) {
    5151                bool wasTopLevel = isTopLevel;
    5252                if ( isTopLevel ) {
     
    7979        }
    8080
    81         void Mangler::visit( ObjectDecl * declaration ) {
     81        void Mangler::visit( ObjectDecl *declaration ) {
    8282                mangleDecl( declaration );
    8383        }
    8484
    85         void Mangler::visit( FunctionDecl * declaration ) {
     85        void Mangler::visit( FunctionDecl *declaration ) {
    8686                mangleDecl( declaration );
    8787        }
    8888
    89         void Mangler::visit( VoidType * voidType ) {
     89        void Mangler::visit( VoidType *voidType ) {
    9090                printQualifiers( voidType );
    9191                mangleName << "v";
    9292        }
    9393
    94         void Mangler::visit( BasicType * basicType ) {
     94        void Mangler::visit( BasicType *basicType ) {
    9595                static const char *btLetter[] = {
    9696                        "b",    // Bool
     
    121121        }
    122122
    123         void Mangler::visit( PointerType * pointerType ) {
     123        void Mangler::visit( PointerType *pointerType ) {
    124124                printQualifiers( pointerType );
    125125                mangleName << "P";
     
    127127        }
    128128
    129         void Mangler::visit( ArrayType * arrayType ) {
     129        void Mangler::visit( ArrayType *arrayType ) {
    130130                // TODO: encode dimension
    131131                printQualifiers( arrayType );
    132132                mangleName << "A0";
    133133                maybeAccept( arrayType->get_base(), *this );
    134         }
    135 
    136         void Mangler::visit( ReferenceType * refType ) {
    137                 printQualifiers( refType );
    138                 mangleName << "R";
    139                 maybeAccept( refType->get_base(), *this );
    140134        }
    141135
     
    149143        }
    150144
    151         void Mangler::visit( FunctionType * functionType ) {
     145        void Mangler::visit( FunctionType *functionType ) {
    152146                printQualifiers( functionType );
    153147                mangleName << "F";
     
    160154        }
    161155
    162         void Mangler::mangleRef( ReferenceToType * refType, std::string prefix ) {
     156        void Mangler::mangleRef( ReferenceToType *refType, std::string prefix ) {
    163157                printQualifiers( refType );
    164158
     
    166160        }
    167161
    168         void Mangler::mangleGenericRef( ReferenceToType * refType, std::string prefix ) {
     162        void Mangler::mangleGenericRef( ReferenceToType *refType, std::string prefix ) {
    169163                printQualifiers( refType );
    170164
     
    189183        }
    190184
    191         void Mangler::visit( StructInstType * aggregateUseType ) {
     185        void Mangler::visit( StructInstType *aggregateUseType ) {
    192186                if ( typeMode ) mangleGenericRef( aggregateUseType, "s" );
    193187                else mangleRef( aggregateUseType, "s" );
    194188        }
    195189
    196         void Mangler::visit( UnionInstType * aggregateUseType ) {
     190        void Mangler::visit( UnionInstType *aggregateUseType ) {
    197191                if ( typeMode ) mangleGenericRef( aggregateUseType, "u" );
    198192                else mangleRef( aggregateUseType, "u" );
    199193        }
    200194
    201         void Mangler::visit( EnumInstType * aggregateUseType ) {
     195        void Mangler::visit( EnumInstType *aggregateUseType ) {
    202196                mangleRef( aggregateUseType, "e" );
    203197        }
    204198
    205         void Mangler::visit( TypeInstType * typeInst ) {
     199        void Mangler::visit( TypeInstType *typeInst ) {
    206200                VarMapType::iterator varNum = varNums.find( typeInst->get_name() );
    207201                if ( varNum == varNums.end() ) {
     
    231225        }
    232226
    233         void Mangler::visit( TupleType * tupleType ) {
     227        void Mangler::visit( TupleType *tupleType ) {
    234228                printQualifiers( tupleType );
    235229                mangleName << "T";
    236                 acceptAll( tupleType->types, *this );
     230                acceptAll( tupleType->get_types(), *this );
    237231                mangleName << "_";
    238232        }
    239233
    240         void Mangler::visit( VarArgsType * varArgsType ) {
     234        void Mangler::visit( VarArgsType *varArgsType ) {
    241235                printQualifiers( varArgsType );
    242236                mangleName << "VARGS";
    243237        }
    244238
    245         void Mangler::visit( ZeroType * ) {
     239        void Mangler::visit( __attribute__((unused)) ZeroType *zeroType ) {
    246240                mangleName << "Z";
    247241        }
    248242
    249         void Mangler::visit( OneType * ) {
     243        void Mangler::visit( __attribute__((unused)) OneType *oneType ) {
    250244                mangleName << "O";
    251245        }
    252246
    253         void Mangler::visit( TypeDecl * decl ) {
     247        void Mangler::visit( TypeDecl *decl ) {
    254248                static const char *typePrefix[] = { "BT", "BD", "BF" };
    255                 mangleName << typePrefix[ decl->get_kind() ] << ( decl->name.length() + 1 ) << decl->name;
     249                mangleName << typePrefix[ decl->get_kind() ] << ( decl->get_name().length() + 1 ) << decl->get_name();
    256250        }
    257251
     
    262256        }
    263257
    264         void Mangler::printQualifiers( Type * type ) {
     258        void Mangler::printQualifiers( Type *type ) {
    265259                // skip if not including qualifiers
    266260                if ( typeMode ) return;
     
    270264                        int tcount = 0, dcount = 0, fcount = 0, vcount = 0;
    271265                        mangleName << "A";
    272                         for ( Type::ForallList::iterator i = type->forall.begin(); i != type->forall.end(); ++i ) {
     266                        for ( Type::ForallList::iterator i = type->get_forall().begin(); i != type->get_forall().end(); ++i ) {
    273267                                switch ( (*i)->get_kind() ) {
    274268                                  case TypeDecl::Any:
     
    287281                                        assert( false );
    288282                                } // switch
    289                                 varNums[ (*i)->name ] = std::pair< int, int >( nextVarNum++, (int)(*i)->get_kind() );
    290                                 for ( std::list< DeclarationWithType* >::iterator assert = (*i)->assertions.begin(); assert != (*i)->assertions.end(); ++assert ) {
     283                                varNums[ (*i )->get_name() ] = std::pair< int, int >( nextVarNum++, (int )(*i )->get_kind() );
     284                                for ( std::list< DeclarationWithType* >::iterator assert = (*i )->get_assertions().begin(); assert != (*i )->get_assertions().end(); ++assert ) {
    291285                                        Mangler sub_mangler( mangleOverridable, typeMode );
    292286                                        sub_mangler.nextVarNum = nextVarNum;
     
    309303                // Removed due to restrict not affecting function compatibility in GCC
    310304//              if ( type->get_isRestrict() ) {
    311 //                      mangleName << "E";
     305//                      mangleName << "R";
    312306//              } // if
    313307                if ( type->get_lvalue() ) {
    314                         // mangle based on whether the type is lvalue, so that the resolver can differentiate lvalues and rvalues
    315308                        mangleName << "L";
    316                 }
     309                } // if
    317310                if ( type->get_atomic() ) {
    318311                        mangleName << "A";
Note: See TracChangeset for help on using the changeset viewer.