Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/ControlStruct/ForExprMutator.cc

    r145f1fc r843054c2  
    99// Author           : Rodolfo G. Esteves
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Tue Jul 14 12:14:44 2015
    13 // Update Count     : 10
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Tue May 19 15:31:47 2015
     13// Update Count     : 2
    1414//
    1515
     
    2222                // recurse down all nest for loops to hoist any initializer declarations to make them C89 (rather than C99)
    2323                forStmt->set_body( forStmt->get_body()->acceptMutator( *this ) );
     24                if ( DeclStmt *decl = dynamic_cast< DeclStmt * > ( forStmt->get_initialization() ) ) {
     25                        // create compound statement, move initializer declaration outside, leave _for_ as-is
     26                        CompoundStmt *block = new CompoundStmt( std::list< Label >() );
     27                        std::list<Statement *> &stmts = block->get_kids();
    2428
    25                 std::list<Statement *> &init = forStmt->get_initialization();
    26                 if ( init.size() == 0 ) {
    27                         return forStmt;
     29                        stmts.push_back( decl );
     30                        forStmt->set_initialization( 0 );
     31                        stmts.push_back( forStmt );
     32
     33                        return block;
    2834                } // if
    29 
    30                 // create compound statement, move initializers outside, leave _for_ as-is
    31                 CompoundStmt *block = new CompoundStmt( std::list< Label >() );
    32                 std::list<Statement *> &stmts = block->get_kids();
    33                 for ( std::list<Statement *>::iterator it = init.begin(); it != init.end(); ++it ) {
    34                         stmts.push_back( *it );
    35                 }       // for
    36 
    37                 // add for to the new block
    38                 stmts.push_back( forStmt );
    39                 forStmt->set_initialization( std::list<Statement *>() );
    40                 return block;
    4135
    4236                return forStmt;
Note: See TracChangeset for help on using the changeset viewer.