- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/ResolvExpr/ConversionCost.cc
rc75b30a r0bd3faf 279 279 conversionCostFromBasicToBasic( basicType, dstAsBasic ); 280 280 } else if ( const ast::EnumInstType * enumInst = dynamic_cast< const ast::EnumInstType * >( dst ) ) { 281 auto enumDecl = enumInst->base; 282 if ( auto baseType = enumDecl->base.get() ) { 283 cost = costCalc( basicType, baseType, srcIsLvalue, symtab, env ); 284 cost.incUnsafe(); 281 const ast::EnumDecl * enumDecl = enumInst->base.get(); 282 if ( enumDecl->isTyped && !enumDecl->base.get() ) { 283 cost = Cost::infinity; 284 } else if ( const ast::Type * enumType = enumDecl->base.get() ) { 285 if ( const ast::BasicType * enumTypeAsBasic = dynamic_cast<const ast::BasicType *>(enumType) ) { 286 conversionCostFromBasicToBasic( basicType, enumTypeAsBasic ); 287 } else { 288 cost = Cost::infinity; 289 } 285 290 } else { 286 291 cost = Cost::unsafe; … … 362 367 363 368 void ConversionCost::postvisit( const ast::EnumInstType * enumInstType ) { 364 //const ast::EnumDecl * baseEnum = enumInstType->base;365 //if ( const ast::Type * baseType = baseEnum->base ) {366 //costCalc( baseType, dst, srcIsLvalue, symtab, env );367 //} else {368 static ast::ptr<ast::BasicType> integer = { new ast::BasicType( ast::BasicType::SignedInt ) };369 cost = costCalc( integer, dst, srcIsLvalue, symtab, env );370 //}369 const ast::EnumDecl * baseEnum = enumInstType->base; 370 if ( const ast::Type * baseType = baseEnum->base ) { 371 costCalc( baseType, dst, srcIsLvalue, symtab, env ); 372 } else { 373 static ast::ptr<ast::BasicType> integer = { new ast::BasicType( ast::BasicType::SignedInt ) }; 374 cost = costCalc( integer, dst, srcIsLvalue, symtab, env ); 375 } 371 376 if ( cost < Cost::unsafe ) { 372 377 cost.incSafe();
Note: See TracChangeset
for help on using the changeset viewer.