- File:
-
- 1 edited
-
src/ResolvExpr/ConversionCost.cpp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/ResolvExpr/ConversionCost.cpp
r00f89a6 ra7efc96 250 250 newSrc = new ast::BasicType( ast::BasicKind::UnsignedInt ); 251 251 } 252 if (dstAsRef->base->is_const() ) {253 auto cvtCost = conversionCost(newSrc, dstAsRef->base, srcIsLvalue, symtab, env) ;254 if (cvtCost == Cost::zero) { // exact match, may use a lvalue src255 if ( srcIsLvalue ) {256 if ( src->qualifiers == dstAsRef->base->qualifiers ) {257 return Cost::reference;258 } else if ( src->qualifiers < dstAsRef->base->qualifiers ) {259 return Cost::safe;260 } else {261 return Cost::unsafe;262 }263 }264 else {265 return Cost::reference;266 }267 }268 else { // not exact match, conversion is needed so lvalueness of src does not matter269 return cvtCost + Cost::reference;270 }271 }272 252 if ( typesCompatibleIgnoreQualifiers( newSrc, dstAsRef->base, env ) ) { 273 253 if ( srcIsLvalue ) { … … 279 259 return Cost::unsafe; 280 260 } 281 } else { // rvalue-to-NC-ref conversion 261 } else if ( dstAsRef->base->is_const() ) { 262 return Cost::safe; 263 } else { 282 264 return Cost::unsafe; 283 265 }
Note:
See TracChangeset
for help on using the changeset viewer.