Ignore:
Timestamp:
Jan 7, 2021, 2:55:57 PM (5 years ago)
Author:
Thierry Delisle <tdelisle@…>
Branches:
ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast-unique-expr, pthread-emulation, qualifiedEnum
Children:
58fe85a
Parents:
bdfc032 (diff), 44e37ef (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' into dkobets-vector

File:
1 edited

Legend:

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

    rbdfc032 reef8dfb  
    532532                        indexerAddId( &func );
    533533                        maybeAccept_impl( node->type, *this );
    534                         // function body needs to have the same scope as parameters - CompoundStmt will not enter
    535                         // a new scope if inFunction is true
     534                        // First remember that we are now within a function.
    536535                        ValueGuard< bool > oldInFunction( inFunction );
    537536                        inFunction = true;
     537                        // The function body needs to have the same scope as parameters.
     538                        // A CompoundStmt will not enter a new scope if atFunctionTop is true.
     539                        ValueGuard< bool > oldAtFunctionTop( atFunctionTop );
     540                        atFunctionTop = true;
    538541                        maybeAccept_impl( node->statements, *this );
    539542                        maybeAccept_impl( node->attributes, *this );
     
    567570                        indexerAddId( &func );
    568571                        maybeAccept_impl( node->type, *this );
    569                         // function body needs to have the same scope as parameters - CompoundStmt will not enter
    570                         // a new scope if inFunction is true
     572                        // First remember that we are now within a function.
    571573                        ValueGuard< bool > oldInFunction( inFunction );
    572574                        inFunction = true;
     575                        // The function body needs to have the same scope as parameters.
     576                        // A CompoundStmt will not enter a new scope if atFunctionTop is true.
     577                        ValueGuard< bool > oldAtFunctionTop( atFunctionTop );
     578                        atFunctionTop = true;
    573579                        maybeAccept_impl( node->statements, *this );
    574580                        maybeAccept_impl( node->attributes, *this );
     
    601607                        indexerAddId( &func );
    602608                        maybeMutate_impl( node->type, *this );
    603                         // function body needs to have the same scope as parameters - CompoundStmt will not enter
    604                         // a new scope if inFunction is true
     609                        // First remember that we are now within a function.
    605610                        ValueGuard< bool > oldInFunction( inFunction );
    606611                        inFunction = true;
     612                        // The function body needs to have the same scope as parameters.
     613                        // A CompoundStmt will not enter a new scope if atFunctionTop is true.
     614                        ValueGuard< bool > oldAtFunctionTop( atFunctionTop );
     615                        atFunctionTop = true;
    607616                        maybeMutate_impl( node->statements, *this );
    608617                        maybeMutate_impl( node->attributes, *this );
     
    826835        {
    827836                auto guard = makeFuncGuard( [this]() { indexerScopeEnter(); }, [this]() { indexerScopeLeave(); } );
    828                 maybeAccept_impl( node->parameters, *this );
    829837                maybeAccept_impl( node->base      , *this );
    830838        }
     
    849857        {
    850858                auto guard = makeFuncGuard( [this]() { indexerScopeEnter(); }, [this]() { indexerScopeLeave(); } );
    851                 maybeAccept_impl( node->parameters, *this );
    852859                maybeAccept_impl( node->base      , *this );
    853860        }
     
    871878        {
    872879                auto guard = makeFuncGuard( [this]() { indexerScopeEnter(); }, [this]() { indexerScopeLeave(); } );
    873                 maybeMutate_impl( node->parameters, *this );
    874880                maybeMutate_impl( node->base      , *this );
    875881        }
     
    895901        {
    896902                auto guard = makeFuncGuard( [this]() { indexerScopeEnter(); }, [this]() { indexerScopeLeave(); } );
    897                 maybeAccept_impl( node->parameters, *this );
    898903                maybeAccept_impl( node->base      , *this );
    899904        }
     
    912917        {
    913918                auto guard = makeFuncGuard( [this]() { indexerScopeEnter(); }, [this]() { indexerScopeLeave(); } );
    914                 maybeAccept_impl( node->parameters, *this );
    915919                maybeAccept_impl( node->base      , *this );
    916920        }
     
    929933        {
    930934                auto guard = makeFuncGuard( [this]() { indexerScopeEnter(); }, [this]() { indexerScopeLeave(); } );
    931                 maybeMutate_impl( node->parameters, *this );
    932935                maybeMutate_impl( node->base      , *this );
    933936        }
     
    10071010        VISIT_START( node );
    10081011        {
    1009                 // do not enter a new scope if inFunction is true - needs to check old state before the assignment
    1010                 ValueGuard< bool > oldInFunction( inFunction );
    1011                 auto guard1 = makeFuncGuard( [this, &oldInFunction]() { if ( ! oldInFunction.old ) indexerScopeEnter(); }, [this, &oldInFunction]() { if ( ! oldInFunction.old ) indexerScopeLeave(); } );
     1012                // Do not enter a new scope if atFunctionTop is true, don't leave one either.
     1013                ValueGuard< bool > oldAtFunctionTop( atFunctionTop );
     1014                auto guard1 = makeFuncGuard( [this, go = !atFunctionTop]() { if ( go ) indexerScopeEnter(); }, [this, go = !atFunctionTop]() { if ( go ) indexerScopeLeave(); } );
    10121015                auto guard2 = makeFuncGuard( [this]() { call_beginScope();   }, [this]() { call_endScope();     } );
    1013                 inFunction = false;
     1016                atFunctionTop = false;
    10141017                visitStatementList( node->kids );
    10151018        }
     
    10211024        VISIT_START( node );
    10221025        {
    1023                 // do not enter a new scope if inFunction is true - needs to check old state before the assignment
    1024                 ValueGuard< bool > oldInFunction( inFunction );
    1025                 auto guard1 = makeFuncGuard( [this, &oldInFunction]() { if ( ! oldInFunction.old ) indexerScopeEnter(); }, [this, &oldInFunction]() { if ( ! oldInFunction.old ) indexerScopeLeave(); } );
     1026                // Do not enter a new scope if atFunctionTop is true, don't leave one either.
     1027                ValueGuard< bool > oldAtFunctionTop( atFunctionTop );
     1028                auto guard1 = makeFuncGuard( [this, go = !atFunctionTop]() { if ( go ) indexerScopeEnter(); }, [this, go = !atFunctionTop]() { if ( go ) indexerScopeLeave(); } );
    10261029                auto guard2 = makeFuncGuard( [this]() { call_beginScope();   }, [this]() { call_endScope();     } );
    1027                 inFunction = false;
     1030                atFunctionTop = false;
    10281031                visitStatementList( node->kids );
    10291032        }
     
    10351038        MUTATE_START( node );
    10361039        {
    1037                 // do not enter a new scope if inFunction is true - needs to check old state before the assignment
    1038                 ValueGuard< bool > oldInFunction( inFunction );
    1039                 auto guard1 = makeFuncGuard( [this, &oldInFunction]() { if ( ! oldInFunction.old ) indexerScopeEnter(); }, [this, &oldInFunction]() { if ( ! oldInFunction.old ) indexerScopeLeave(); } );
     1040                // Do not enter a new scope if atFunctionTop is true, don't leave one either.
     1041                ValueGuard< bool > oldAtFunctionTop( atFunctionTop );
     1042                auto guard1 = makeFuncGuard( [this, go = !atFunctionTop]() { if ( go ) indexerScopeEnter(); }, [this, go = !atFunctionTop]() { if ( go ) indexerScopeLeave(); } );
    10401043                auto guard2 = makeFuncGuard( [this]() { call_beginScope();   }, [this]() { call_endScope();     } );
    1041                 inFunction = false;
     1044                atFunctionTop = false;
    10421045                mutateStatementList( node->kids );
    10431046        }
     
    15221525
    15231526//--------------------------------------------------------------------------
     1527// SuspendStmt
     1528template< typename pass_type >
     1529void PassVisitor< pass_type >::visit( SuspendStmt * node ) {
     1530        VISIT_START( node );
     1531
     1532        maybeAccept_impl( node->then  , *this );
     1533
     1534        VISIT_END( node );
     1535}
     1536
     1537template< typename pass_type >
     1538void PassVisitor< pass_type >::visit( const SuspendStmt * node ) {
     1539        VISIT_START( node );
     1540
     1541        maybeAccept_impl( node->then  , *this );
     1542
     1543        VISIT_END( node );
     1544}
     1545
     1546template< typename pass_type >
     1547Statement * PassVisitor< pass_type >::mutate( SuspendStmt * node ) {
     1548        MUTATE_START( node );
     1549
     1550        maybeMutate_impl( node->then  , *this );
     1551
     1552        MUTATE_END( Statement, node );
     1553}
     1554
     1555//--------------------------------------------------------------------------
    15241556// WaitForStmt
    15251557template< typename pass_type >
     
    33023334        VISIT_START( node );
    33033335
    3304         indexerAddStruct( node->name );
     3336        indexerAddUnion( node->name );
    33053337
    33063338        {
     
    33173349        VISIT_START( node );
    33183350
    3319         indexerAddStruct( node->name );
     3351        indexerAddUnion( node->name );
    33203352
    33213353        {
     
    33323364        MUTATE_START( node );
    33333365
    3334         indexerAddStruct( node->name );
     3366        indexerAddUnion( node->name );
    33353367
    33363368        {
Note: See TracChangeset for help on using the changeset viewer.