Changeset bc07190 for src/ResolvExpr/CastCost.cpp
- Timestamp:
- Jun 29, 2024, 7:33:28 AM (19 months ago)
- Branches:
- master
- Children:
- 011c29e
- Parents:
- 62a38e7 (diff), 115ac1ce (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - File:
-
- 1 edited
-
src/ResolvExpr/CastCost.cpp (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/ResolvExpr/CastCost.cpp
r62a38e7 rbc07190 53 53 void postvisit( const ast::EnumInstType * enumInst ) { 54 54 cost = conversionCost( enumInst, dst, srcIsLvalue, symtab, env ); 55 if ( enumInst->base->isTyped() ) { 56 auto baseConversionCost = 57 castCost( enumInst->base->base, dst, srcIsLvalue, symtab, env ); 58 cost = baseConversionCost < cost? baseConversionCost: cost; 59 } 60 static ast::ptr<ast::BasicType> integer = { new ast::BasicType( ast::BasicKind::SignedInt ) }; 61 Cost intCost = costCalc( integer, dst, srcIsLvalue, symtab, env ); 62 intCost.incSafe(); 63 cost = intCost < cost? intCost: cost; 55 64 } 56 65 … … 63 72 cost = conversionCost( basicType, dst, srcIsLvalue, symtab, env ); 64 73 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; 74 if ( dynamic_cast<const ast::EnumInstType *>(dst)) { 75 cost = Cost::unsafe; 68 76 } 69 77 } … … 74 82 cost = conversionCost( zero, dst, srcIsLvalue, symtab, env ); 75 83 if ( Cost::unsafe < cost ) { 76 if ( auto enumInst =dynamic_cast<const ast::EnumInstType *>(dst)) {77 if (enumInst->base->isTyped)cost = Cost::unsafe;84 if ( dynamic_cast<const ast::EnumInstType *>(dst)) { 85 cost = Cost::unsafe; 78 86 } 79 87 } … … 83 91 cost = conversionCost( one, dst, srcIsLvalue, symtab, env ); 84 92 if ( Cost::unsafe < cost ) { 85 if ( auto enumInst =dynamic_cast<const ast::EnumInstType *>(dst)) {86 if (enumInst->base->isTyped)cost = Cost::unsafe;93 if ( dynamic_cast<const ast::EnumInstType *>(dst)) { 94 cost = Cost::unsafe; 87 95 } 88 96 }
Note:
See TracChangeset
for help on using the changeset viewer.