Changes in src/ResolvExpr/CastCost.cc [eb7586e:c333ed2]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/ResolvExpr/CastCost.cc
reb7586e rc333ed2 54 54 cost = conversionCost( basicType, dst, srcIsLvalue, symtab, env ); 55 55 if ( Cost::unsafe < cost ) { 56 if (auto enumInst = 57 assert(enumInst->base->base);58 cost = Cost::unsafe;56 if (auto enumInst = dynamic_cast<const ast::EnumInstType *>(dst)) { 57 // Always explict cast only for typed enum 58 if (enumInst->base->isTyped) cost = Cost::unsafe; 59 59 } 60 60 } … … 63 63 64 64 void postvisit( const ast::ZeroType * zero ) { 65 // auto ptr = dynamic_cast< const ast::PointerType * >( dst );66 // if ( ptr && basicType->isInteger() ) {67 // // needed for, e.g. unsigned long => void *68 // cost = Cost::unsafe;69 // } else {70 65 cost = conversionCost( zero, dst, srcIsLvalue, symtab, env ); 71 66 if ( Cost::unsafe < cost ) { 72 67 if (auto enumInst = dynamic_cast<const ast::EnumInstType *>(dst)) { 73 assert(enumInst->base->base); 74 cost = Cost::unsafe; 68 if (enumInst->base->isTyped) cost = Cost::unsafe; 75 69 } 76 70 } 77 // }78 71 } 79 72 80 73 void postvisit( const ast::OneType * one ) { 81 // auto ptr = dynamic_cast< const ast::PointerType * >( dst );82 // if ( ptr && basicType->isInteger() ) {83 // // needed for, e.g. unsigned long => void *84 // cost = Cost::unsafe;85 // } else {86 74 cost = conversionCost( one, dst, srcIsLvalue, symtab, env ); 87 75 if ( Cost::unsafe < cost ) { 88 if (auto enumInst = dynamic_cast<const ast::EnumInstType *>(dst)) { 89 assert(enumInst->base->base); 90 cost = Cost::unsafe; 76 if (auto enumInst = dynamic_cast<const ast::EnumInstType *>(dst)) { 77 if (enumInst->base->isTyped) cost = Cost::unsafe; 91 78 } 92 79 } 93 // }94 80 } 95 81
Note: See TracChangeset
for help on using the changeset viewer.