Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/ResolvExpr/AlternativeFinder.cc

    rfee651f r13deae88  
    15441544                AlternativeFinder firstFinder( indexer, env );
    15451545                firstFinder.findWithAdjustment( logicalExpr->get_arg1() );
    1546                 if ( firstFinder.alternatives.empty() ) return;
    1547                 AlternativeFinder secondFinder( indexer, env );
    1548                 secondFinder.findWithAdjustment( logicalExpr->get_arg2() );
    1549                 if ( secondFinder.alternatives.empty() ) return;
    15501546                for ( AltList::const_iterator first = firstFinder.alternatives.begin(); first != firstFinder.alternatives.end(); ++first ) {
     1547                        AlternativeFinder secondFinder( indexer, first->env );
     1548                        secondFinder.findWithAdjustment( logicalExpr->get_arg2() );
    15511549                        for ( AltList::const_iterator second = secondFinder.alternatives.begin(); second != secondFinder.alternatives.end(); ++second ) {
    1552                                 TypeEnvironment compositeEnv;
    1553                                 compositeEnv.simpleCombine( first->env );
    1554                                 compositeEnv.simpleCombine( second->env );
    1555 
    15561550                                LogicalExpr *newExpr = new LogicalExpr( first->expr->clone(), second->expr->clone(), logicalExpr->get_isAnd() );
    1557                                 alternatives.push_back( Alternative( newExpr, compositeEnv, first->cost + second->cost ) );
     1551                                alternatives.push_back( Alternative( newExpr, second->env, first->cost + second->cost ) );
    15581552                        }
    15591553                }
     
    15641558                AlternativeFinder firstFinder( indexer, env );
    15651559                firstFinder.findWithAdjustment( conditionalExpr->get_arg1() );
    1566                 if ( firstFinder.alternatives.empty() ) return;
    1567                 // find alternatives for true expression
    1568                 AlternativeFinder secondFinder( indexer, env );
    1569                 secondFinder.findWithAdjustment( conditionalExpr->get_arg2() );
    1570                 if ( secondFinder.alternatives.empty() ) return;
    1571                 // find alterantives for false expression
    1572                 AlternativeFinder thirdFinder( indexer, env );
    1573                 thirdFinder.findWithAdjustment( conditionalExpr->get_arg3() );
    1574                 if ( thirdFinder.alternatives.empty() ) return;
    15751560                for ( AltList::const_iterator first = firstFinder.alternatives.begin(); first != firstFinder.alternatives.end(); ++first ) {
     1561                        // find alternatives for true expression
     1562                        AlternativeFinder secondFinder( indexer, first->env );
     1563                        secondFinder.findWithAdjustment( conditionalExpr->get_arg2() );
    15761564                        for ( AltList::const_iterator second = secondFinder.alternatives.begin(); second != secondFinder.alternatives.end(); ++second ) {
     1565                                // find alterantives for false expression
     1566                                AlternativeFinder thirdFinder( indexer, second->env );
     1567                                thirdFinder.findWithAdjustment( conditionalExpr->get_arg3() );
    15771568                                for ( AltList::const_iterator third = thirdFinder.alternatives.begin(); third != thirdFinder.alternatives.end(); ++third ) {
    1578                                         TypeEnvironment compositeEnv;
    1579                                         compositeEnv.simpleCombine( first->env );
    1580                                         compositeEnv.simpleCombine( second->env );
    1581                                         compositeEnv.simpleCombine( third->env );
    1582 
    15831569                                        // unify true and false types, then infer parameters to produce new alternatives
    15841570                                        OpenVarSet openVars;
    15851571                                        AssertionSet needAssertions, haveAssertions;
    1586                                         Alternative newAlt( 0, compositeEnv, first->cost + second->cost + third->cost );
     1572                                        Alternative newAlt( 0, third->env, first->cost + second->cost + third->cost );
    15871573                                        Type* commonType = nullptr;
    15881574                                        if ( unify( second->expr->get_result(), third->expr->get_result(), newAlt.env, needAssertions, haveAssertions, openVars, indexer, commonType ) ) {
     
    16151601                AlternativeFinder firstFinder( indexer, env );
    16161602                firstFinder.findWithAdjustment( rangeExpr->get_low() );
    1617                 if ( firstFinder.alternatives.empty() ) return;
    1618                 AlternativeFinder secondFinder( indexer, env );
    1619                 secondFinder.findWithAdjustment( rangeExpr->get_high() );
    1620                 if ( secondFinder.alternatives.empty() ) return;
    16211603                for ( AltList::const_iterator first = firstFinder.alternatives.begin(); first != firstFinder.alternatives.end(); ++first ) {
     1604                        AlternativeFinder secondFinder( indexer, first->env );
     1605                        secondFinder.findWithAdjustment( rangeExpr->get_high() );
    16221606                        for ( AltList::const_iterator second = secondFinder.alternatives.begin(); second != secondFinder.alternatives.end(); ++second ) {
    1623                                 TypeEnvironment compositeEnv;
    1624                                 compositeEnv.simpleCombine( first->env );
    1625                                 compositeEnv.simpleCombine( second->env );
    16261607                                OpenVarSet openVars;
    16271608                                AssertionSet needAssertions, haveAssertions;
    1628                                 Alternative newAlt( 0, compositeEnv, first->cost + second->cost );
     1609                                Alternative newAlt( 0, second->env, first->cost + second->cost );
    16291610                                Type* commonType = nullptr;
    16301611                                if ( unify( first->expr->get_result(), second->expr->get_result(), newAlt.env, needAssertions, haveAssertions, openVars, indexer, commonType ) ) {
Note: See TracChangeset for help on using the changeset viewer.