- File:
-
- 1 edited
-
src/ResolvExpr/ConversionCost.cc (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/ResolvExpr/ConversionCost.cc
r98278b3a r8e18b8e 20 20 #include <string> // for operator==, string 21 21 22 #include "Common/GC.h" // for new_static_root 22 23 #include "ResolvExpr/Cost.h" // for Cost 23 24 #include "ResolvExpr/TypeEnvironment.h" // for EqvClass, TypeEnvironment … … 42 43 Cost conversionCost( Type *src, Type *dest, const SymTab::Indexer &indexer, const TypeEnvironment &env ) { 43 44 if ( TypeInstType *destAsTypeInst = dynamic_cast< TypeInstType* >( dest ) ) { 44 EqvClass eqvClass;45 NamedTypeDecl *namedType;46 45 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 ); 50 49 } else { 51 50 return Cost::infinity; 52 51 } 53 } else if ( ( namedType = indexer.lookupType( destAsTypeInst->name )) ) {52 } else if ( NamedTypeDecl *namedType = indexer.lookupType( destAsTypeInst->name ) ) { 54 53 PRINT( std::cerr << " found" << std::endl; ) 55 54 TypeDecl *type = dynamic_cast< TypeDecl* >( namedType ); … … 351 350 void ConversionCost::postvisit( EnumInstType * ) { 352 351 static Type::Qualifiers q; 353 static BasicType integer( q, BasicType::SignedInt );354 cost = costFunc( &integer, dest, indexer, env ); // safe if dest >= int352 static BasicType* integer = new_static_root<BasicType>( q, BasicType::SignedInt ); 353 cost = costFunc( integer, dest, indexer, env ); // safe if dest >= int 355 354 if ( cost < Cost::unsafe ) { 356 355 cost.incSafe(); … … 361 360 362 361 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 ); 367 364 } else if ( TypeInstType *destAsInst = dynamic_cast< TypeInstType* >( dest ) ) { 368 365 if ( inst->name == destAsInst->name ) { 369 366 cost = Cost::zero; 370 367 } 371 } else if ( ( namedType = indexer.lookupType( inst->name )) ) {368 } else if ( NamedTypeDecl *namedType = indexer.lookupType( inst->name ) ) { 372 369 TypeDecl *type = dynamic_cast< TypeDecl* >( namedType ); 373 370 // all typedefs should be gone by this point
Note:
See TracChangeset
for help on using the changeset viewer.