Changes in src/SymTab/Mangler.cc [7cddf77:c3acf0aa]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/SymTab/Mangler.cc
r7cddf77 rc3acf0aa 31 31 32 32 namespace SymTab { 33 std::string Mangler::mangleType( Type * 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 * 50 void Mangler::mangleDecl( DeclarationWithType *declaration ) { 51 51 bool wasTopLevel = isTopLevel; 52 52 if ( isTopLevel ) { … … 79 79 } 80 80 81 void Mangler::visit( ObjectDecl * 81 void Mangler::visit( ObjectDecl *declaration ) { 82 82 mangleDecl( declaration ); 83 83 } 84 84 85 void Mangler::visit( FunctionDecl * 85 void Mangler::visit( FunctionDecl *declaration ) { 86 86 mangleDecl( declaration ); 87 87 } 88 88 89 void Mangler::visit( VoidType * 89 void Mangler::visit( VoidType *voidType ) { 90 90 printQualifiers( voidType ); 91 91 mangleName << "v"; 92 92 } 93 93 94 void Mangler::visit( BasicType * 94 void Mangler::visit( BasicType *basicType ) { 95 95 static const char *btLetter[] = { 96 96 "b", // Bool … … 121 121 } 122 122 123 void Mangler::visit( PointerType * 123 void Mangler::visit( PointerType *pointerType ) { 124 124 printQualifiers( pointerType ); 125 125 mangleName << "P"; … … 127 127 } 128 128 129 void Mangler::visit( ArrayType * 129 void Mangler::visit( ArrayType *arrayType ) { 130 130 // TODO: encode dimension 131 131 printQualifiers( arrayType ); 132 132 mangleName << "A0"; 133 133 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 );140 134 } 141 135 … … 149 143 } 150 144 151 void Mangler::visit( FunctionType * 145 void Mangler::visit( FunctionType *functionType ) { 152 146 printQualifiers( functionType ); 153 147 mangleName << "F"; … … 160 154 } 161 155 162 void Mangler::mangleRef( ReferenceToType * 156 void Mangler::mangleRef( ReferenceToType *refType, std::string prefix ) { 163 157 printQualifiers( refType ); 164 158 … … 166 160 } 167 161 168 void Mangler::mangleGenericRef( ReferenceToType * 162 void Mangler::mangleGenericRef( ReferenceToType *refType, std::string prefix ) { 169 163 printQualifiers( refType ); 170 164 … … 189 183 } 190 184 191 void Mangler::visit( StructInstType * 185 void Mangler::visit( StructInstType *aggregateUseType ) { 192 186 if ( typeMode ) mangleGenericRef( aggregateUseType, "s" ); 193 187 else mangleRef( aggregateUseType, "s" ); 194 188 } 195 189 196 void Mangler::visit( UnionInstType * 190 void Mangler::visit( UnionInstType *aggregateUseType ) { 197 191 if ( typeMode ) mangleGenericRef( aggregateUseType, "u" ); 198 192 else mangleRef( aggregateUseType, "u" ); 199 193 } 200 194 201 void Mangler::visit( EnumInstType * 195 void Mangler::visit( EnumInstType *aggregateUseType ) { 202 196 mangleRef( aggregateUseType, "e" ); 203 197 } 204 198 205 void Mangler::visit( TypeInstType * 199 void Mangler::visit( TypeInstType *typeInst ) { 206 200 VarMapType::iterator varNum = varNums.find( typeInst->get_name() ); 207 201 if ( varNum == varNums.end() ) { … … 231 225 } 232 226 233 void Mangler::visit( TupleType * 227 void Mangler::visit( TupleType *tupleType ) { 234 228 printQualifiers( tupleType ); 235 229 mangleName << "T"; 236 acceptAll( tupleType-> types, *this );230 acceptAll( tupleType->get_types(), *this ); 237 231 mangleName << "_"; 238 232 } 239 233 240 void Mangler::visit( VarArgsType * 234 void Mangler::visit( VarArgsType *varArgsType ) { 241 235 printQualifiers( varArgsType ); 242 236 mangleName << "VARGS"; 243 237 } 244 238 245 void Mangler::visit( ZeroType *) {239 void Mangler::visit( __attribute__((unused)) ZeroType *zeroType ) { 246 240 mangleName << "Z"; 247 241 } 248 242 249 void Mangler::visit( OneType *) {243 void Mangler::visit( __attribute__((unused)) OneType *oneType ) { 250 244 mangleName << "O"; 251 245 } 252 246 253 void Mangler::visit( TypeDecl * 247 void Mangler::visit( TypeDecl *decl ) { 254 248 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(); 256 250 } 257 251 … … 262 256 } 263 257 264 void Mangler::printQualifiers( Type * 258 void Mangler::printQualifiers( Type *type ) { 265 259 // skip if not including qualifiers 266 260 if ( typeMode ) return; … … 270 264 int tcount = 0, dcount = 0, fcount = 0, vcount = 0; 271 265 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 ) { 273 267 switch ( (*i)->get_kind() ) { 274 268 case TypeDecl::Any: … … 287 281 assert( false ); 288 282 } // 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 ) { 291 285 Mangler sub_mangler( mangleOverridable, typeMode ); 292 286 sub_mangler.nextVarNum = nextVarNum; … … 309 303 // Removed due to restrict not affecting function compatibility in GCC 310 304 // if ( type->get_isRestrict() ) { 311 // mangleName << " E";305 // mangleName << "R"; 312 306 // } // if 313 307 if ( type->get_lvalue() ) { 314 // mangle based on whether the type is lvalue, so that the resolver can differentiate lvalues and rvalues315 308 mangleName << "L"; 316 } 309 } // if 317 310 if ( type->get_atomic() ) { 318 311 mangleName << "A";
Note: See TracChangeset
for help on using the changeset viewer.