Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/ResolvExpr/FindOpenVars.cc

    rc6b4432 r46da46b  
    1616#include "FindOpenVars.h"
    1717
     18#include <list>                   // for _List_const_iterator, list<>::const...
     19#include <map>                    // for map<>::mapped_type
     20
    1821#include "AST/Pass.hpp"
    1922#include "AST/Type.hpp"
    2023#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
    2127
    2228#include <iostream>
    2329
    2430namespace 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        }
    25100
    26101        namespace {
Note: See TracChangeset for help on using the changeset viewer.