Changeset 5ccc733 for src/ResolvExpr/CastCost.cpp
- Timestamp:
- Jun 29, 2024, 5:02:06 AM (3 weeks ago)
- Branches:
- master
- Children:
- 4117761
- Parents:
- 7552fde
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/ResolvExpr/CastCost.cpp
r7552fde r5ccc733 54 54 cost = conversionCost( enumInst, dst, srcIsLvalue, symtab, env ); 55 55 56 if ( Cost::unsafe < cost) {56 if ( !enumInst->base->isCfa ) { 57 57 static ast::ptr<ast::BasicType> integer = { new ast::BasicType( ast::BasicKind::SignedInt ) }; 58 58 Cost intCost = costCalc( integer, dst, srcIsLvalue, symtab, env ); 59 59 cost = intCost < cost? intCost: cost; 60 } 61 if ( enumInst->base->isTyped && enumInst->base->base ) { 60 } else if ( enumInst->base->isTyped() ) { 62 61 auto baseConversionCost = 63 62 castCost( enumInst->base->base, dst, srcIsLvalue, symtab, env ); … … 74 73 cost = conversionCost( basicType, dst, srcIsLvalue, symtab, env ); 75 74 if ( Cost::unsafe < cost ) { 76 if (auto enumInst = dynamic_cast<const ast::EnumInstType *>(dst)) { 77 // Always explict cast only for typed enum 78 if (enumInst->base->isTyped) cost = Cost::unsafe; 75 if ( dynamic_cast<const ast::EnumInstType *>(dst)) { 76 cost = Cost::unsafe; 79 77 } 80 78 } … … 85 83 cost = conversionCost( zero, dst, srcIsLvalue, symtab, env ); 86 84 if ( Cost::unsafe < cost ) { 87 if ( auto enumInst =dynamic_cast<const ast::EnumInstType *>(dst)) {88 if (enumInst->base->isTyped)cost = Cost::unsafe;85 if ( dynamic_cast<const ast::EnumInstType *>(dst)) { 86 cost = Cost::unsafe; 89 87 } 90 88 } … … 94 92 cost = conversionCost( one, dst, srcIsLvalue, symtab, env ); 95 93 if ( Cost::unsafe < cost ) { 96 if ( auto enumInst =dynamic_cast<const ast::EnumInstType *>(dst)) {97 if (enumInst->base->isTyped)cost = Cost::unsafe;94 if ( dynamic_cast<const ast::EnumInstType *>(dst)) { 95 cost = Cost::unsafe; 98 96 } 99 97 }
Note: See TracChangeset
for help on using the changeset viewer.