Changeset a08ba92 for translator/SymTab/Mangler.cc
- Timestamp:
- May 19, 2015, 4:58:14 PM (11 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, ctor, deferred_resn, demangler, enum, forall-pointer-decay, gc_noraii, jacob/cs343-translation, jenkins-sandbox, master, memory, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, string, stuck-waitfor-destruct, with_gc
- Children:
- 843054c2
- Parents:
- 01aeade
- File:
-
- 1 edited
-
translator/SymTab/Mangler.cc (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
translator/SymTab/Mangler.cc
r01aeade ra08ba92 10 10 // Created On : Sun May 17 21:40:29 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun May 17 21:43:49201513 // Update Count : 212 // Last Modified On : Tue May 19 16:50:47 2015 13 // Update Count : 3 14 14 // 15 15 … … 30 30 31 31 namespace SymTab { 32 Mangler::Mangler() : nextVarNum( 0 ), isTopLevel( true ) {32 Mangler::Mangler() : nextVarNum( 0 ), isTopLevel( true ) { 33 33 } 34 34 … … 37 37 //{ 38 38 //} 39 Mangler::Mangler( const Mangler &rhs ) : mangleName() {39 Mangler::Mangler( const Mangler &rhs ) : mangleName() { 40 40 varNums = rhs.varNums; 41 41 nextVarNum = rhs.nextVarNum; 42 42 isTopLevel = rhs.isTopLevel; 43 }44 45 void Mangler::mangleDecl( DeclarationWithType *declaration ) {43 } 44 45 void Mangler::mangleDecl( DeclarationWithType *declaration ) { 46 46 bool wasTopLevel = isTopLevel; 47 47 if ( isTopLevel ) { … … 60 60 maybeAccept( declaration->get_type(), *this ); 61 61 isTopLevel = wasTopLevel; 62 }63 64 void Mangler::visit( ObjectDecl *declaration ) {62 } 63 64 void Mangler::visit( ObjectDecl *declaration ) { 65 65 mangleDecl( declaration ); 66 }67 68 void Mangler::visit( FunctionDecl *declaration ) {66 } 67 68 void Mangler::visit( FunctionDecl *declaration ) { 69 69 mangleDecl( declaration ); 70 }71 72 void Mangler::visit( VoidType *voidType ) {70 } 71 72 void Mangler::visit( VoidType *voidType ) { 73 73 printQualifiers( voidType ); 74 74 mangleName << "v"; 75 }76 77 void Mangler::visit( BasicType *basicType ) {75 } 76 77 void Mangler::visit( BasicType *basicType ) { 78 78 static const char *btLetter[] = { 79 79 "b", // Bool … … 102 102 printQualifiers( basicType ); 103 103 mangleName << btLetter[ basicType->get_kind() ]; 104 }105 106 void Mangler::visit( PointerType *pointerType ) {104 } 105 106 void Mangler::visit( PointerType *pointerType ) { 107 107 printQualifiers( pointerType ); 108 108 mangleName << "P"; 109 109 maybeAccept( pointerType->get_base(), *this ); 110 }111 112 void Mangler::visit( ArrayType *arrayType ) {110 } 111 112 void Mangler::visit( ArrayType *arrayType ) { 113 113 // TODO: encode dimension 114 114 printQualifiers( arrayType ); 115 115 mangleName << "A0"; 116 116 maybeAccept( arrayType->get_base(), *this ); 117 }118 119 namespace {117 } 118 119 namespace { 120 120 inline std::list< Type* > getTypes( const std::list< DeclarationWithType* > decls ) { 121 121 std::list< Type* > ret; … … 124 124 return ret; 125 125 } 126 }127 128 void Mangler::visit( FunctionType *functionType ) {126 } 127 128 void Mangler::visit( FunctionType *functionType ) { 129 129 printQualifiers( functionType ); 130 130 mangleName << "F"; … … 135 135 acceptAll( paramTypes, *this ); 136 136 mangleName << "_"; 137 }138 139 void Mangler::mangleRef( ReferenceToType *refType, std::string prefix ) {137 } 138 139 void Mangler::mangleRef( ReferenceToType *refType, std::string prefix ) { 140 140 printQualifiers( refType ); 141 141 mangleName << ( refType->get_name().length() + prefix.length() ) << prefix << refType->get_name(); 142 }143 144 void Mangler::visit( StructInstType *aggregateUseType ) {142 } 143 144 void Mangler::visit( StructInstType *aggregateUseType ) { 145 145 mangleRef( aggregateUseType, "s" ); 146 }147 148 void Mangler::visit( UnionInstType *aggregateUseType ) {146 } 147 148 void Mangler::visit( UnionInstType *aggregateUseType ) { 149 149 mangleRef( aggregateUseType, "u" ); 150 }151 152 void Mangler::visit( EnumInstType *aggregateUseType ) {150 } 151 152 void Mangler::visit( EnumInstType *aggregateUseType ) { 153 153 mangleRef( aggregateUseType, "e" ); 154 }155 156 void Mangler::visit( TypeInstType *typeInst ) {154 } 155 156 void Mangler::visit( TypeInstType *typeInst ) { 157 157 VarMapType::iterator varNum = varNums.find( typeInst->get_name() ); 158 158 if ( varNum == varNums.end() ) { … … 176 176 mangleName << std::string( numStream.str(), numStream.pcount() ); 177 177 } // if 178 }179 180 void Mangler::visit( TupleType *tupleType ) {178 } 179 180 void Mangler::visit( TupleType *tupleType ) { 181 181 printQualifiers( tupleType ); 182 182 mangleName << "T"; 183 183 acceptAll( tupleType->get_types(), *this ); 184 184 mangleName << "_"; 185 }186 187 void Mangler::visit( TypeDecl *decl ) {185 } 186 187 void Mangler::visit( TypeDecl *decl ) { 188 188 static const char *typePrefix[] = { "BT", "BD", "BF" }; 189 189 mangleName << typePrefix[ decl->get_kind() ] << ( decl->get_name().length() + 1 ) << decl->get_name(); 190 }191 192 void printVarMap( const std::map< std::string, std::pair< int, int > > &varMap, std::ostream &os ) {190 } 191 192 void printVarMap( const std::map< std::string, std::pair< int, int > > &varMap, std::ostream &os ) { 193 193 for ( std::map< std::string, std::pair< int, int > >::const_iterator i = varMap.begin(); i != varMap.end(); ++i ) { 194 194 os << i->first << "(" << i->second.first << "/" << i->second.second << ")" << std::endl; 195 195 } // for 196 }197 198 void Mangler::printQualifiers( Type *type ) {196 } 197 198 void Mangler::printQualifiers( Type *type ) { 199 199 if ( ! type->get_forall().empty() ) { 200 200 std::list< std::string > assertionNames; … … 242 242 mangleName << "A"; 243 243 } // if 244 }244 } 245 245 } // namespace SymTab 246 246
Note:
See TracChangeset
for help on using the changeset viewer.