Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/ResolvExpr/ConversionCost.cc

    r8e18b8e r98278b3a  
    2020#include <string>                        // for operator==, string
    2121
    22 #include "Common/GC.h"                   // for new_static_root
    2322#include "ResolvExpr/Cost.h"             // for Cost
    2423#include "ResolvExpr/TypeEnvironment.h"  // for EqvClass, TypeEnvironment
     
    4342        Cost conversionCost( Type *src, Type *dest, const SymTab::Indexer &indexer, const TypeEnvironment &env ) {
    4443                if ( TypeInstType *destAsTypeInst = dynamic_cast< TypeInstType* >( dest ) ) {
     44                        EqvClass eqvClass;
     45                        NamedTypeDecl *namedType;
    4546                        PRINT( std::cerr << "type inst " << destAsTypeInst->name; )
    46                         if ( const EqvClass* eqvClass = env.lookup( destAsTypeInst->name ) ) {
    47                                 if ( eqvClass->type ) {
    48                                         return conversionCost( src, eqvClass->type, indexer, env );
     47                        if ( env.lookup( destAsTypeInst->name, eqvClass ) ) {
     48                                if ( eqvClass.type ) {
     49                                        return conversionCost( src, eqvClass.type, indexer, env );
    4950                                } else {
    5051                                        return Cost::infinity;
    5152                                }
    52                         } else if ( NamedTypeDecl *namedType = indexer.lookupType( destAsTypeInst->name ) ) {
     53                        } else if ( ( namedType = indexer.lookupType( destAsTypeInst->name ) ) ) {
    5354                                PRINT( std::cerr << " found" << std::endl; )
    5455                                TypeDecl *type = dynamic_cast< TypeDecl* >( namedType );
     
    350351        void ConversionCost::postvisit( EnumInstType * ) {
    351352                static Type::Qualifiers q;
    352                 static BasicType* integer = new_static_root<BasicType>( q, BasicType::SignedInt );
    353                 cost = costFunc( integer, dest, indexer, env );  // safe if dest >= int
     353                static BasicType integer( q, BasicType::SignedInt );
     354                cost = costFunc( &integer, dest, indexer, env );  // safe if dest >= int
    354355                if ( cost < Cost::unsafe ) {
    355356                        cost.incSafe();
     
    360361
    361362        void ConversionCost::postvisit( TypeInstType *inst ) {
    362                 if ( const EqvClass *eqvClass = env.lookup( inst->name ) ) {
    363                         cost = costFunc( eqvClass->type, dest, indexer, env );
     363                EqvClass eqvClass;
     364                NamedTypeDecl *namedType;
     365                if ( env.lookup( inst->name, eqvClass ) ) {
     366                        cost = costFunc( eqvClass.type, dest, indexer, env );
    364367                } else if ( TypeInstType *destAsInst = dynamic_cast< TypeInstType* >( dest ) ) {
    365368                        if ( inst->name == destAsInst->name ) {
    366369                                cost = Cost::zero;
    367370                        }
    368                 } else if ( NamedTypeDecl *namedType = indexer.lookupType( inst->name ) ) {
     371                } else if ( ( namedType = indexer.lookupType( inst->name ) ) ) {
    369372                        TypeDecl *type = dynamic_cast< TypeDecl* >( namedType );
    370373                        // all typedefs should be gone by this point
Note: See TracChangeset for help on using the changeset viewer.