Update ability bindings

This commit is contained in:
Ayaz Hafiz 2022-10-17 10:18:46 -05:00
parent 0da72df5e9
commit 3f5a86ded3
No known key found for this signature in database
GPG key ID: 0E2A37416A25EF58

View file

@ -2750,17 +2750,23 @@ fn type_to_variable<'a>(
for (Loc { value: var, region }, abilities) in bind_to_abilities {
match *subs.get_content_unchecked(var) {
Content::RigidVar(a) => {
// TODO(multi-abilities)
subs.set_content(var, Content::RigidAbleVar(a, abilities[0]));
// TODO(multi-abilities): check run cache
let abilities_slice =
SubsSlice::extend_new(&mut subs.symbol_names, abilities.sorted_iter().copied());
subs.set_content(var, Content::RigidAbleVar(a, abilities_slice));
}
// TODO(multi-abilities)
Content::RigidAbleVar(_, ab) if ab == abilities[0] => {
Content::RigidAbleVar(_, abs)
if (subs.get_subs_slice(abs).iter()).eq(abilities.sorted_iter()) =>
{
// pass, already bound
}
_ => {
// TODO(multi-abilities)
let abilities_slice =
SubsSlice::extend_new(&mut subs.symbol_names, abilities.sorted_iter().copied());
let flex_ability = subs.fresh(Descriptor {
content: Content::FlexAbleVar(None, abilities[0]),
content: Content::FlexAbleVar(None, abilities_slice),
rank,
mark: Mark::NONE,
copy: OptVariable::NONE,