Changeset 62194cb for src/ResolvExpr/AlternativeFinder.cc
- Timestamp:
- Nov 23, 2017, 4:24:48 PM (7 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:
- 178e4ec
- Parents:
- a8b27c6
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/ResolvExpr/AlternativeFinder.cc
ra8b27c6 r62194cb 676 676 auto nextArg = results[i].nextArg; 677 677 678 // use remainderof exploded tuple if present678 // use next element of exploded tuple if present 679 679 if ( results[i].hasExpl() ) { 680 680 const ExplodedActual& expl = results[i].getExpl( args ); 681 const Alternative& actual = expl.alts[results[i].nextExpl];682 681 683 TypeEnvironment env = results[i].env;684 OpenVarSet openVars = results[i].openVars;685 686 env.addActual( actual.env, openVars );687 688 682 unsigned nextExpl = results[i].nextExpl + 1; 689 if ( nextExpl == expl. alts.size() ) {683 if ( nextExpl == expl.exprs.size() ) { 690 684 nextExpl = 0; 691 685 } 692 686 693 687 results.emplace_back( 694 i, actual.expr, move(env), copy(results[i].need), 695 copy(results[i].have), move(openVars), nextArg, nTuples, 696 Cost::zero, nextExpl, results[i].explAlt ); 688 i, expl.exprs[results[i].nextExpl].get(), copy(results[i].env), 689 copy(results[i].need), copy(results[i].have), 690 copy(results[i].openVars), nextArg, nTuples, Cost::zero, nextExpl, 691 results[i].explAlt ); 697 692 698 693 continue; … … 758 753 759 754 // skip empty tuple arguments by (near-)cloning parent into next gen 760 if ( expl. alts.empty() ) {755 if ( expl.exprs.empty() ) { 761 756 results.emplace_back( 762 757 results[i], move(env), copy(results[i].need), … … 768 763 // add new result 769 764 results.emplace_back( 770 i, expl. alts.front().expr, move(env), copy(results[i].need),765 i, expl.exprs.front().get(), move(env), copy(results[i].need), 771 766 copy(results[i].have), move(openVars), nextArg + 1, 772 nTuples, expl.cost, expl. alts.size() == 1 ? 0 : 1, j );767 nTuples, expl.cost, expl.exprs.size() == 1 ? 0 : 1, j ); 773 768 } 774 769 } … … 794 789 if ( results[i].hasExpl() ) { 795 790 const ExplodedActual& expl = results[i].getExpl( args ); 796 const Alternative& actual = expl.alts[results[i].nextExpl];791 Expression* expr = expl.exprs[results[i].nextExpl].get(); 797 792 798 793 TypeEnvironment env = results[i].env; … … 800 795 OpenVarSet openVars = results[i].openVars; 801 796 802 env.addActual( actual.env, openVars ); 803 Type* actualType = actual.expr->get_result(); 797 Type* actualType = expr->get_result(); 804 798 805 799 PRINT( … … 813 807 if ( unify( formalType, actualType, env, need, have, openVars, indexer ) ) { 814 808 unsigned nextExpl = results[i].nextExpl + 1; 815 if ( nextExpl == expl. alts.size() ) {809 if ( nextExpl == expl.exprs.size() ) { 816 810 nextExpl = 0; 817 811 } 818 812 819 813 results.emplace_back( 820 i, actual.expr, move(env), move(need), move(have), move(openVars),821 n extArg, nTuples, Cost::zero, nextExpl, results[i].explAlt );814 i, expr, move(env), move(need), move(have), move(openVars), nextArg, 815 nTuples, Cost::zero, nextExpl, results[i].explAlt ); 822 816 } 823 817 … … 857 851 858 852 // skip empty tuple arguments by (near-)cloning parent into next gen 859 if ( expl. alts.empty() ) {853 if ( expl.exprs.empty() ) { 860 854 results.emplace_back( 861 855 results[i], move(env), move(need), move(have), move(openVars), … … 866 860 867 861 // consider only first exploded actual 868 const Alternative& actual = expl.alts.front();869 Type* actualType = actual.expr->get_result()->clone();862 Expression* expr = expl.exprs.front().get(); 863 Type* actualType = expr->get_result()->clone(); 870 864 871 865 PRINT( … … 881 875 // add new result 882 876 results.emplace_back( 883 i, actual.expr, move(env), move(need), move(have), move(openVars),884 n extArg + 1, nTuples, expl.cost, expl.alts.size() == 1 ? 0 : 1, j );877 i, expr, move(env), move(need), move(have), move(openVars), nextArg + 1, 878 nTuples, expl.cost, expl.exprs.size() == 1 ? 0 : 1, j ); 885 879 } 886 880 } … … 962 956 if ( results[i].hasExpl() ) { 963 957 const ExplodedActual& expl = results[i].getExpl( args ); 964 const Alternative& actual = expl.alts[results[i].nextExpl];965 958 966 TypeEnvironment env = results[i].env;967 OpenVarSet openVars = results[i].openVars;968 969 env.addActual( actual.env, openVars );970 971 959 unsigned nextExpl = results[i].nextExpl + 1; 972 if ( nextExpl == expl. alts.size() ) {960 if ( nextExpl == expl.exprs.size() ) { 973 961 nextExpl = 0; 974 962 } 975 963 976 964 results.emplace_back( 977 i, actual.expr, move(env), copy(results[i].need), 978 copy(results[i].have), move(openVars), nextArg, 0, 979 Cost::zero, nextExpl, results[i].explAlt ); 965 i, expl.exprs[results[i].nextExpl].get(), copy(results[i].env), 966 copy(results[i].need), copy(results[i].have), 967 copy(results[i].openVars), nextArg, 0, Cost::zero, nextExpl, 968 results[i].explAlt ); 980 969 981 970 continue; … … 1000 989 1001 990 // skip empty tuple arguments by (near-)cloning parent into next gen 1002 if ( expl. alts.empty() ) {991 if ( expl.exprs.empty() ) { 1003 992 results.emplace_back( 1004 993 results[i], move(env), copy(results[i].need), … … 1010 999 // add new result 1011 1000 results.emplace_back( 1012 i, expl. alts.front().expr, move(env), copy(results[i].need),1001 i, expl.exprs.front().get(), move(env), copy(results[i].need), 1013 1002 copy(results[i].have), move(openVars), nextArg + 1, 0, 1014 expl.cost, expl. alts.size() == 1 ? 0 : 1, j );1003 expl.cost, expl.exprs.size() == 1 ? 0 : 1, j ); 1015 1004 } 1016 1005 }
Note: See TracChangeset
for help on using the changeset viewer.