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