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(
1773817738 // If chosen is superset of candidate, keep it.
1773917739 // If candidate is superset of chosen, switch it.
1774017740 // If neither is a superset, merge errors.
17741 var prev_is_superset = true;
1774217741 for (candidate_ty.errorSetNames()) |name| {
1774317742 if (!err_set_ty.?.errorSetHasField(name)) {
17744 prev_is_superset = false;
1774517743 break;
1774617744 }
17747 }
17748 if (prev_is_superset) continue; // use previous
17745 } else continue;
1774917746
17750 var cand_is_superset = true;
1775117747 for (err_set_ty.?.errorSetNames()) |name| {
1775217748 if (!candidate_ty.errorSetHasField(name)) {
17753 cand_is_superset = false;
1775417749 break;
1775517750 }
17756 }
17757 if (cand_is_superset) {
17751 } else {
1775817752 // Swap to candidate
1775917753 err_set_ty = candidate_ty;
1776017754 chosen = candidate;
......@@ -17801,14 +17795,11 @@ fn resolvePeerTypes(
1780117795 }
1780217796
1780317797 // If previous is superset, keep the previous
17804 var prev_is_superset = true;
1780517798 for (candidate_ty.errorSetNames()) |name| {
1780617799 if (!err_set_ty.?.errorSetHasField(name)) {
17807 prev_is_superset = false;
1780817800 break;
1780917801 }
17810 }
17811 if (prev_is_superset) continue; // use previous
17802 } else continue;
1781217803
1781317804 // Merge
1781417805 err_set_ty = try err_set_ty.?.errorSetMerge(sema.arena, candidate_ty);
......@@ -17834,14 +17825,11 @@ fn resolvePeerTypes(
1783417825 }
1783517826
1783617827 // If candidate is a superset of the error type, then use it.
17837 var cand_is_superset = true;
1783817828 for (err_set_ty.?.errorSetNames()) |name| {
1783917829 if (!eu_set_ty.errorSetHasField(name)) {
17840 cand_is_superset = false;
1784117830 break;
1784217831 }
17843 }
17844 if (cand_is_superset) {
17832 } else {
1784517833 // Swap to candidate
1784617834 err_set_ty = eu_set_ty;
1784717835 chosen = candidate;
......@@ -17901,23 +17889,17 @@ fn resolvePeerTypes(
1790117889 if (err_set_ty == null) err_set_ty = chosen_set_ty;
1790217890
1790317891 // If the previous error set type is a superset, we're done.
17904 var prev_is_superset = true;
1790517892 for (candidate_set_ty.errorSetNames()) |name| {
1790617893 if (!chosen_set_ty.errorSetHasField(name)) {
17907 prev_is_superset = false;
1790817894 break;
1790917895 }
17910 }
17911 if (prev_is_superset) continue; // use previous
17896 } else continue;
1791217897
17913 var cand_is_superset = true;
1791417898 for (chosen_set_ty.errorSetNames()) |name| {
1791517899 if (!candidate_set_ty.errorSetHasField(name)) {
17916 cand_is_superset = false;
1791717900 break;
1791817901 }
17919 }
17920 if (cand_is_superset) {
17902 } else {
1792117903 err_set_ty = candidate_ty;
1792217904 continue;
1792317905 }