- 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
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.