Ignore:
Timestamp:
Nov 17, 2023, 3:03:51 PM (10 months ago)
Author:
Andrew Beach <ajbeach@…>
Branches:
master
Children:
f7f997a
Parents:
41606df1
Message:

Most of ResolvExpr? was written before the new style standard. Some files updated, focus on headers.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/ResolvExpr/FindOpenVars.cc

    r41606df1 r2908f08  
    2424namespace ResolvExpr {
    2525
    26         namespace {
    27                 struct FindOpenVars final : public ast::WithGuards {
    28                         ast::OpenVarSet & open;
    29                         ast::OpenVarSet & closed;
    30                         ast::AssertionSet & need;
    31                         ast::AssertionSet & have;
    32                         ast::TypeEnvironment & env;
    33                         bool nextIsOpen;
     26namespace {
    3427
    35                         FindOpenVars(
    36                                 ast::OpenVarSet & o, ast::OpenVarSet & c, ast::AssertionSet & n,
    37                                 ast::AssertionSet & h, ast::TypeEnvironment & env, FirstMode firstIsOpen )
    38                         : open( o ), closed( c ), need( n ), have( h ), env (env), nextIsOpen( firstIsOpen ) {}
     28struct FindOpenVars final : public ast::WithGuards {
     29        ast::OpenVarSet & open;
     30        ast::OpenVarSet & closed;
     31        ast::AssertionSet & need;
     32        ast::AssertionSet & have;
     33        ast::TypeEnvironment & env;
     34        bool nextIsOpen;
    3935
    40                         void previsit( const ast::FunctionType * type ) {
    41                                 // mark open/closed variables
    42                                 if ( nextIsOpen ) {
    43                                         // trying to remove this from resolver.
    44                                         // occasionally used in other parts so not deleting right now.
     36        FindOpenVars(
     37                ast::OpenVarSet & o, ast::OpenVarSet & c, ast::AssertionSet & n,
     38                ast::AssertionSet & h, ast::TypeEnvironment & env, FirstMode firstIsOpen )
     39        : open( o ), closed( c ), need( n ), have( h ), env (env), nextIsOpen( firstIsOpen ) {}
    4540
    46                                         // insert open variables unbound to environment.
    47                                         env.add(type->forall);
     41        void previsit( const ast::FunctionType * type ) {
     42                // mark open/closed variables
     43                if ( nextIsOpen ) {
     44                        // trying to remove this from resolver.
     45                        // occasionally used in other parts so not deleting right now.
    4846
    49                                         for ( auto & decl : type->forall ) {
    50                                                 open[ *decl ] = ast::TypeData{ decl->base };
    51                                         }
    52                                         for ( auto & assert : type->assertions ) {
    53                                                 need[ assert ].isUsed = false;
    54                                         }
    55                                 } else {
    56                                         for ( auto & decl : type->forall ) {
    57                                                 closed[ *decl ] = ast::TypeData{ decl->base };
    58                                         }
    59                                         for ( auto & assert : type->assertions ) {
    60                                                 have[ assert ].isUsed = false;
    61                                         }
    62                                 }
     47                        // insert open variables unbound to environment.
     48                        env.add(type->forall);
    6349
    64                                 // flip open variables for contained function types
    65                                 nextIsOpen = ! nextIsOpen;
    66                                 GuardAction( [this](){ nextIsOpen = ! nextIsOpen; } );
     50                        for ( auto & decl : type->forall ) {
     51                                open[ *decl ] = ast::TypeData{ decl->base };
    6752                        }
     53                        for ( auto & assert : type->assertions ) {
     54                                need[ assert ].isUsed = false;
     55                        }
     56                } else {
     57                        for ( auto & decl : type->forall ) {
     58                                closed[ *decl ] = ast::TypeData{ decl->base };
     59                        }
     60                        for ( auto & assert : type->assertions ) {
     61                                have[ assert ].isUsed = false;
     62                        }
     63                }
    6864
    69                 };
     65                // flip open variables for contained function types
     66        //      nextIsOpen = ! nextIsOpen;
     67        //      GuardAction( [this](){ nextIsOpen = ! nextIsOpen; } );
     68                GuardValue( nextIsOpen ) = !nextIsOpen;
    7069        }
     70};
    7171
    72         void findOpenVars(
    73                         const ast::Type * type, ast::OpenVarSet & open, ast::OpenVarSet & closed,
    74                         ast::AssertionSet & need, ast::AssertionSet & have, ast::TypeEnvironment & env, FirstMode firstIsOpen ) {
    75                 ast::Pass< FindOpenVars > finder{ open, closed, need, have, env, firstIsOpen };
    76                 type->accept( finder );
     72} // namespace
    7773
    78                 if (!closed.empty()) {
    79                         std::cerr << "closed: ";
    80                         for (auto& i : closed) {
    81                                 std::cerr << i.first.base->location << ":" << i.first.base->name << ' ';
    82                         }
    83                         std::cerr << std::endl;
     74void findOpenVars(
     75                const ast::Type * type, ast::OpenVarSet & open, ast::OpenVarSet & closed,
     76                ast::AssertionSet & need, ast::AssertionSet & have, ast::TypeEnvironment & env, FirstMode firstIsOpen ) {
     77        ast::Pass< FindOpenVars > finder{ open, closed, need, have, env, firstIsOpen };
     78        type->accept( finder );
     79
     80        if (!closed.empty()) {
     81                std::cerr << "closed: ";
     82                for (auto& i : closed) {
     83                        std::cerr << i.first.base->location << ":" << i.first.base->name << ' ';
    8484                }
     85                std::cerr << std::endl;
    8586        }
     87}
     88
    8689} // namespace ResolvExpr
    8790
Note: See TracChangeset for help on using the changeset viewer.