authorgravatar for mitchell.hashimoto@gmail.comMitchell Hashimoto <mitchell.hashimoto@gmail.com> 2022-02-28 09:41:03-08:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-02-28 20:42:13-07:00
log0ce2d46ff9b520ebd09f499cd2caf6e5667f5fa7
tree78859051047e074eb6be8c6674f8ee70a930c942
parentea00e500457231083263302cc6972998a1a92910

stage2: error union/set peer resolution switch to "else" form of for loop


1 files changed, 6 insertions(+), 24 deletions(-)

src/Sema.zig+6-24
...@@ -17738,23 +17738,17 @@ fn resolvePeerTypes(...@@ -17738,23 +17738,17 @@ fn resolvePeerTypes(
17738 // If chosen is superset of candidate, keep it.17738 // If chosen is superset of candidate, keep it.
17739 // If candidate is superset of chosen, switch it.17739 // If candidate is superset of chosen, switch it.
17740 // If neither is a superset, merge errors.17740 // If neither is a superset, merge errors.
17741 var prev_is_superset = true;
17742 for (candidate_ty.errorSetNames()) |name| {17741 for (candidate_ty.errorSetNames()) |name| {
17743 if (!err_set_ty.?.errorSetHasField(name)) {17742 if (!err_set_ty.?.errorSetHasField(name)) {
17744 prev_is_superset = false;
17745 break;17743 break;
17746 }17744 }
17747 }17745 } else continue;
17748 if (prev_is_superset) continue; // use previous
1774917746
17750 var cand_is_superset = true;
17751 for (err_set_ty.?.errorSetNames()) |name| {17747 for (err_set_ty.?.errorSetNames()) |name| {
17752 if (!candidate_ty.errorSetHasField(name)) {17748 if (!candidate_ty.errorSetHasField(name)) {
17753 cand_is_superset = false;
17754 break;17749 break;
17755 }17750 }
17756 }17751 } else {
17757 if (cand_is_superset) {
17758 // Swap to candidate17752 // Swap to candidate
17759 err_set_ty = candidate_ty;17753 err_set_ty = candidate_ty;
17760 chosen = candidate;17754 chosen = candidate;
...@@ -17801,14 +17795,11 @@ fn resolvePeerTypes(...@@ -17801,14 +17795,11 @@ fn resolvePeerTypes(
17801 }17795 }
1780217796
17803 // If previous is superset, keep the previous17797 // If previous is superset, keep the previous
17804 var prev_is_superset = true;
17805 for (candidate_ty.errorSetNames()) |name| {17798 for (candidate_ty.errorSetNames()) |name| {
17806 if (!err_set_ty.?.errorSetHasField(name)) {17799 if (!err_set_ty.?.errorSetHasField(name)) {
17807 prev_is_superset = false;
17808 break;17800 break;
17809 }17801 }
17810 }17802 } else continue;
17811 if (prev_is_superset) continue; // use previous
1781217803
17813 // Merge17804 // Merge
17814 err_set_ty = try err_set_ty.?.errorSetMerge(sema.arena, candidate_ty);17805 err_set_ty = try err_set_ty.?.errorSetMerge(sema.arena, candidate_ty);
...@@ -17834,14 +17825,11 @@ fn resolvePeerTypes(...@@ -17834,14 +17825,11 @@ fn resolvePeerTypes(
17834 }17825 }
1783517826
17836 // If candidate is a superset of the error type, then use it.17827 // If candidate is a superset of the error type, then use it.
17837 var cand_is_superset = true;
17838 for (err_set_ty.?.errorSetNames()) |name| {17828 for (err_set_ty.?.errorSetNames()) |name| {
17839 if (!eu_set_ty.errorSetHasField(name)) {17829 if (!eu_set_ty.errorSetHasField(name)) {
17840 cand_is_superset = false;
17841 break;17830 break;
17842 }17831 }
17843 }17832 } else {
17844 if (cand_is_superset) {
17845 // Swap to candidate17833 // Swap to candidate
17846 err_set_ty = eu_set_ty;17834 err_set_ty = eu_set_ty;
17847 chosen = candidate;17835 chosen = candidate;
...@@ -17901,23 +17889,17 @@ fn resolvePeerTypes(...@@ -17901,23 +17889,17 @@ fn resolvePeerTypes(
17901 if (err_set_ty == null) err_set_ty = chosen_set_ty;17889 if (err_set_ty == null) err_set_ty = chosen_set_ty;
1790217890
17903 // If the previous error set type is a superset, we're done.17891 // If the previous error set type is a superset, we're done.
17904 var prev_is_superset = true;
17905 for (candidate_set_ty.errorSetNames()) |name| {17892 for (candidate_set_ty.errorSetNames()) |name| {
17906 if (!chosen_set_ty.errorSetHasField(name)) {17893 if (!chosen_set_ty.errorSetHasField(name)) {
17907 prev_is_superset = false;
17908 break;17894 break;
17909 }17895 }
17910 }17896 } else continue;
17911 if (prev_is_superset) continue; // use previous
1791217897
17913 var cand_is_superset = true;
17914 for (chosen_set_ty.errorSetNames()) |name| {17898 for (chosen_set_ty.errorSetNames()) |name| {
17915 if (!candidate_set_ty.errorSetHasField(name)) {17899 if (!candidate_set_ty.errorSetHasField(name)) {
17916 cand_is_superset = false;
17917 break;17900 break;
17918 }17901 }
17919 }17902 } else {
17920 if (cand_is_superset) {
17921 err_set_ty = candidate_ty;17903 err_set_ty = candidate_ty;
17922 continue;17904 continue;
17923 }17905 }