Ignore:
Timestamp:
May 31, 2018, 4:24:49 PM (6 years ago)
Author:
Aaron Moss <a3moss@…>
Branches:
new-env, with_gc
Children:
0182bfa, 1d7b0a8
Parents:
75308bcc
Message:

stop eagerly copying EqvClass? on lookup

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/ResolvExpr/ConversionCost.cc

    r75308bcc r8e18b8e  
    4343        Cost conversionCost( Type *src, Type *dest, const SymTab::Indexer &indexer, const TypeEnvironment &env ) {
    4444                if ( TypeInstType *destAsTypeInst = dynamic_cast< TypeInstType* >( dest ) ) {
    45                         EqvClass eqvClass;
    46                         NamedTypeDecl *namedType;
    4745                        PRINT( std::cerr << "type inst " << destAsTypeInst->name; )
    48                         if ( env.lookup( destAsTypeInst->name, eqvClass ) ) {
    49                                 if ( eqvClass.type ) {
    50                                         return conversionCost( src, eqvClass.type, indexer, env );
     46                        if ( const EqvClass* eqvClass = env.lookup( destAsTypeInst->name ) ) {
     47                                if ( eqvClass->type ) {
     48                                        return conversionCost( src, eqvClass->type, indexer, env );
    5149                                } else {
    5250                                        return Cost::infinity;
    5351                                }
    54                         } else if ( ( namedType = indexer.lookupType( destAsTypeInst->name ) ) ) {
     52                        } else if ( NamedTypeDecl *namedType = indexer.lookupType( destAsTypeInst->name ) ) {
    5553                                PRINT( std::cerr << " found" << std::endl; )
    5654                                TypeDecl *type = dynamic_cast< TypeDecl* >( namedType );
     
    362360
    363361        void ConversionCost::postvisit( TypeInstType *inst ) {
    364                 EqvClass eqvClass;
    365                 NamedTypeDecl *namedType;
    366                 if ( env.lookup( inst->name, eqvClass ) ) {
    367                         cost = costFunc( eqvClass.type, dest, indexer, env );
     362                if ( const EqvClass *eqvClass = env.lookup( inst->name ) ) {
     363                        cost = costFunc( eqvClass->type, dest, indexer, env );
    368364                } else if ( TypeInstType *destAsInst = dynamic_cast< TypeInstType* >( dest ) ) {
    369365                        if ( inst->name == destAsInst->name ) {
    370366                                cost = Cost::zero;
    371367                        }
    372                 } else if ( ( namedType = indexer.lookupType( inst->name ) ) ) {
     368                } else if ( NamedTypeDecl *namedType = indexer.lookupType( inst->name ) ) {
    373369                        TypeDecl *type = dynamic_cast< TypeDecl* >( namedType );
    374370                        // all typedefs should be gone by this point
Note: See TracChangeset for help on using the changeset viewer.