Changeset 145f1fc for src/ControlStruct


Ignore:
Timestamp:
Jul 15, 2015, 2:59:57 PM (9 years ago)
Author:
Rob Schluntz <rschlunt@…>
Branches:
ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, ctor, deferred_resn, demangler, enum, forall-pointer-decay, gc_noraii, jacob/cs343-translation, jenkins-sandbox, master, memory, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, string, with_gc
Children:
1ab4ce2, 2794fff, e45215c
Parents:
85c4ef0
Message:

modified ForStmt? to have a list of statements for the initialization portion, and reverted to hoisting the initialization

Location:
src/ControlStruct
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/ControlStruct/ForExprMutator.cc

    r85c4ef0 r145f1fc  
    99// Author           : Rodolfo G. Esteves
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue May 19 15:31:47 2015
    13 // Update Count     : 2
     11// Last Modified By : Rob Schluntz
     12// Last Modified On : Tue Jul 14 12:14:44 2015
     13// Update Count     : 10
    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();
    2824
    29                         stmts.push_back( decl );
    30                         forStmt->set_initialization( 0 );
    31                         stmts.push_back( forStmt );
     25                std::list<Statement *> &init = forStmt->get_initialization();
     26                if ( init.size() == 0 ) {
     27                        return forStmt;
     28                } // if
    3229
    33                         return block;
    34                 } // if
     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;
    3541
    3642                return forStmt;
  • src/ControlStruct/Mutate.cc

    r85c4ef0 r145f1fc  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Rob Schluntz
    12 // Last Modified On : Wed Jun 03 23:08:43 2015
    13 // Update Count     : 5
     12// Last Modified On : Wed Jul 15 14:50:04 2015
     13// Update Count     : 7
    1414//
    1515
     
    3636namespace ControlStruct {
    3737        void mutate( std::list< Declaration * > translationUnit ) {
    38                 // ForExprMutator formut;
     38                // hoist initialization out of for statements
     39                ForExprMutator formut;
    3940
    4041                // normalizes label definitions and generates multi-level
     
    5152                // LabelTypeChecker lbl;
    5253
    53                 // mutateAll( translationUnit, formut );
     54                mutateAll( translationUnit, formut );
    5455                acceptAll( translationUnit, lfix );
    5556                mutateAll( translationUnit, chmut );
Note: See TracChangeset for help on using the changeset viewer.