Changeset a32b204 for translator/SymTab/IdTable.cc
- Timestamp:
- May 17, 2015, 1:19:35 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:
- 0dd3a2f
- Parents:
- b87a5ed
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
translator/SymTab/IdTable.cc
rb87a5ed ra32b204 33 33 IdTable::leaveScope() 34 34 { 35 for ( OuterTableType::iterator outer = table.begin(); outer != table.end(); ++outer ) {36 for ( InnerTableType::iterator inner = outer->second.begin(); inner != outer->second.end(); ++inner ) {35 for ( OuterTableType::iterator outer = table.begin(); outer != table.end(); ++outer ) { 36 for ( InnerTableType::iterator inner = outer->second.begin(); inner != outer->second.end(); ++inner ) { 37 37 std::stack< DeclEntry >& entry = inner->second; 38 if ( !entry.empty() && entry.top().second == scopeLevel ) {38 if ( ! entry.empty() && entry.top().second == scopeLevel ) { 39 39 entry.pop(); 40 40 } … … 51 51 const string &name = decl->get_name(); 52 52 string manglename; 53 if ( decl->get_linkage() == LinkageSpec::C ) {53 if ( decl->get_linkage() == LinkageSpec::C ) { 54 54 manglename = name; 55 55 } else { … … 58 58 InnerTableType &declTable = table[ name ]; 59 59 InnerTableType::iterator it = declTable.find( manglename ); 60 if ( it == declTable.end() ) {60 if ( it == declTable.end() ) { 61 61 declTable[ manglename ].push( DeclEntry( decl, scopeLevel ) ); 62 62 } else { 63 63 std::stack< DeclEntry >& entry = it->second; 64 if ( !entry.empty() && entry.top().second == scopeLevel ) {65 if ( decl->get_linkage() != LinkageSpec::C || ResolvExpr::typesCompatible( decl->get_type(), entry.top().first->get_type(), Indexer() ) ) {64 if ( ! entry.empty() && entry.top().second == scopeLevel ) { 65 if ( decl->get_linkage() != LinkageSpec::C || ResolvExpr::typesCompatible( decl->get_type(), entry.top().first->get_type(), Indexer() ) ) { 66 66 FunctionDecl *newentry = dynamic_cast< FunctionDecl* >( decl ); 67 67 FunctionDecl *old = dynamic_cast< FunctionDecl* >( entry.top().first ); 68 if ( newentry && old && newentry->get_statements() && old->get_statements() ) {68 if ( newentry && old && newentry->get_statements() && old->get_statements() ) { 69 69 throw SemanticError( "duplicate function definition for ", decl ); 70 70 } else { 71 71 ObjectDecl *newobj = dynamic_cast< ObjectDecl* >( decl ); 72 72 ObjectDecl *oldobj = dynamic_cast< ObjectDecl* >( entry.top().first ); 73 if ( newobj && oldobj && newobj->get_init() && oldobj->get_init() ) {73 if ( newobj && oldobj && newobj->get_init() && oldobj->get_init() ) { 74 74 throw SemanticError( "duplicate definition for ", decl ); 75 75 } … … 83 83 } 84 84 // ensure the set of routines with C linkage cannot be overloaded 85 for ( InnerTableType::iterator i = declTable.begin(); i != declTable.end(); ++i ) {86 if ( !i->second.empty() && i->second.top().first->get_linkage() == LinkageSpec::C && declTable.size() > 1 ) {85 for ( InnerTableType::iterator i = declTable.begin(); i != declTable.end(); ++i ) { 86 if ( ! i->second.empty() && i->second.top().first->get_linkage() == LinkageSpec::C && declTable.size() > 1 ) { 87 87 InnerTableType::iterator j = i; 88 for ( j++; j != declTable.end(); ++j ) {89 if ( !j->second.empty() && j->second.top().first->get_linkage() == LinkageSpec::C ) {88 for ( j++; j != declTable.end(); ++j ) { 89 if ( ! j->second.empty() && j->second.top().first->get_linkage() == LinkageSpec::C ) { 90 90 throw SemanticError( "invalid overload of C function " ); 91 91 } … … 99 99 { 100 100 OuterTableType::const_iterator outer = table.find( id ); 101 if ( outer == table.end() ) return;101 if ( outer == table.end() ) return; 102 102 const InnerTableType &declTable = outer->second; 103 for ( InnerTableType::const_iterator it = declTable.begin(); it != declTable.end(); ++it ) {103 for ( InnerTableType::const_iterator it = declTable.begin(); it != declTable.end(); ++it ) { 104 104 const std::stack< DeclEntry >& entry = it->second; 105 if ( !entry.empty() ) {105 if ( ! entry.empty() ) { 106 106 decls.push_back( entry.top().first ); 107 107 } … … 114 114 115 115 OuterTableType::const_iterator outer = table.find( id ); 116 if ( outer == table.end() ) return 0;116 if ( outer == table.end() ) return 0; 117 117 const InnerTableType &declTable = outer->second; 118 for ( InnerTableType::const_iterator it = declTable.begin(); it != declTable.end(); ++it ) {118 for ( InnerTableType::const_iterator it = declTable.begin(); it != declTable.end(); ++it ) { 119 119 const std::stack< DeclEntry >& entry = it->second; 120 if ( !entry.empty() && entry.top().second > depth ) {120 if ( ! entry.empty() && entry.top().second > depth ) { 121 121 result = entry.top().first; 122 122 depth = entry.top().second; … … 129 129 IdTable::dump( std::ostream &os ) const 130 130 { 131 for ( OuterTableType::const_iterator outer = table.begin(); outer != table.end(); ++outer ) {132 for ( InnerTableType::const_iterator inner = outer->second.begin(); inner != outer->second.end(); ++inner ) {131 for ( OuterTableType::const_iterator outer = table.begin(); outer != table.end(); ++outer ) { 132 for ( InnerTableType::const_iterator inner = outer->second.begin(); inner != outer->second.end(); ++inner ) { 133 133 #if 0 134 134 const std::stack< DeclEntry >& entry = inner->second; 135 if ( !entry.empty() ) { // && entry.top().second == scopeLevel ) {135 if ( ! entry.empty() ) { // && entry.top().second == scopeLevel ) { 136 136 os << outer->first << " (" << inner->first << ") (" << entry.top().second << ")" << std::endl; 137 137 } else { … … 142 142 std::stack<DeclEntry> stack = inner->second; 143 143 os << "dumping a stack" << std::endl; 144 while (! stack.empty()) {144 while (! stack.empty()) { 145 145 DeclEntry d = stack.top(); 146 146 os << outer->first << " (" << inner->first << ") (" << d.second << ") " << std::endl; … … 151 151 } 152 152 #if 0 153 for ( OuterTableType::const_iterator outer = table.begin(); outer != table.end(); ++outer ) {154 for ( InnerTableType::const_iterator inner = outer->second.begin(); inner != outer->second.end(); ++inner ) {153 for ( OuterTableType::const_iterator outer = table.begin(); outer != table.end(); ++outer ) { 154 for ( InnerTableType::const_iterator inner = outer->second.begin(); inner != outer->second.end(); ++inner ) { 155 155 const std::stack< DeclEntry >& entry = inner->second; 156 if ( !entry.empty() && entry.top().second == scopeLevel ) {156 if ( ! entry.empty() && entry.top().second == scopeLevel ) { 157 157 os << outer->first << " (" << inner->first << ") (" << scopeLevel << ")" << std::endl; 158 158 }
Note: See TracChangeset
for help on using the changeset viewer.