Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/ControlStruct/LabelFixer.cc

    r23b6f4d7 rd3b7937  
    55// file "LICENCE" distributed with Cforall.
    66//
    7 // LabelFixer.cc --
     7// LabelFixer.cc -- 
    88//
    99// Author           : Rodolfo G. Esteves
     
    8686
    8787
    88         // sets the definition of the labelTable entry to be the provided
     88        // sets the definition of the labelTable entry to be the provided 
    8989        // statement for every label in the list parameter. Happens for every kind of statement
    9090        Label LabelFixer::setLabelsDef( std::list< Label > &llabel, Statement *definition ) {
     
    9595
    9696                for ( std::list< Label >::iterator i = llabel.begin(); i != llabel.end(); i++ ) {
    97                         Label & l = *i;
    98                         l.set_statement( definition ); // attach statement to the label to be used later
    99                         if ( labelTable.find( l ) == labelTable.end() ) {
     97                        if ( labelTable.find( *i ) == labelTable.end() ) {
    10098                                // all labels on this statement need to use the same entry, so this should only be created once
    10199                                // undefined and unused until now, add an entry
    102                                 labelTable[ l ] =  e;
    103                         } else if ( labelTable[ l ]->defined() ) {
     100                                labelTable[ *i ] =  e;
     101                        } else if ( labelTable[ *i ]->defined() ) {
    104102                                // defined twice, error
    105                                 throw SemanticError( "Duplicate definition of label: " + l.get_name() );
     103                                throw SemanticError( "Duplicate definition of label: " + *i );
    106104                        }       else {
    107105                                // used previously, but undefined until now -> link with this entry
    108                                 delete labelTable[ l ];
    109                                 labelTable[ l ] = e;
     106                                delete labelTable[ *i ];
     107                                labelTable[ *i ] = e;
    110108                        } // if
    111109                } // for
    112110
    113                 // produce one of the labels attached to this statement to be
     111                // produce one of the labels attached to this statement to be 
    114112                // temporarily used as the canonical label
    115113                return labelTable[ llabel.front() ]->get_label();
    116114        }
    117115
    118         // A label was used, add it to the table if it isn't already there
     116        // A label was used, add it ot the table if it isn't already there
    119117        template< typename UsageNode >
    120118        void LabelFixer::setLabelsUsg( Label orgValue, UsageNode *use ) {
     
    132130                for ( std::map< Label, Entry * >::iterator i = labelTable.begin(); i != labelTable.end(); ++i ) {
    133131                        if ( ! i->second->defined() ) {
    134                                 throw SemanticError( "Use of undefined label: " + i->first.get_name() );
     132                                throw SemanticError( "Use of undefined label: " + i->first );
    135133                        }
    136134                        (*ret)[ i->first ] = i->second->get_definition();
Note: See TracChangeset for help on using the changeset viewer.