Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/ResolvExpr/CandidateFinder.cpp

    r9e23b446 r09f34a84  
    4141#include "Common/utility.h"       // for move, copy
    4242#include "SymTab/Mangler.h"
    43 #include "SymTab/Validate.h"      // for validateType
    4443#include "Tuples/Tuples.h"        // for handleTupleAssignment
    4544#include "InitTweak/InitTweak.h"  // for getPointerBase
     
    270269                        unsigned nextArg, unsigned tupleStart = 0, Cost cost = Cost::zero,
    271270                        unsigned nextExpl = 0, unsigned explAlt = 0 )
    272                 : parent(parent), expr( expr ), cost( cost ), env( move( env ) ), need( move( need ) ),
    273                   have( move( have ) ), open( move( open ) ), nextArg( nextArg ), tupleStart( tupleStart ),
     271                : parent(parent), expr( expr ), cost( cost ), env( std::move( env ) ), need( std::move( need ) ),
     272                  have( std::move( have ) ), open( std::move( open ) ), nextArg( nextArg ), tupleStart( tupleStart ),
    274273                  nextExpl( nextExpl ), explAlt( explAlt ) {}
    275274
     
    277276                        const ArgPack & o, ast::TypeEnvironment && env, ast::AssertionSet && need,
    278277                        ast::AssertionSet && have, ast::OpenVarSet && open, unsigned nextArg, Cost added )
    279                 : parent( o.parent ), expr( o.expr ), cost( o.cost + added ), env( move( env ) ),
    280                   need( move( need ) ), have( move( have ) ), open( move( open ) ), nextArg( nextArg ),
     278                : parent( o.parent ), expr( o.expr ), cost( o.cost + added ), env( std::move( env ) ),
     279                  need( std::move( need ) ), have( std::move( have ) ), open( std::move( open ) ), nextArg( nextArg ),
    281280                  tupleStart( o.tupleStart ), nextExpl( 0 ), explAlt( 0 ) {}
    282281
     
    302301                        // reset pack to appropriate tuple
    303302                        std::vector< ast::ptr< ast::Expr > > exprv( exprs.begin(), exprs.end() );
    304                         expr = new ast::TupleExpr{ expr->location, move( exprv ) };
     303                        expr = new ast::TupleExpr{ expr->location, std::move( exprv ) };
    305304                        tupleStart = pack->tupleStart - 1;
    306305                        parent = pack->parent;
     
    405404                                                                newResult.open, symtab )
    406405                                                ) {
    407                                                         finalResults.emplace_back( move( newResult ) );
     406                                                        finalResults.emplace_back( std::move( newResult ) );
    408407                                                }
    409408
     
    424423                                                if ( expl.exprs.empty() ) {
    425424                                                        results.emplace_back(
    426                                                                 results[i], move( env ), copy( results[i].need ),
    427                                                                 copy( results[i].have ), move( open ), nextArg + 1, expl.cost );
     425                                                                results[i], std::move( env ), copy( results[i].need ),
     426                                                                copy( results[i].have ), std::move( open ), nextArg + 1, expl.cost );
    428427
    429428                                                        continue;
     
    432431                                                // add new result
    433432                                                results.emplace_back(
    434                                                         i, expl.exprs.front(), move( env ), copy( results[i].need ),
    435                                                         copy( results[i].have ), move( open ), nextArg + 1, nTuples,
     433                                                        i, expl.exprs.front(), std::move( env ), copy( results[i].need ),
     434                                                        copy( results[i].have ), std::move( open ), nextArg + 1, nTuples,
    436435                                                        expl.cost, expl.exprs.size() == 1 ? 0 : 1, j );
    437436                                        }
     
    445444                        // splice final results onto results
    446445                        for ( std::size_t i = 0; i < finalResults.size(); ++i ) {
    447                                 results.emplace_back( move( finalResults[i] ) );
     446                                results.emplace_back( std::move( finalResults[i] ) );
    448447                        }
    449448                        return ! finalResults.empty();
     
    479478
    480479                                        results.emplace_back(
    481                                                 i, expr, move( env ), move( need ), move( have ), move( open ), nextArg,
     480                                                i, expr, std::move( env ), std::move( need ), std::move( have ), std::move( open ), nextArg,
    482481                                                nTuples, Cost::zero, nextExpl, results[i].explAlt );
    483482                                }
     
    495494                                        if ( unify( paramType, cnst->result, env, need, have, open, symtab ) ) {
    496495                                                results.emplace_back(
    497                                                         i, new ast::DefaultArgExpr{ cnst->location, cnst }, move( env ),
    498                                                         move( need ), move( have ), move( open ), nextArg, nTuples );
     496                                                        i, new ast::DefaultArgExpr{ cnst->location, cnst }, std::move( env ),
     497                                                        std::move( need ), std::move( have ), std::move( open ), nextArg, nTuples );
    499498                                        }
    500499                                }
     
    517516                                if ( expl.exprs.empty() ) {
    518517                                        results.emplace_back(
    519                                                 results[i], move( env ), move( need ), move( have ), move( open ),
     518                                                results[i], std::move( env ), std::move( need ), std::move( have ), std::move( open ),
    520519                                                nextArg + 1, expl.cost );
    521520
     
    539538                                        // add new result
    540539                                        results.emplace_back(
    541                                                 i, expr, move( env ), move( need ), move( have ), move( open ),
     540                                                i, expr, std::move( env ), std::move( need ), std::move( have ), std::move( open ),
    542541                                                nextArg + 1, nTuples, expl.cost, expl.exprs.size() == 1 ? 0 : 1, j );
    543542                                }
     
    577576                                        restructureCast( idx, toType->getComponent( i ), isGenerated ) );
    578577                        }
    579                         return new ast::TupleExpr{ arg->location, move( components ) };
     578                        return new ast::TupleExpr{ arg->location, std::move( components ) };
    580579                } else {
    581580                        // handle normally
     
    673672                        }
    674673                        std::vector< ast::ptr< ast::Expr > > vargs( args.begin(), args.end() );
    675                         appExpr->args = move( vargs );
     674                        appExpr->args = std::move( vargs );
    676675                        // build and validate new candidate
    677676                        auto newCand =
     
    784783                                                        if ( expl.exprs.empty() ) {
    785784                                                                results.emplace_back(
    786                                                                         results[i], move( env ), copy( results[i].need ),
    787                                                                         copy( results[i].have ), move( open ), nextArg + 1,
     785                                                                        results[i], std::move( env ), copy( results[i].need ),
     786                                                                        copy( results[i].have ), std::move( open ), nextArg + 1,
    788787                                                                        expl.cost );
    789788
     
    793792                                                        // add new result
    794793                                                        results.emplace_back(
    795                                                                 i, expl.exprs.front(), move( env ), copy( results[i].need ),
    796                                                                 copy( results[i].have ), move( open ), nextArg + 1, 0, expl.cost,
     794                                                                i, expl.exprs.front(), std::move( env ), copy( results[i].need ),
     795                                                                copy( results[i].have ), std::move( open ), nextArg + 1, 0, expl.cost,
    797796                                                                expl.exprs.size() == 1 ? 0 : 1, j );
    798797                                                }
     
    844843                                // as a member expression
    845844                                addAnonConversions( newCand );
    846                                 candidates.emplace_back( move( newCand ) );
     845                                candidates.emplace_back( std::move( newCand ) );
    847846                        }
    848847                }
     
    902901                                                        const ast::EnumDecl * enumDecl = enumInst->base;
    903902                                                        if ( const ast::Type* enumType = enumDecl->base ) {
    904                                                                 // instance of enum (T) is a instance of type (T) 
     903                                                                // instance of enum (T) is a instance of type (T)
    905904                                                                funcFinder.otypeKeys.insert(Mangle::mangle(enumType, Mangle::NoGenericParams | Mangle::Type));
    906905                                                        } else {
     
    908907                                                                funcFinder.otypeKeys.insert(Mangle::mangle(enumDecl, Mangle::NoGenericParams | Mangle::Type));
    909908                                                        }
    910                                                 } 
     909                                                }
    911910                                                else funcFinder.otypeKeys.insert(Mangle::mangle(argType, Mangle::NoGenericParams | Mangle::Type));
    912911                                        }
     
    987986                                        funcE.emplace_back( *func, symtab );
    988987                                }
    989                                 argExpansions.emplace_front( move( funcE ) );
     988                                argExpansions.emplace_front( std::move( funcE ) );
    990989
    991990                                for ( const CandidateRef & op : opFinder ) {
     
    10311030                                if ( cvtCost != Cost::infinity ) {
    10321031                                        withFunc->cvtCost = cvtCost;
    1033                                         candidates.emplace_back( move( withFunc ) );
    1034                                 }
    1035                         }
    1036                         found = move( candidates );
     1032                                        candidates.emplace_back( std::move( withFunc ) );
     1033                                }
     1034                        }
     1035                        found = std::move( candidates );
    10371036
    10381037                        // use a new list so that candidates are not examined by addAnonConversions twice
     
    10911090                        assert( toType );
    10921091                        toType = resolveTypeof( toType, context );
    1093                         // toType = SymTab::validateType( castExpr->location, toType, symtab );
    10941092                        toType = adjustExprType( toType, tenv, symtab );
    10951093
     
    11331131                                        CandidateRef newCand = std::make_shared<Candidate>(
    11341132                                                restructureCast( cand->expr, toType, castExpr->isGenerated ),
    1135                                                 copy( cand->env ), move( open ), move( need ), cand->cost,
     1133                                                copy( cand->env ), std::move( open ), std::move( need ), cand->cost,
    11361134                                                cand->cost + thisCost );
    11371135                                        inferParameters( newCand, matches );
     
    12871285                                // as a name expression
    12881286                                addAnonConversions( newCand );
    1289                                 candidates.emplace_back( move( newCand ) );
     1287                                candidates.emplace_back( std::move( newCand ) );
    12901288                        }
    12911289                }
     
    13961394                                                new ast::LogicalExpr{
    13971395                                                        logicalExpr->location, r1->expr, r2->expr, logicalExpr->isAnd },
    1398                                                 move( env ), move( open ), move( need ), r1->cost + r2->cost );
     1396                                                std::move( env ), std::move( open ), std::move( need ), r1->cost + r2->cost );
    13991397                                }
    14001398                        }
     
    14541452                                                        // output candidate
    14551453                                                        CandidateRef newCand = std::make_shared<Candidate>(
    1456                                                                 newExpr, move( env ), move( open ), move( need ), cost );
     1454                                                                newExpr, std::move( env ), std::move( open ), std::move( need ), cost );
    14571455                                                        inferParameters( newCand, candidates );
    14581456                                                }
     
    15211519                                                // add candidate
    15221520                                                CandidateRef newCand = std::make_shared<Candidate>(
    1523                                                         newExpr, move( env ), move( open ), move( need ),
     1521                                                        newExpr, std::move( env ), std::move( open ), std::move( need ),
    15241522                                                        r1->cost + r2->cost );
    15251523                                                inferParameters( newCand, candidates );
     
    15501548
    15511549                                addCandidate(
    1552                                         new ast::TupleExpr{ tupleExpr->location, move( exprs ) },
    1553                                         move( env ), move( open ), move( need ), sumCost( subs ) );
     1550                                        new ast::TupleExpr{ tupleExpr->location, std::move( exprs ) },
     1551                                        std::move( env ), std::move( open ), std::move( need ), sumCost( subs ) );
    15541552                        }
    15551553                }
     
    15901588                                // calculate target type
    15911589                                const ast::Type * toType = resolveTypeof( initAlt.type, context );
    1592                                 // toType = SymTab::validateType( initExpr->location, toType, symtab );
    15931590                                toType = adjustExprType( toType, tenv, symtab );
    15941591                                // The call to find must occur inside this loop, otherwise polymorphic return
     
    16381635                                                                initExpr->location, restructureCast( cand->expr, toType ),
    16391636                                                                initAlt.designation },
    1640                                                         move(env), move( open ), move( need ), cand->cost, thisCost );
     1637                                                        std::move(env), std::move( open ), std::move( need ), cand->cost, thisCost );
    16411638                                                inferParameters( newCand, matches );
    16421639                                        }
     
    17711768                cand->env.applyFree( newResult );
    17721769                cand->expr = ast::mutate_field(
    1773                         cand->expr.get(), &ast::Expr::result, move( newResult ) );
     1770                        cand->expr.get(), &ast::Expr::result, std::move( newResult ) );
    17741771
    17751772                out.emplace_back( cand );
     
    18571854
    18581855                auto oldsize = candidates.size();
    1859                 candidates = move( pruned );
     1856                candidates = std::move( pruned );
    18601857
    18611858                PRINT(
Note: See TracChangeset for help on using the changeset viewer.