Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/ResolvExpr/AlternativeFinder.cc

    rda6032af rd97c3a4  
    474474                }
    475475
    476                 // specialization cost of return types can't be accounted for directly, it disables
    477                 // otherwise-identical calls, like this example based on auto-newline in the I/O lib:
    478                 //
    479                 //   forall(otype OS) {
    480                 //     void ?|?(OS&, int);  // with newline
    481                 //     OS&  ?|?(OS&, int);  // no newline, always chosen due to more specialization
    482                 //   }
     476                // mark specialization cost of return types
     477                for ( DeclarationWithType* returnVal : function->returnVals ) {
     478                        convCost.decSpec( specCost( returnVal->get_type() ) );
     479                }
    483480
    484481                // mark type variable and specialization cost of forall clause
     
    486483                for ( TypeDecl* td : function->forall ) {
    487484                        convCost.decSpec( td->assertions.size() );
     485                }
     486
     487                // xxx -- replace with new costs in resolver
     488                for ( InferredParams::const_iterator assert = appExpr->inferParams.begin(); assert != appExpr->inferParams.end(); ++assert ) {
     489                        convCost += computeConversionCost( assert->second.actualType, assert->second.formalType, indexer, alt.env );
    488490                }
    489491
     
    12271229                                Alternative newAlt{
    12281230                                        restructureCast( alt.expr->clone(), toType, castExpr->isGenerated ),
    1229                                         alt.env, openVars, needAssertions, alt.cost, alt.cost + thisCost };
     1231                                        alt.env, openVars, needAssertions, alt.cost + thisCost, thisCost };
    12301232                                inferParameters( newAlt, back_inserter( candidates ) );
    12311233                        } // if
Note: See TracChangeset for help on using the changeset viewer.