Changeset b067d9b for src/Parser/TypedefTable.cc
- Timestamp:
- Oct 29, 2019, 4:01:24 PM (6 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- 773db65, 9421f3d8
- Parents:
- 7951100 (diff), 8364209 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/TypedefTable.cc
r7951100 rb067d9b 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // TypedefTable.cc -- 7 // TypedefTable.cc -- 8 8 // 9 9 // Author : Peter A. Buhr 10 10 // Created On : Sat May 16 15:20:13 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Jun 7 13:17:56201813 // Update Count : 19212 // Last Modified On : Wed Jul 25 15:32:35 2018 13 // Update Count : 258 14 14 // 15 15 … … 51 51 } // TypedefTable::exists 52 52 53 bool TypedefTable::existsCurr( const string & identifier ) { 54 return kindTable.findAt( kindTable.currentScope() - 1, identifier ) != kindTable.end(); 55 } // TypedefTable::exists 56 53 57 int TypedefTable::isKind( const string & identifier ) const { 54 58 KindTable::const_iterator posn = kindTable.find( identifier ); … … 77 81 auto scope = kindTable.currentScope(); 78 82 debugPrint( cerr << "Adding current at " << locn << " " << identifier << " as " << kindName( kind ) << " scope " << scope << endl ); 79 auto ret = kindTable.insertAt( scope, identifier, kind ); 80 if ( ! ret.second ) ret.first->second = kind; // exists => update 83 kindTable.insertAt( scope, identifier, kind ); 81 84 } // TypedefTable::addToScope 82 85 83 86 void TypedefTable::addToEnclosingScope( const string & identifier, int kind, const char * locn __attribute__((unused)) ) { 84 a ssert( kindTable.currentScope() >= 1 );85 auto scope = kindTable.currentScope() - 1;86 debugPrint( cerr << "Adding enclosing at " << locn << " " << identifier << " as " << kindName( kind ) << " scope " << scope << endl );87 auto scope = kindTable.currentScope() - 1 - kindTable.getNote( kindTable.currentScope() - 1 ).level; 88 // auto scope = level - kindTable.getNote( kindTable.currentScope() - 1 ).level; 89 debugPrint( cerr << "Adding enclosing at " << locn << " " << identifier << " as " << kindName( kind ) << " scope " << scope << " level " << level << " note " << kindTable.getNote( kindTable.currentScope() - 1 ).level << endl ); 87 90 auto ret = kindTable.insertAt( scope, identifier, kind ); 88 if ( ! ret.second ) ret.first->second = kind; 91 if ( ! ret.second ) ret.first->second = kind; // exists => update 89 92 } // TypedefTable::addToEnclosingScope 90 93 91 94 void TypedefTable::enterScope() { 92 kindTable.beginScope(); 93 debugPrint( cerr << "Entering scope " << kindTable.currentScope() << endl ); 94 debugPrint( print() ); 95 kindTable.beginScope( (Note){ 0, false } ); 96 debugPrint( cerr << "Entering scope " << kindTable.currentScope() << " level " << level << endl; print() ); 95 97 } // TypedefTable::enterScope 96 98 97 99 void TypedefTable::leaveScope() { 98 debugPrint( cerr << "Leaving scope " << kindTable.currentScope() << endl ); 99 debugPrint( print() ); 100 debugPrint( cerr << "Leaving scope " << kindTable.currentScope() << endl; print() ); 100 101 kindTable.endScope(); 101 102 } // TypedefTable::leaveScope 102 103 104 void TypedefTable::up( bool forall ) { 105 level += 1; 106 kindTable.getNote( kindTable.currentScope() ) = (Note){ level, forall || getEnclForall() }; 107 debugPrint( cerr << "Up " << " level " << level << " note " << kindTable.getNote( level ).level << ", " << kindTable.getNote( level ).forall << endl; ); 108 } // TypedefTable::up 109 110 void TypedefTable::down() { 111 level -= 1; 112 debugPrint( cerr << "Down " << " level " << level << " note " << kindTable.getNote( level ).level << endl; ); 113 } // TypedefTable::down 114 103 115 void TypedefTable::print( void ) const { 104 116 KindTable::size_type scope = kindTable.currentScope(); 105 debugPrint( cerr << "[" << scope << "] " );117 debugPrint( cerr << "[" << scope << "] " << kindTable.getNote( scope ).level << ", " << kindTable.getNote( scope ).forall << ":" ); 106 118 for ( KindTable::const_iterator i = kindTable.begin(); i != kindTable.end(); i++ ) { 107 119 while ( i.get_level() != scope ) { 108 120 --scope; 109 debugPrint( cerr << endl << "[" << scope << "] " );121 debugPrint( cerr << endl << "[" << scope << "] " << kindTable.getNote( scope ).level << ", " << kindTable.getNote( scope ).forall << ":" ); 110 122 } // while 111 123 debugPrint( cerr << " " << (*i).first << ":" << kindName( (*i).second ) ); … … 113 125 while ( scope > 0 ) { 114 126 --scope; 115 debugPrint( cerr << endl << "[" << scope << "] " );116 } 127 debugPrint( cerr << endl << "[" << scope << "] " << kindTable.getNote( scope ).level << ", " << kindTable.getNote( scope ).forall << ":" ); 128 } // while 117 129 debugPrint( cerr << endl ); 118 } 130 } // TypedefTable::print 119 131 120 132 // Local Variables: //
Note:
See TracChangeset
for help on using the changeset viewer.