Changeset a32b204 for translator/SymTab
- 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
- Location:
- translator/SymTab
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
translator/SymTab/AddVisit.h
rb87a5ed ra32b204 15 15 addVisitStatementList( std::list< Statement* > &statements, Visitor &visitor ) 16 16 { 17 for ( std::list< Statement* >::iterator i = statements.begin(); i != statements.end(); ++i ) {17 for ( std::list< Statement* >::iterator i = statements.begin(); i != statements.end(); ++i ) { 18 18 addDecls( visitor.get_declsToAdd(), statements, i ); 19 19 (*i)->accept( visitor ); … … 27 27 { 28 28 maybeAccept( stmt, visitor ); 29 /// if ( !declsToAdd.empty() ) {29 /// if ( ! declsToAdd.empty() ) { 30 30 /// CompoundStmt *compound = new CompoundStmt( noLabels ); 31 31 /// compound->get_kids().push_back( stmt ); -
translator/SymTab/AggregateTable.h
rb87a5ed ra32b204 25 25 AggregateDeclClass *operator()( AggregateDeclClass *existing, AggregateDeclClass *added ) 26 26 { 27 if ( existing->get_members().empty() ) {27 if ( existing->get_members().empty() ) { 28 28 return added; 29 } else if ( !added->get_members().empty() ) {29 } else if ( ! added->get_members().empty() ) { 30 30 throw SemanticError( "redeclaration of ", added ); 31 31 } -
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 } -
translator/SymTab/ImplementationType.cc
rb87a5ed ra32b204 45 45 ImplementationType implementor( indexer ); 46 46 type->accept( implementor ); 47 if ( implementor.get_result() == 0 ) {47 if ( implementor.get_result() == 0 ) { 48 48 return type->clone(); 49 49 } else { … … 87 87 { 88 88 /// FunctionType *newType = functionType->clone(); 89 /// for ( std::list< DeclarationWithType* >::iterator i = newType->get_parameters().begin(); i != newType->get_parameters().end(); ++i ) {89 /// for ( std::list< DeclarationWithType* >::iterator i = newType->get_parameters().begin(); i != newType->get_parameters().end(); ++i ) { 90 90 /// i->set_type( implementationType( i->get_type(), indexer ) ); 91 91 /// } 92 /// for ( std::list< DeclarationWithType* >::iterator i = newType->get_parameters().begin(); i != newType->get_parameters().end(); ++i ) {92 /// for ( std::list< DeclarationWithType* >::iterator i = newType->get_parameters().begin(); i != newType->get_parameters().end(); ++i ) { 93 93 /// i->set_type( implementationType( i->get_type(), indexer ) ); 94 94 /// } … … 119 119 { 120 120 NamedTypeDecl *typeDecl = indexer.lookupType( inst->get_name() ); 121 if ( typeDecl && typeDecl->get_base() ) {121 if ( typeDecl && typeDecl->get_base() ) { 122 122 Type *base = implementationType( typeDecl->get_base(), indexer ); 123 123 base->get_qualifiers() += inst->get_qualifiers(); … … 130 130 { 131 131 TupleType *newType = new TupleType( Type::Qualifiers() ); 132 for ( std::list< Type* >::iterator i = tupleType->get_types().begin(); i != tupleType->get_types().end(); ++i ) {132 for ( std::list< Type* >::iterator i = tupleType->get_types().begin(); i != tupleType->get_types().end(); ++i ) { 133 133 Type *implType = implementationType( *i, indexer ); 134 134 implType->get_qualifiers() += tupleType->get_qualifiers(); -
translator/SymTab/ImplementationType.h
rb87a5ed ra32b204 20 20 implementationTypeList( InputIterator begin, InputIterator end, OutputIterator out, const SymTab::Indexer &indexer ) 21 21 { 22 while ( begin != end ) {22 while ( begin != end ) { 23 23 *out++ = implementationType( *begin++, indexer ); 24 24 } -
translator/SymTab/Mangler.cc
rb87a5ed ra32b204 184 184 185 185 void Mangler::printQualifiers( Type *type ) { 186 if ( ! type->get_forall().empty() ) {186 if ( ! type->get_forall().empty() ) { 187 187 std::list< std::string > assertionNames; 188 188 int tcount = 0, dcount = 0, fcount = 0; -
translator/SymTab/StackTable.cc
rb87a5ed ra32b204 17 17 for ( typename TableType::iterator it = table.begin(); it != table.end(); ++it ) { 18 18 std::stack< Entry >& entry = it->second; 19 if ( ! entry.empty() && entry.top().second == scopeLevel ) {19 if ( ! entry.empty() && entry.top().second == scopeLevel ) { 20 20 entry.pop(); 21 21 } … … 28 28 void StackTable< Element, ConflictFunction >::add( Element *type ) { 29 29 std::stack< Entry >& entry = table[ type->get_name() ]; 30 if ( ! entry.empty() && entry.top().second == scopeLevel ) {30 if ( ! entry.empty() && entry.top().second == scopeLevel ) { 31 31 entry.top().first = conflictFunction( entry.top().first, type ); 32 32 } else { … … 45 45 if ( it == table.end() ) { 46 46 return 0; 47 } else if ( ! it->second.empty() ) {47 } else if ( ! it->second.empty() ) { 48 48 return it->second.top().first; 49 49 } else { … … 56 56 for ( typename TableType::const_iterator it = table.begin(); it != table.end(); ++it ) { 57 57 const std::stack< Entry >& entry = it->second; 58 if ( ! entry.empty() && entry.top().second == scopeLevel ) {58 if ( ! entry.empty() && entry.top().second == scopeLevel ) { 59 59 os << it->first << std::endl; 60 60 } -
translator/SymTab/TypeTable.h
rb87a5ed ra32b204 17 17 if ( existing->get_base() == 0 ) { 18 18 return added; 19 } else if ( added->get_base() == 0 ) {19 } else if ( added->get_base() == 0 ) { 20 20 return existing; 21 21 } else {
Note: See TracChangeset
for help on using the changeset viewer.