Changes in / [4737d8e:9e1fa35]


Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/ControlStruct/LabelFixer.cc

    r4737d8e r9e1fa35  
    7575
    7676
    77         // Sets the definition of the labelTable entry to be the provided statement for every label in
    78         // 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
    7979        Label LabelFixer::setLabelsDef( std::list< Label > & llabel, Statement * definition ) {
    8080                assert( definition != 0 );
    8181                assert( llabel.size() > 0 );
     82
     83                Entry * e = new Entry( definition );
    8284
    8385                for ( std::list< Label >::iterator i = llabel.begin(); i != llabel.end(); i++ ) {
     
    8587                        l.set_statement( definition ); // attach statement to the label to be used later
    8688                        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
    8990                                // undefined and unused until now, add an entry
    90                                 labelTable[ l ] = new Entry( definition );
     91                                labelTable[ l ] =  e;
    9192                        } else if ( labelTable[ l ]->defined() ) {
    9293                                // 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 {
    9696                                // used previously, but undefined until now -> link with this entry
    97                                 // Question: Is changing objects important?
    9897                                delete labelTable[ l ];
    99                                 labelTable[ l ] = new Entry( definition );
     98                                labelTable[ l ] = e;
    10099                        } // if
    101100                } // for
    102101
    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
    105103                return labelTable[ llabel.front() ]->get_label();
    106104        }
Note: See TracChangeset for help on using the changeset viewer.