- Timestamp:
 - May 31, 2018, 3:51:00 PM (7 years ago)
 - Branches:
 - ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, with_gc
 - Children:
 - 518e97d
 - Parents:
 - 4e7cc5ce
 - git-author:
 - Rob Schluntz <rschlunt@…> (05/31/18 15:48:09)
 - git-committer:
 - Rob Schluntz <rschlunt@…> (05/31/18 15:51:00)
 - File:
 - 
      
- 1 edited
 
- 
          
  src/ResolvExpr/AlternativeFinder.cc (modified) (3 diffs)
 
 
Legend:
- Unmodified
 - Added
 - Removed
 
- 
      
src/ResolvExpr/AlternativeFinder.cc
r4e7cc5ce r5de1e2c 324 324 aggInst->lookup( name, members ); 325 325 326 for ( std::list< Declaration* >::const_iterator i = members.begin(); i != members.end(); ++i ) { 327 if ( DeclarationWithType *dwt = dynamic_cast< DeclarationWithType* >( *i ) ) { 328 alternatives.push_back( Alternative( new MemberExpr( dwt, expr->clone() ), env, newCost ) ); 329 renameTypes( alternatives.back().expr ); 330 addAnonConversions( alternatives.back() ); // add anonymous member interpretations whenever an aggregate value type is seen as a member expression. 326 for ( Declaration * decl : members ) { 327 if ( DeclarationWithType *dwt = dynamic_cast< DeclarationWithType* >( decl ) ) { 328 // addAnonAlternatives uses vector::push_back, which invalidates references to existing elements, so 329 // can't construct in place and use vector::back 330 Alternative newAlt( new MemberExpr( dwt, expr->clone() ), env, newCost ); 331 renameTypes( newAlt.expr ); 332 addAnonConversions( newAlt ); // add anonymous member interpretations whenever an aggregate value type is seen as a member expression. 333 alternatives.push_back( std::move(newAlt) ); 331 334 } else { 332 335 assert( false ); … … 1379 1382 Cost cost = Cost::zero; 1380 1383 Expression * newExpr = data.combine( cost ); 1381 alternatives.push_back( Alternative( newExpr, env, Cost::zero, cost ) ); 1384 1385 // addAnonAlternatives uses vector::push_back, which invalidates references to existing elements, so 1386 // can't construct in place and use vector::back 1387 Alternative newAlt( newExpr, env, Cost::zero, cost ); 1382 1388 PRINT( 1383 1389 std::cerr << "decl is "; … … 1388 1394 std::cerr << std::endl; 1389 1395 ) 1390 renameTypes( alternatives.back().expr ); 1391 addAnonConversions( alternatives.back() ); // add anonymous member interpretations whenever an aggregate value type is seen as a name expression. 1396 renameTypes( newAlt.expr ); 1397 addAnonConversions( newAlt ); // add anonymous member interpretations whenever an aggregate value type is seen as a name expression. 1398 alternatives.push_back( std::move(newAlt) ); 1392 1399 } // for 1393 1400 }  
  Note:
 See   TracChangeset
 for help on using the changeset viewer.