Ignore:
Timestamp:
Mar 1, 2018, 4:58:58 PM (6 years ago)
Author:
Rob Schluntz <rschlunt@…>
Branches:
ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
Children:
ee61248
Parents:
a8a2b0a
Message:

Refactor trimEnv into TypeSubstitution::newFromExpr

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/GenPoly/Specialize.cc

    ra8a2b0a r2ec65ad  
    200200        }
    201201
    202         struct EnvTrimmer {
    203                 TypeSubstitution * env, * newEnv;
    204                 EnvTrimmer( TypeSubstitution * env, TypeSubstitution * newEnv ) : env( env ), newEnv( newEnv ){}
    205                 void previsit( TypeDecl * tyDecl ) {
    206                         // transfer known bindings for seen type variables
    207                         if ( Type * t = env->lookup( tyDecl->name ) ) {
    208                                 newEnv->add( tyDecl->name, t );
    209                         }
    210                 }
    211         };
    212 
    213         /// reduce environment to just the parts that are referenced in a given expression
    214         TypeSubstitution * trimEnv( ApplicationExpr * expr, TypeSubstitution * env ) {
    215                 if ( env ) {
    216                         TypeSubstitution * newEnv = new TypeSubstitution();
    217                         PassVisitor<EnvTrimmer> trimmer( env, newEnv );
    218                         expr->accept( trimmer );
    219                         return newEnv;
    220                 }
    221                 return nullptr;
    222         }
    223 
    224202        /// Generates a thunk that calls `actual` with type `funType` and returns its address
    225203        Expression * Specialize::createThunkFunction( FunctionType *funType, Expression *actual, InferredParams *inferParams ) {
     
    265243                }
    266244
    267                 appExpr->set_env( trimEnv( appExpr, env ) );
     245                appExpr->env = TypeSubstitution::newFromExpr( appExpr, env );
    268246                if ( inferParams ) {
    269247                        appExpr->get_inferParams() = *inferParams;
Note: See TracChangeset for help on using the changeset viewer.