Ignore:
Timestamp:
Jun 15, 2018, 5:09:29 PM (6 years ago)
Author:
Aaron Moss <a3moss@…>
Branches:
new-env
Children:
97397a26
Parents:
1d7b0a8
Message:

Start of new environment implementation; terribly broken

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/ResolvExpr/Occurs.cc

    r1d7b0a8 r982f95d  
    1414//
    1515
    16 #include <set>                // for set, _Rb_tree_const_iterator
    1716#include <string>             // for string
     17#include <unordered_set>      // for unordered_set
    1818
    1919#include "Common/PassVisitor.h"
    2020#include "SynTree/Type.h"     // for TypeInstType, Type
    21 #include "TypeEnvironment.h"  // for EqvClass, TypeEnvironment
     21#include "TypeEnvironment.h"  // for ClassRef, TypeEnvironment
    2222
    2323namespace ResolvExpr {
     
    2727
    2828                bool result;
    29                 std::set< std::string > eqvVars;
     29                using VarSet = std::unordered_set< std::string >;
     30                VarSet eqvVars;
    3031                const TypeEnvironment &tenv;
    3132        };
     
    3839
    3940        Occurs::Occurs( std::string varName, const TypeEnvironment & env ) : result( false ), tenv( env ) {
    40                 if ( const EqvClass *eqvClass = tenv.lookup( varName ) ) {
    41                         eqvVars = eqvClass->vars;
     41                if ( ClassRef eqvClass = tenv.lookup( varName ) ) {
     42                        eqvVars = eqvClass.get_vars<VarSet>();
    4243                } else {
    4344                        eqvVars.insert( varName );
     
    5152                if ( eqvVars.find( typeInst->get_name() ) != eqvVars.end() ) {
    5253                        result = true;
    53                 } else if ( const EqvClass *eqvClass = tenv.lookup( typeInst->get_name() ) ) {
    54                         if ( eqvClass->type ) {
     54                } else if ( ClassRef eqvClass = tenv.lookup( typeInst->get_name() ) ) {
     55                        if ( Type* boundTy = eqvClass.get_bound().type ) {
    5556///       std::cerr << typeInst->get_name() << " is bound to";
    56 ///       eqvClass.type->print( std::cerr );
     57///       boundTy->print( std::cerr );
    5758///       std::cerr << std::endl;
    58                                 eqvClass->type->accept( *visitor );
     59                                boundTy->accept( *visitor );
    5960                        } // if
    6061                } // if
Note: See TracChangeset for help on using the changeset viewer.