Changes in / [2325b57:1b56a7f]
- Location:
- src
- Files:
-
- 2 edited
-
GenPoly/Lvalue.cpp (modified) (1 diff)
-
ResolvExpr/ConversionCost.cpp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/GenPoly/Lvalue.cpp
r2325b57 r1b56a7f 316 316 Warning::RvalueToReferenceConversion, toCString( expr->arg ) ); 317 317 318 319 // allowing conversion in the rvalue to const ref case320 // use the referenced-to type to create temp variables321 ast::Type const * targetType = dstType;322 for (int i = 0; i < diff; ++i) targetType = (strict_dynamic_cast<ast::ReferenceType const *>(targetType))->base;323 324 318 static UniqueName tmpNamer( "__ref_tmp_" ); 325 319 ast::ObjectDecl * tmp = new ast::ObjectDecl( expr->arg->location, 326 320 tmpNamer.newName(), 327 // ast::deepCopy( expr->arg->result ), 328 ast::deepCopy (targetType), 321 ast::deepCopy( expr->arg->result ), 329 322 new ast::SingleInit( expr->arg->location, expr->arg ) ); 330 323 PRINT( std::cerr << "make tmp: " << tmp << std::endl; ) -
src/ResolvExpr/ConversionCost.cpp
r2325b57 r1b56a7f 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.