Ignore:
Timestamp:
Oct 20, 2017, 1:37:11 PM (6 years ago)
Author:
Aaron Moss <a3moss@…>
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, resolv-new, with_gc
Children:
d551d0a
Parents:
4b6ef70
Message:

Fix cost bug in resolver refactor

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/ResolvExpr/AlternativeFinder.cc

    r4b6ef70 r1fdfc23  
    625625
    626626                /// Clones and adds an actual, returns this
    627                 ArgPack& withArg( Expression* expr ) {
    628                         actuals.emplace_back( expr->clone(), this->env, Cost::zero );
     627                ArgPack& withArg( Expression* expr, Cost cost = Cost::zero ) {
     628                        actuals.emplace_back( expr->clone(), this->env, cost );
    629629                        if ( ! tupleEls.empty() ) ++tupleEls.back();
    630630                        return *this;
     
    686686                                                // add details of actual to result
    687687                                                aResult.env.addActual( actual.env, aResult.openVars );
     688                                                Cost cost = actual.cost;
    688689               
    689690                                                // explode argument
     
    693694                                                // add exploded argument to tuple
    694695                                                for ( Alternative& aActual : exploded ) {
    695                                                         aResult.withArg( aActual.expr );
     696                                                        aResult.withArg( aActual.expr, cost );
     697                                                        cost = Cost::zero;
    696698                                                }
    697699                                                ++aResult.nextArg;
     
    777779                                if ( unify( formalType, actualType, aResult.env, aResult.need, aResult.have, aResult.openVars, indexer ) ) {
    778780                                        // add argument
    779                                         aResult.withArg( aActual.expr );
     781                                        aResult.withArg( aActual.expr, actual.cost );
    780782                                        if ( exploded.size() == 1 ) {
    781783                                                // argument consumed
Note: See TracChangeset for help on using the changeset viewer.