- Timestamp:
 - Oct 29, 2020, 4:46:04 PM (5 years ago)
 - Branches:
 - ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast-unique-expr, pthread-emulation, qualifiedEnum
 - Children:
 - 3100754
 - Parents:
 - 93068e53
 - Location:
 - src/AST
 - Files:
 - 
      
- 2 edited
 
- 
          
  Pass.hpp (modified) (1 diff)
 - 
          
  Pass.impl.hpp (modified) (2 diffs)
 
 
Legend:
- Unmodified
 - Added
 - Removed
 
- 
      
src/AST/Pass.hpp
r93068e53 rc6c682cf 296 296 private: 297 297 bool inFunction = false; 298 bool atFunctionTop = false; 298 299 }; 299 300  - 
      
src/AST/Pass.impl.hpp
r93068e53 rc6c682cf 502 502 // foralls are still in function type 503 503 maybe_accept( node, &FunctionDecl::type ); 504 // function body needs to have the same scope as parameters - CompoundStmt will not enter 505 // a new scope if inFunction is true 504 // First remember that we are now within a function. 506 505 ValueGuard< bool > oldInFunction( inFunction ); 507 506 inFunction = true; 507 // The function body needs to have the same scope as parameters. 508 // A CompoundStmt will not enter a new scope if atFunctionTop is true. 509 ValueGuard< bool > oldAtFunctionTop( atFunctionTop ); 510 atFunctionTop = true; 508 511 maybe_accept( node, &FunctionDecl::stmts ); 509 512 maybe_accept( node, &FunctionDecl::attributes ); … … 672 675 VISIT_START( node ); 673 676 VISIT({ 674 // do not enter a new scope if inFunction is true - needs to check old state before the assignment675 auto guard1 = makeFuncGuard( [this, inFunctionCpy = this->inFunction]() {676 if ( ! inFunctionCpy) __pass::symtab::enter(core, 0);677 }, [this, inFunctionCpy = this->inFunction]() {678 if ( ! inFunctionCpy) __pass::symtab::leave(core, 0);677 // Do not enter (or leave) a new scope if atFunctionTop. Remember to save the result. 678 auto guard1 = makeFuncGuard( [this, enterScope = !this->atFunctionTop]() { 679 if ( enterScope ) __pass::symtab::enter(core, 0); 680 }, [this, leaveScope = !this->atFunctionTop]() { 681 if ( leaveScope ) __pass::symtab::leave(core, 0); 679 682 }); 680 683 ValueGuard< bool > guard2( inFunction );  
  Note:
 See   TracChangeset
 for help on using the changeset viewer.