Changes in src/ResolvExpr/FindOpenVars.cc [85dac33:ce7ed2c]
- File:
-
- 1 edited
-
src/ResolvExpr/FindOpenVars.cc (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/ResolvExpr/FindOpenVars.cc
r85dac33 rce7ed2c 9 9 // Author : Richard C. Bilson 10 10 // Created On : Sun May 17 09:42:48 2015 11 // Last Modified By : Andrew12 // Last Modified On : Fri Jul 12 14:18:00 201913 // Update Count : 411 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun May 17 09:45:25 2015 13 // Update Count : 3 14 14 // 15 15 … … 19 19 #include <map> // for map<>::mapped_type 20 20 21 #include "AST/Pass.hpp"22 #include "AST/Type.hpp"23 21 #include "Common/PassVisitor.h" 24 22 #include "SynTree/Declaration.h" // for TypeDecl, DeclarationWithType (ptr ... … … 26 24 27 25 namespace ResolvExpr { 28 struct FindOpenVars _old: public WithGuards {29 FindOpenVars _old( OpenVarSet &openVars, OpenVarSet &closedVars, AssertionSet &needAssertions, AssertionSet &haveAssertions, bool firstIsOpen );26 struct FindOpenVars : public WithGuards { 27 FindOpenVars( OpenVarSet &openVars, OpenVarSet &closedVars, AssertionSet &needAssertions, AssertionSet &haveAssertions, bool firstIsOpen ); 30 28 31 void previsit( constPointerType * pointerType );32 void previsit( constArrayType * arrayType );33 void previsit( constFunctionType * functionType );34 void previsit( constTupleType * tupleType );29 void previsit( PointerType * pointerType ); 30 void previsit( ArrayType * arrayType ); 31 void previsit( FunctionType * functionType ); 32 void previsit( TupleType * tupleType ); 35 33 36 void common_action( constType *type );34 void common_action( Type *type ); 37 35 38 36 OpenVarSet &openVars, &closedVars; … … 41 39 }; 42 40 43 void findOpenVars( constType *type, OpenVarSet &openVars, OpenVarSet &closedVars, AssertionSet &needAssertions, AssertionSet &haveAssertions, bool firstIsOpen ) {44 PassVisitor<FindOpenVars _old> finder( openVars, closedVars, needAssertions, haveAssertions, firstIsOpen );41 void findOpenVars( Type *type, OpenVarSet &openVars, OpenVarSet &closedVars, AssertionSet &needAssertions, AssertionSet &haveAssertions, bool firstIsOpen ) { 42 PassVisitor<FindOpenVars> finder( openVars, closedVars, needAssertions, haveAssertions, firstIsOpen ); 45 43 type->accept( finder ); 46 44 } 47 45 48 FindOpenVars _old::FindOpenVars_old( OpenVarSet &openVars, OpenVarSet &closedVars, AssertionSet &needAssertions, AssertionSet &haveAssertions, bool firstIsOpen )46 FindOpenVars::FindOpenVars( OpenVarSet &openVars, OpenVarSet &closedVars, AssertionSet &needAssertions, AssertionSet &haveAssertions, bool firstIsOpen ) 49 47 : openVars( openVars ), closedVars( closedVars ), needAssertions( needAssertions ), haveAssertions( haveAssertions ), nextIsOpen( firstIsOpen ) { 50 48 } 51 49 52 void FindOpenVars _old::common_action( const Type *type ) {50 void FindOpenVars::common_action( Type *type ) { 53 51 if ( nextIsOpen ) { 54 for ( Type::ForallList::const_iterator i = type-> forall.begin(); i != type->forall.end(); ++i ) {52 for ( Type::ForallList::const_iterator i = type->get_forall().begin(); i != type->get_forall().end(); ++i ) { 55 53 openVars[ (*i)->get_name() ] = TypeDecl::Data{ (*i) }; 56 54 for ( std::list< DeclarationWithType* >::const_iterator assert = (*i)->get_assertions().begin(); assert != (*i)->get_assertions().end(); ++assert ) { … … 61 59 } 62 60 } else { 63 for ( Type::ForallList::const_iterator i = type-> forall.begin(); i != type->forall.end(); ++i ) {61 for ( Type::ForallList::const_iterator i = type->get_forall().begin(); i != type->get_forall().end(); ++i ) { 64 62 closedVars[ (*i)->get_name() ] = TypeDecl::Data{ (*i) }; 65 63 for ( std::list< DeclarationWithType* >::const_iterator assert = (*i)->get_assertions().begin(); assert != (*i)->get_assertions().end(); ++assert ) { … … 78 76 } 79 77 80 void FindOpenVars _old::previsit(const PointerType *pointerType) {78 void FindOpenVars::previsit(PointerType *pointerType) { 81 79 common_action( pointerType ); 82 80 } 83 81 84 void FindOpenVars _old::previsit(const ArrayType *arrayType) {82 void FindOpenVars::previsit(ArrayType *arrayType) { 85 83 common_action( arrayType ); 86 84 } 87 85 88 void FindOpenVars _old::previsit(const FunctionType *functionType) {86 void FindOpenVars::previsit(FunctionType *functionType) { 89 87 common_action( functionType ); 90 88 nextIsOpen = ! nextIsOpen; … … 92 90 } 93 91 94 void FindOpenVars _old::previsit(const TupleType *tupleType) {92 void FindOpenVars::previsit(TupleType *tupleType) { 95 93 common_action( tupleType ); 96 }97 98 namespace {99 struct FindOpenVars_new final : public ast::WithGuards {100 ast::OpenVarSet & open;101 ast::OpenVarSet & closed;102 ast::AssertionSet & need;103 ast::AssertionSet & have;104 bool nextIsOpen;105 106 FindOpenVars_new(107 ast::OpenVarSet & o, ast::OpenVarSet & c, ast::AssertionSet & n,108 ast::AssertionSet & h, FirstMode firstIsOpen )109 : open( o ), closed( c ), need( n ), have( h ), nextIsOpen( firstIsOpen ) {}110 111 void previsit( const ast::FunctionType * type ) {112 // mark open/closed variables113 if ( nextIsOpen ) {114 for ( const ast::TypeDecl * decl : type->forall ) {115 open[ decl->name ] = ast::TypeDecl::Data{ decl };116 for ( const ast::DeclWithType * assert : decl->assertions ) {117 need[ assert ].isUsed = false;118 }119 }120 } else {121 for ( const ast::TypeDecl * decl : type->forall ) {122 closed[ decl->name ] = ast::TypeDecl::Data{ decl };123 for ( const ast::DeclWithType * assert : decl->assertions ) {124 have[ assert ].isUsed = false;125 }126 }127 }128 129 // flip open variables for contained function types130 nextIsOpen = ! nextIsOpen;131 GuardAction( [this](){ nextIsOpen = ! nextIsOpen; } );132 }133 134 };135 }136 137 void findOpenVars(138 const ast::Type * type, ast::OpenVarSet & open, ast::OpenVarSet & closed,139 ast::AssertionSet & need, ast::AssertionSet & have, FirstMode firstIsOpen ) {140 ast::Pass< FindOpenVars_new > finder{ open, closed, need, have, firstIsOpen };141 type->accept( finder );142 94 } 143 95 } // namespace ResolvExpr
Note:
See TracChangeset
for help on using the changeset viewer.