Make pattern presence constraints an enum variant

This commit is contained in:
ayazhafiz 2021-12-22 19:33:51 -06:00
parent 95ad906c59
commit b4c9068676
3 changed files with 37 additions and 19 deletions

View file

@ -350,7 +350,8 @@ fn solve(
state
}
Pattern(region, category, typ, expectation, presence) => {
Pattern(region, category, typ, expectation)
| Present(typ, PresenceConstraint::Pattern(region, category, expectation)) => {
let actual = type_to_var(subs, rank, pools, cached_aliases, typ);
let expected = type_to_var(
subs,
@ -360,7 +361,9 @@ fn solve(
expectation.get_type_ref(),
);
match unify(subs, actual, expected, *presence) {
let presence_con = matches!(constraint, Present(_, _));
match unify(subs, actual, expected, presence_con) {
Success(vars) => {
introduce(subs, rank, pools, &vars);
@ -684,6 +687,9 @@ fn solve(
}
}
}
PresenceConstraint::Pattern(_, _, _) => {
unreachable!("Handled in a previous branch")
}
}
}
}