Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/ResolvExpr/ConversionCost.cc

    r98278b3a r8e18b8e  
    2020#include <string>                        // for operator==, string
    2121
     22#include "Common/GC.h"                   // for new_static_root
    2223#include "ResolvExpr/Cost.h"             // for Cost
    2324#include "ResolvExpr/TypeEnvironment.h"  // for EqvClass, TypeEnvironment
     
    4243        Cost conversionCost( Type *src, Type *dest, const SymTab::Indexer &indexer, const TypeEnvironment &env ) {
    4344                if ( TypeInstType *destAsTypeInst = dynamic_cast< TypeInstType* >( dest ) ) {
    44                         EqvClass eqvClass;
    45                         NamedTypeDecl *namedType;
    4645                        PRINT( std::cerr << "type inst " << destAsTypeInst->name; )
    47                         if ( env.lookup( destAsTypeInst->name, eqvClass ) ) {
    48                                 if ( eqvClass.type ) {
    49                                         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 );
    5049                                } else {
    5150                                        return Cost::infinity;
    5251                                }
    53                         } else if ( ( namedType = indexer.lookupType( destAsTypeInst->name ) ) ) {
     52                        } else if ( NamedTypeDecl *namedType = indexer.lookupType( destAsTypeInst->name ) ) {
    5453                                PRINT( std::cerr << " found" << std::endl; )
    5554                                TypeDecl *type = dynamic_cast< TypeDecl* >( namedType );
     
    351350        void ConversionCost::postvisit( EnumInstType * ) {
    352351                static Type::Qualifiers q;
    353                 static BasicType integer( q, BasicType::SignedInt );
    354                 cost = costFunc( &integer, dest, indexer, env );  // safe if dest >= int
     352                static BasicType* integer = new_static_root<BasicType>( q, BasicType::SignedInt );
     353                cost = costFunc( integer, dest, indexer, env );  // safe if dest >= int
    355354                if ( cost < Cost::unsafe ) {
    356355                        cost.incSafe();
     
    361360
    362361        void ConversionCost::postvisit( TypeInstType *inst ) {
    363                 EqvClass eqvClass;
    364                 NamedTypeDecl *namedType;
    365                 if ( env.lookup( inst->name, eqvClass ) ) {
    366                         cost = costFunc( eqvClass.type, dest, indexer, env );
     362                if ( const EqvClass *eqvClass = env.lookup( inst->name ) ) {
     363                        cost = costFunc( eqvClass->type, dest, indexer, env );
    367364                } else if ( TypeInstType *destAsInst = dynamic_cast< TypeInstType* >( dest ) ) {
    368365                        if ( inst->name == destAsInst->name ) {
    369366                                cost = Cost::zero;
    370367                        }
    371                 } else if ( ( namedType = indexer.lookupType( inst->name ) ) ) {
     368                } else if ( NamedTypeDecl *namedType = indexer.lookupType( inst->name ) ) {
    372369                        TypeDecl *type = dynamic_cast< TypeDecl* >( namedType );
    373370                        // all typedefs should be gone by this point
Note: See TracChangeset for help on using the changeset viewer.