Changeset ffd0ac2 for src/ResolvExpr
- Timestamp:
- Jan 30, 2018, 2:04:33 PM (8 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, resolv-new, with_gc
- Children:
- 42be3c3
- Parents:
- 2e9aed4 (diff), 5a73f0f (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - File:
-
- 1 edited
-
src/ResolvExpr/AlternativeFinder.cc (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/ResolvExpr/AlternativeFinder.cc
r2e9aed4 rffd0ac2 1544 1544 AlternativeFinder firstFinder( indexer, env ); 1545 1545 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; 1546 1550 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() );1549 1551 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 1550 1556 LogicalExpr *newExpr = new LogicalExpr( first->expr->clone(), second->expr->clone(), logicalExpr->get_isAnd() ); 1551 alternatives.push_back( Alternative( newExpr, second->env, first->cost + second->cost ) );1557 alternatives.push_back( Alternative( newExpr, compositeEnv, first->cost + second->cost ) ); 1552 1558 } 1553 1559 } … … 1558 1564 AlternativeFinder firstFinder( indexer, env ); 1559 1565 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; 1560 1575 for ( AltList::const_iterator first = firstFinder.alternatives.begin(); first != firstFinder.alternatives.end(); ++first ) { 1561 // find alternatives for true expression1562 AlternativeFinder secondFinder( indexer, first->env );1563 secondFinder.findWithAdjustment( conditionalExpr->get_arg2() );1564 1576 for ( AltList::const_iterator second = secondFinder.alternatives.begin(); second != secondFinder.alternatives.end(); ++second ) { 1565 // find alterantives for false expression1566 AlternativeFinder thirdFinder( indexer, second->env );1567 thirdFinder.findWithAdjustment( conditionalExpr->get_arg3() );1568 1577 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 1569 1583 // unify true and false types, then infer parameters to produce new alternatives 1570 1584 OpenVarSet openVars; 1571 1585 AssertionSet needAssertions, haveAssertions; 1572 Alternative newAlt( 0, third->env, first->cost + second->cost + third->cost );1586 Alternative newAlt( 0, compositeEnv, first->cost + second->cost + third->cost ); 1573 1587 Type* commonType = nullptr; 1574 1588 if ( unify( second->expr->get_result(), third->expr->get_result(), newAlt.env, needAssertions, haveAssertions, openVars, indexer, commonType ) ) { … … 1601 1615 AlternativeFinder firstFinder( indexer, env ); 1602 1616 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; 1603 1621 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() );1606 1622 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 ); 1607 1626 OpenVarSet openVars; 1608 1627 AssertionSet needAssertions, haveAssertions; 1609 Alternative newAlt( 0, second->env, first->cost + second->cost );1628 Alternative newAlt( 0, compositeEnv, first->cost + second->cost ); 1610 1629 Type* commonType = nullptr; 1611 1630 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.