Changeset ee3c93d for src/Common


Ignore:
Timestamp:
Jun 4, 2018, 12:40:46 PM (6 years ago)
Author:
Rob Schluntz <rschlunt@…>
Branches:
ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, with_gc
Children:
2ad4b49
Parents:
b429026
git-author:
Rob Schluntz <rschlunt@…> (06/04/18 12:40:38)
git-committer:
Rob Schluntz <rschlunt@…> (06/04/18 12:40:46)
Message:

Add support for while loops with control declarations

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Common/PassVisitor.impl.h

    rb429026 ree3c93d  
    828828        VISIT_START( node );
    829829
    830         visitExpression( node->condition );
    831         node->body = visitStatement( node->body );
     830        {
     831                // while statements introduce a level of scope (for the initialization)
     832                auto guard = makeFuncGuard( [this]() { indexerScopeEnter(); }, [this]() { indexerScopeLeave(); } );
     833                maybeAccept_impl( node->initialization, *this );
     834                visitExpression ( node->condition );
     835                node->body = visitStatement( node->body );
     836        }
    832837
    833838        VISIT_END( node );
     
    838843        MUTATE_START( node );
    839844
    840         node->condition = mutateExpression( node->condition );
    841         node->body      = mutateStatement ( node->body      );
     845        {
     846                // while statements introduce a level of scope (for the initialization)
     847                auto guard = makeFuncGuard( [this]() { indexerScopeEnter(); }, [this]() { indexerScopeLeave(); } );
     848                maybeMutate_impl( node->initialization, *this );
     849                node->condition = mutateExpression( node->condition );
     850                node->body      = mutateStatement ( node->body      );
     851        }
     852
    842853
    843854        MUTATE_END( Statement, node );
Note: See TracChangeset for help on using the changeset viewer.