Changes in src/ResolvExpr/CastCost.cpp [5ccc733:85855b0]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/ResolvExpr/CastCost.cpp
r5ccc733 r85855b0 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 }65 55 } 66 56 … … 73 63 cost = conversionCost( basicType, dst, srcIsLvalue, symtab, env ); 74 64 if ( Cost::unsafe < cost ) { 75 if ( dynamic_cast<const ast::EnumInstType *>(dst)) { 76 cost = Cost::unsafe; 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; 77 68 } 78 69 } … … 83 74 cost = conversionCost( zero, dst, srcIsLvalue, symtab, env ); 84 75 if ( Cost::unsafe < cost ) { 85 if ( dynamic_cast<const ast::EnumInstType *>(dst)) {86 cost = Cost::unsafe;76 if (auto enumInst = dynamic_cast<const ast::EnumInstType *>(dst)) { 77 if (enumInst->base->isTyped) cost = Cost::unsafe; 87 78 } 88 79 } … … 92 83 cost = conversionCost( one, dst, srcIsLvalue, symtab, env ); 93 84 if ( Cost::unsafe < cost ) { 94 if ( dynamic_cast<const ast::EnumInstType *>(dst)) {95 cost = Cost::unsafe;85 if (auto enumInst = dynamic_cast<const ast::EnumInstType *>(dst)) { 86 if (enumInst->base->isTyped) cost = Cost::unsafe; 96 87 } 97 88 }
Note: See TracChangeset
for help on using the changeset viewer.