Changeset d67cdb7 for src/SymTab/Mangler.cc
- Timestamp:
- Sep 26, 2017, 11:27:38 PM (7 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
- Children:
- 5dc26f5
- Parents:
- 201aeb9
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/SymTab/Mangler.cc
r201aeb9 rd67cdb7 31 31 32 32 namespace SymTab { 33 std::string Mangler::mangleType( Type * ty ) {33 std::string Mangler::mangleType( Type * ty ) { 34 34 Mangler mangler( false, true ); 35 35 maybeAccept( ty, mangler ); … … 48 48 } 49 49 50 void Mangler::mangleDecl( DeclarationWithType * declaration ) {50 void Mangler::mangleDecl( DeclarationWithType * declaration ) { 51 51 bool wasTopLevel = isTopLevel; 52 52 if ( isTopLevel ) { … … 79 79 } 80 80 81 void Mangler::visit( ObjectDecl * declaration ) {81 void Mangler::visit( ObjectDecl * declaration ) { 82 82 mangleDecl( declaration ); 83 83 } 84 84 85 void Mangler::visit( FunctionDecl * declaration ) {85 void Mangler::visit( FunctionDecl * declaration ) { 86 86 mangleDecl( declaration ); 87 87 } 88 88 89 void Mangler::visit( VoidType * voidType ) {89 void Mangler::visit( VoidType * voidType ) { 90 90 printQualifiers( voidType ); 91 91 mangleName << "v"; 92 92 } 93 93 94 void Mangler::visit( BasicType * basicType ) {94 void Mangler::visit( BasicType * basicType ) { 95 95 static const char *btLetter[] = { 96 96 "b", // Bool … … 123 123 } 124 124 125 void Mangler::visit( PointerType * pointerType ) {125 void Mangler::visit( PointerType * pointerType ) { 126 126 printQualifiers( pointerType ); 127 127 mangleName << "P"; … … 129 129 } 130 130 131 void Mangler::visit( ArrayType * arrayType ) {131 void Mangler::visit( ArrayType * arrayType ) { 132 132 // TODO: encode dimension 133 133 printQualifiers( arrayType ); … … 136 136 } 137 137 138 void Mangler::visit( ReferenceType * refType ) {138 void Mangler::visit( ReferenceType * refType ) { 139 139 printQualifiers( refType ); 140 140 mangleName << "R"; … … 151 151 } 152 152 153 void Mangler::visit( FunctionType * functionType ) {153 void Mangler::visit( FunctionType * functionType ) { 154 154 printQualifiers( functionType ); 155 155 mangleName << "F"; … … 162 162 } 163 163 164 void Mangler::mangleRef( ReferenceToType * refType, std::string prefix ) {164 void Mangler::mangleRef( ReferenceToType * refType, std::string prefix ) { 165 165 printQualifiers( refType ); 166 166 … … 168 168 } 169 169 170 void Mangler::mangleGenericRef( ReferenceToType * refType, std::string prefix ) {170 void Mangler::mangleGenericRef( ReferenceToType * refType, std::string prefix ) { 171 171 printQualifiers( refType ); 172 172 … … 191 191 } 192 192 193 void Mangler::visit( StructInstType * aggregateUseType ) {193 void Mangler::visit( StructInstType * aggregateUseType ) { 194 194 if ( typeMode ) mangleGenericRef( aggregateUseType, "s" ); 195 195 else mangleRef( aggregateUseType, "s" ); 196 196 } 197 197 198 void Mangler::visit( UnionInstType * aggregateUseType ) {198 void Mangler::visit( UnionInstType * aggregateUseType ) { 199 199 if ( typeMode ) mangleGenericRef( aggregateUseType, "u" ); 200 200 else mangleRef( aggregateUseType, "u" ); 201 201 } 202 202 203 void Mangler::visit( EnumInstType * aggregateUseType ) {203 void Mangler::visit( EnumInstType * aggregateUseType ) { 204 204 mangleRef( aggregateUseType, "e" ); 205 205 } 206 206 207 void Mangler::visit( TypeInstType * typeInst ) {207 void Mangler::visit( TypeInstType * typeInst ) { 208 208 VarMapType::iterator varNum = varNums.find( typeInst->get_name() ); 209 209 if ( varNum == varNums.end() ) { … … 233 233 } 234 234 235 void Mangler::visit( TupleType * tupleType ) {235 void Mangler::visit( TupleType * tupleType ) { 236 236 printQualifiers( tupleType ); 237 237 mangleName << "T"; 238 acceptAll( tupleType-> get_types(), *this );238 acceptAll( tupleType->types, *this ); 239 239 mangleName << "_"; 240 240 } 241 241 242 void Mangler::visit( VarArgsType * varArgsType ) {242 void Mangler::visit( VarArgsType * varArgsType ) { 243 243 printQualifiers( varArgsType ); 244 244 mangleName << "VARGS"; 245 245 } 246 246 247 void Mangler::visit( __attribute__((unused)) ZeroType *zeroType) {247 void Mangler::visit( ZeroType * ) { 248 248 mangleName << "Z"; 249 249 } 250 250 251 void Mangler::visit( __attribute__((unused)) OneType *oneType) {251 void Mangler::visit( OneType * ) { 252 252 mangleName << "O"; 253 253 } 254 254 255 void Mangler::visit( TypeDecl * decl ) {255 void Mangler::visit( TypeDecl * decl ) { 256 256 static const char *typePrefix[] = { "BT", "BD", "BF" }; 257 mangleName << typePrefix[ decl->get_kind() ] << ( decl-> get_name().length() + 1 ) << decl->get_name();257 mangleName << typePrefix[ decl->get_kind() ] << ( decl->name.length() + 1 ) << decl->name; 258 258 } 259 259 … … 264 264 } 265 265 266 void Mangler::printQualifiers( Type * type ) {266 void Mangler::printQualifiers( Type * type ) { 267 267 // skip if not including qualifiers 268 268 if ( typeMode ) return; … … 272 272 int tcount = 0, dcount = 0, fcount = 0, vcount = 0; 273 273 mangleName << "A"; 274 for ( Type::ForallList::iterator i = type-> get_forall().begin(); i != type->get_forall().end(); ++i ) {274 for ( Type::ForallList::iterator i = type->forall.begin(); i != type->forall.end(); ++i ) { 275 275 switch ( (*i)->get_kind() ) { 276 276 case TypeDecl::Any: … … 289 289 assert( false ); 290 290 } // switch 291 varNums[ (*i )->get_name() ] = std::pair< int, int >( nextVarNum++, (int )(*i)->get_kind() );292 for ( std::list< DeclarationWithType* >::iterator assert = (*i )->get_assertions().begin(); assert != (*i )->get_assertions().end(); ++assert ) {291 varNums[ (*i)->name ] = std::pair< int, int >( nextVarNum++, (int)(*i)->get_kind() ); 292 for ( std::list< DeclarationWithType* >::iterator assert = (*i)->assertions.begin(); assert != (*i)->assertions.end(); ++assert ) { 293 293 Mangler sub_mangler( mangleOverridable, typeMode ); 294 294 sub_mangler.nextVarNum = nextVarNum; … … 309 309 mangleName << "V"; 310 310 } // if 311 if ( type->get_mutex() ) { 312 mangleName << "M"; 313 } // if 311 314 // Removed due to restrict not affecting function compatibility in GCC 312 315 // if ( type->get_isRestrict() ) { … … 314 317 // } // if 315 318 if ( type->get_lvalue() ) { 319 // mangle based on whether the type is lvalue, so that the resolver can differentiate lvalues and rvalues 316 320 mangleName << "L"; 317 } // if321 } 318 322 if ( type->get_atomic() ) { 319 323 mangleName << "A";
Note: See TracChangeset
for help on using the changeset viewer.