Changeset 78dd0da for src/SymTab
- Timestamp:
- Dec 15, 2015, 2:56:43 PM (9 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, with_gc
- Children:
- 4389966, ffad73a
- Parents:
- 5e92fee
- Location:
- src/SymTab
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
src/SymTab/Mangler.cc
r5e92fee r78dd0da 30 30 31 31 namespace SymTab { 32 Mangler::Mangler( bool mangleOverridable ) : nextVarNum( 0 ), isTopLevel( true ), mangleOverridable( mangleOverridable ) { 33 } 34 35 //Mangler::Mangler( const Mangler & ) 36 // : mangleName(), varNums( varNums ), nextVarNum( nextVarNum ), isTopLevel( isTopLevel ) 37 //{ 38 //} 32 Mangler::Mangler( bool mangleOverridable, bool includeQualifiers ) 33 : nextVarNum( 0 ), isTopLevel( true ), mangleOverridable( mangleOverridable ), includeQualifiers(includeQualifiers) {} 34 39 35 Mangler::Mangler( const Mangler &rhs ) : mangleName() { 40 36 varNums = rhs.varNums; … … 42 38 isTopLevel = rhs.isTopLevel; 43 39 mangleOverridable = rhs.mangleOverridable; 40 includeQualifiers = rhs.includeQualifiers; 44 41 } 45 42 … … 209 206 210 207 void Mangler::printQualifiers( Type *type ) { 208 // skip if not including qualifiers 209 if ( ! includeQualifiers ) return; 210 211 211 if ( ! type->get_forall().empty() ) { 212 212 std::list< std::string > assertionNames; … … 227 227 varNums[ (*i )->get_name() ] = std::pair< int, int >( nextVarNum++, (int )(*i )->get_kind() ); 228 228 for ( std::list< DeclarationWithType* >::iterator assert = (*i )->get_assertions().begin(); assert != (*i )->get_assertions().end(); ++assert ) { 229 Mangler sub_mangler( mangleOverridable );229 Mangler sub_mangler( mangleOverridable, includeQualifiers ); 230 230 sub_mangler.nextVarNum = nextVarNum; 231 231 sub_mangler.isTopLevel = false; -
src/SymTab/Mangler.h
r5e92fee r78dd0da 22 22 23 23 namespace SymTab { 24 /// Mangles names to a unique C identifier 24 25 class Mangler : public Visitor { 25 26 public: 26 27 template< typename SynTreeClass > 27 static std::string mangle( SynTreeClass *decl, bool mangleOverridable = true ); // interface to clients28 static std::string mangle( SynTreeClass *decl, bool mangleOverridable = true, bool includeQualifiers = true ); // interface to clients 28 29 29 /// using Visitor::visit;30 30 virtual void visit( ObjectDecl *declaration ); 31 31 virtual void visit( FunctionDecl *declaration ); … … 45 45 std::string get_mangleName() { return mangleName.str(); } 46 46 private: 47 std::ostringstream mangleName; 47 std::ostringstream mangleName; ///< Mangled name being constructed 48 48 typedef std::map< std::string, std::pair< int, int > > VarMapType; 49 VarMapType varNums; 50 int nextVarNum; 51 bool isTopLevel; 52 bool mangleOverridable; 49 VarMapType varNums; ///< Map of type variables to indices 50 int nextVarNum; ///< Next type variable index 51 bool isTopLevel; ///< Is the Mangler at the top level 52 bool mangleOverridable; ///< Specially mangle overridable built-in methods 53 bool includeQualifiers; ///< Include type qualifiers in mangled name 53 54 54 Mangler( bool mangleOverridable );55 Mangler( bool mangleOverridable, bool includeQualifiers ); 55 56 Mangler( const Mangler & ); 56 57 … … 62 63 63 64 template< typename SynTreeClass > 64 std::string Mangler::mangle( SynTreeClass *decl, bool mangleOverridable ) {65 Mangler mangler( mangleOverridable );65 std::string Mangler::mangle( SynTreeClass *decl, bool mangleOverridable, bool includeQualifiers ) { 66 Mangler mangler( mangleOverridable, includeQualifiers ); 66 67 maybeAccept( decl, mangler ); 67 68 return mangler.get_mangleName();
Note: See TracChangeset
for help on using the changeset viewer.