Changes in src/ResolvExpr/FindOpenVars.cc [c6b4432:46da46b]
- File:
-
- 1 edited
-
src/ResolvExpr/FindOpenVars.cc (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/ResolvExpr/FindOpenVars.cc
rc6b4432 r46da46b 16 16 #include "FindOpenVars.h" 17 17 18 #include <list> // for _List_const_iterator, list<>::const... 19 #include <map> // for map<>::mapped_type 20 18 21 #include "AST/Pass.hpp" 19 22 #include "AST/Type.hpp" 20 23 #include "AST/TypeEnvironment.hpp" 24 #include "Common/PassVisitor.h" 25 #include "SynTree/Declaration.h" // for TypeDecl, DeclarationWithType (ptr ... 26 #include "SynTree/Type.h" // for Type, Type::ForallList, ArrayType 21 27 22 28 #include <iostream> 23 29 24 30 namespace ResolvExpr { 31 struct FindOpenVars_old : public WithGuards { 32 FindOpenVars_old( OpenVarSet &openVars, OpenVarSet &closedVars, AssertionSet &needAssertions, AssertionSet &haveAssertions, bool firstIsOpen ); 33 34 void previsit( const PointerType * pointerType ); 35 void previsit( const ArrayType * arrayType ); 36 void previsit( const FunctionType * functionType ); 37 void previsit( const TupleType * tupleType ); 38 39 void common_action( const Type *type ); 40 41 OpenVarSet &openVars, &closedVars; 42 AssertionSet &needAssertions, &haveAssertions; 43 bool nextIsOpen; 44 }; 45 46 void findOpenVars( const Type *type, OpenVarSet &openVars, OpenVarSet &closedVars, AssertionSet &needAssertions, AssertionSet &haveAssertions, bool firstIsOpen ) { 47 PassVisitor<FindOpenVars_old> finder( openVars, closedVars, needAssertions, haveAssertions, firstIsOpen ); 48 type->accept( finder ); 49 } 50 51 FindOpenVars_old::FindOpenVars_old( OpenVarSet &openVars, OpenVarSet &closedVars, AssertionSet &needAssertions, AssertionSet &haveAssertions, bool firstIsOpen ) 52 : openVars( openVars ), closedVars( closedVars ), needAssertions( needAssertions ), haveAssertions( haveAssertions ), nextIsOpen( firstIsOpen ) { 53 } 54 55 void FindOpenVars_old::common_action( const Type * type ) { 56 if ( nextIsOpen ) { 57 for ( Type::ForallList::const_iterator i = type->forall.begin(); i != type->forall.end(); ++i ) { 58 openVars[ (*i)->get_name() ] = TypeDecl::Data{ (*i) }; 59 for ( std::list< DeclarationWithType* >::const_iterator assert = (*i)->get_assertions().begin(); assert != (*i)->get_assertions().end(); ++assert ) { 60 needAssertions[ *assert ].isUsed = false; 61 } 62 /// cloneAll( (*i)->get_assertions(), needAssertions ); 63 /// needAssertions.insert( needAssertions.end(), (*i)->get_assertions().begin(), (*i)->get_assertions().end() ); 64 } 65 } else { 66 for ( Type::ForallList::const_iterator i = type->forall.begin(); i != type->forall.end(); ++i ) { 67 closedVars[ (*i)->get_name() ] = TypeDecl::Data{ (*i) }; 68 for ( std::list< DeclarationWithType* >::const_iterator assert = (*i)->get_assertions().begin(); assert != (*i)->get_assertions().end(); ++assert ) { 69 haveAssertions[ *assert ].isUsed = false; 70 } 71 /// cloneAll( (*i)->get_assertions(), haveAssertions ); 72 /// haveAssertions.insert( haveAssertions.end(), (*i)->get_assertions().begin(), (*i)->get_assertions().end() ); 73 } // for 74 } // if 75 /// std::cerr << "type is "; 76 /// type->print( std::cerr ); 77 /// std::cerr << std::endl << "need is" << std::endl; 78 /// printAssertionSet( needAssertions, std::cerr ); 79 /// std::cerr << std::endl << "have is" << std::endl; 80 /// printAssertionSet( haveAssertions, std::cerr ); 81 } 82 83 void FindOpenVars_old::previsit(const PointerType * pointerType) { 84 common_action( pointerType ); 85 } 86 87 void FindOpenVars_old::previsit(const ArrayType * arrayType) { 88 common_action( arrayType ); 89 } 90 91 void FindOpenVars_old::previsit(const FunctionType * functionType) { 92 common_action( functionType ); 93 nextIsOpen = ! nextIsOpen; 94 GuardAction( [this](){ nextIsOpen = ! nextIsOpen; } ); 95 } 96 97 void FindOpenVars_old::previsit(const TupleType * tupleType) { 98 common_action( tupleType ); 99 } 25 100 26 101 namespace {
Note:
See TracChangeset
for help on using the changeset viewer.