Changes in src/ResolvExpr/CastCost.cpp [85855b0:5ccc733]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/ResolvExpr/CastCost.cpp
r85855b0 r5ccc733 53 53 void postvisit( const ast::EnumInstType * enumInst ) { 54 54 cost = conversionCost( enumInst, dst, srcIsLvalue, symtab, env ); 55 56 if ( !enumInst->base->isCfa ) { 57 static ast::ptr<ast::BasicType> integer = { new ast::BasicType( ast::BasicKind::SignedInt ) }; 58 Cost intCost = costCalc( integer, dst, srcIsLvalue, symtab, env ); 59 cost = intCost < cost? intCost: cost; 60 } else if ( enumInst->base->isTyped() ) { 61 auto baseConversionCost = 62 castCost( enumInst->base->base, dst, srcIsLvalue, symtab, env ); 63 cost = baseConversionCost < cost? baseConversionCost: cost; 64 } 55 65 } 56 66 … … 63 73 cost = conversionCost( basicType, dst, srcIsLvalue, symtab, env ); 64 74 if ( Cost::unsafe < cost ) { 65 if (auto enumInst = dynamic_cast<const ast::EnumInstType *>(dst)) { 66 // Always explict cast only for typed enum 67 if (enumInst->base->isTyped) cost = Cost::unsafe; 75 if ( dynamic_cast<const ast::EnumInstType *>(dst)) { 76 cost = Cost::unsafe; 68 77 } 69 78 } … … 74 83 cost = conversionCost( zero, dst, srcIsLvalue, symtab, env ); 75 84 if ( Cost::unsafe < cost ) { 76 if ( auto enumInst =dynamic_cast<const ast::EnumInstType *>(dst)) {77 if (enumInst->base->isTyped)cost = Cost::unsafe;85 if ( dynamic_cast<const ast::EnumInstType *>(dst)) { 86 cost = Cost::unsafe; 78 87 } 79 88 } … … 83 92 cost = conversionCost( one, dst, srcIsLvalue, symtab, env ); 84 93 if ( Cost::unsafe < cost ) { 85 if ( auto enumInst =dynamic_cast<const ast::EnumInstType *>(dst)) {86 if (enumInst->base->isTyped)cost = Cost::unsafe;94 if ( dynamic_cast<const ast::EnumInstType *>(dst)) { 95 cost = Cost::unsafe; 87 96 } 88 97 }
Note: See TracChangeset
for help on using the changeset viewer.