Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/GenPoly/DeclMutator.cc

    rdbd8652 rb0b958a  
    2424        }
    2525
    26         DeclMutator::DeclMutator() : Mutator(), declsToAdd(1), declsToAddAfter(1) {}
     26        DeclMutator::DeclMutator() : Mutator(), declsToAdd(1) {}
    2727
    2828        DeclMutator::~DeclMutator() {}
    2929       
    3030        void DeclMutator::mutateDeclarationList( std::list< Declaration* > &decls ) {
    31                 for ( std::list< Declaration* >::iterator decl = decls.begin(); ; ++decl ) {
    32                         // splice in new declarations after previous decl
    33                         decls.splice( decl, declsToAddAfter.back() );
    34 
    35                         if ( decl == decls.end() ) break;
    36                        
     31                for ( std::list< Declaration* >::iterator decl = decls.begin(); decl != decls.end(); ++decl ) {
    3732                        // run mutator on declaration
    3833                        *decl = maybeMutate( *decl, *this );
     
    4439
    4540        void DeclMutator::doBeginScope() {
    46                 // add new decl lists for inside of scope
     41                // add new decl list for inside of scope
    4742                declsToAdd.resize( declsToAdd.size()+1 );
    48                 declsToAddAfter.resize( declsToAddAfter.size()+1 );
    4943        }
    5044
     
    5549                newBack->splice( newBack->end(), *back );
    5650                declsToAdd.pop_back();
    57                
    58                 back = declsToAddAfter.rbegin();
    59                 newBack = back + 1;
    60                 newBack->splice( newBack->end(), *back );
    61                 declsToAddAfter.pop_back();
    6251        }
    6352
     
    7261                stmt = maybeMutate( stmt, *this );
    7362                // return if no declarations to add
    74                 if ( declsToAdd.back().empty() && declsToAddAfter.back().empty() ) {
    75                         doEndScope();
    76                         return stmt;
    77                 }
     63                if ( declsToAdd.back().empty() ) return stmt;
    7864
    7965                // otherwise add declarations to new compound statement
     
    8571                declsToAdd.back().clear();
    8672
    87                 // add mutated statement
     73                doEndScope();
     74
     75                // add mutated statement and return
    8876                compound->get_kids().push_back( stmt );
    89 
    90                 // add declarations after to new compound statement
    91                 for ( std::list< Declaration* >::iterator decl = declsToAddAfter.back().begin(); decl != declsToAddAfter.back().end(); ++decl ) {
    92                         DeclStmt *declStmt = new DeclStmt( noLabels, *decl );
    93                         compound->get_kids().push_back( declStmt );
    94                 }
    95                 declsToAddAfter.back().clear();
    96 
    97                 doEndScope();
    9877                return compound;
    9978        }
     
    10180        void DeclMutator::mutateStatementList( std::list< Statement* > &stmts ) {
    10281                doBeginScope();
    103 
    10482               
    105                 for ( std::list< Statement* >::iterator stmt = stmts.begin(); ; ++stmt ) {
    106                         // add any new declarations after the previous statement
    107                         for ( std::list< Declaration* >::iterator decl = declsToAddAfter.back().begin(); decl != declsToAddAfter.back().end(); ++decl ) {
    108                                 DeclStmt *declStmt = new DeclStmt( noLabels, *decl );
    109                                 stmts.insert( stmt, declStmt );
    110                         }
    111                         declsToAddAfter.back().clear();
    112 
    113                         if ( stmt == stmts.end() ) break;
    114                        
     83                for ( std::list< Statement* >::iterator stmt = stmts.begin(); stmt != stmts.end(); ++stmt ) {
    11584                        // run mutator on statement
    11685                        *stmt = maybeMutate( *stmt, *this );
     
    12392                        declsToAdd.back().clear();
    12493                }
    125                
     94
    12695                doEndScope();
    12796        }
     
    12998        void DeclMutator::addDeclaration( Declaration *decl ) {
    13099                declsToAdd.back().push_back( decl );
    131         }
    132 
    133         void DeclMutator::addDeclarationAfter( Declaration *decl ) {
    134                 declsToAddAfter.back().push_back( decl );
    135100        }
    136101
Note: See TracChangeset for help on using the changeset viewer.