Changes in / [4737d8e:9e1fa35]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/ControlStruct/LabelFixer.cc
r4737d8e r9e1fa35 75 75 76 76 77 // Sets the definition of the labelTable entry to be the provided statement for every label in78 // the list parameter. Happens for every kind of statement.77 // sets the definition of the labelTable entry to be the provided statement for every label in the list 78 // parameter. Happens for every kind of statement 79 79 Label LabelFixer::setLabelsDef( std::list< Label > & llabel, Statement * definition ) { 80 80 assert( definition != 0 ); 81 81 assert( llabel.size() > 0 ); 82 83 Entry * e = new Entry( definition ); 82 84 83 85 for ( std::list< Label >::iterator i = llabel.begin(); i != llabel.end(); i++ ) { … … 85 87 l.set_statement( definition ); // attach statement to the label to be used later 86 88 if ( labelTable.find( l ) == labelTable.end() ) { 87 // All labels on this statement need to use the same entry, 88 // so this should only be created once. 89 // all labels on this statement need to use the same entry, so this should only be created once 89 90 // undefined and unused until now, add an entry 90 labelTable[ l ] = new Entry( definition );91 labelTable[ l ] = e; 91 92 } else if ( labelTable[ l ]->defined() ) { 92 93 // defined twice, error 93 SemanticError( l.get_statement()->location, 94 "Duplicate definition of label: " + l.get_name() ); 95 } else { 94 SemanticError( l.get_statement()->location, "Duplicate definition of label: " + l.get_name() ); 95 } else { 96 96 // used previously, but undefined until now -> link with this entry 97 // Question: Is changing objects important?98 97 delete labelTable[ l ]; 99 labelTable[ l ] = new Entry( definition );98 labelTable[ l ] = e; 100 99 } // if 101 100 } // for 102 101 103 // Produce one of the labels attached to this statement to be temporarily used as the 104 // canonical label. 102 // produce one of the labels attached to this statement to be temporarily used as the canonical label 105 103 return labelTable[ llabel.front() ]->get_label(); 106 104 }
Note: See TracChangeset
for help on using the changeset viewer.