Correctly instantiate recursion variables under nested aliases

Like we instantiate nested lambda set variables and nested OIOP
variables for aliases, we need to do the same for recursion variables.
This commit is contained in:
Ayaz Hafiz 2023-04-12 13:59:24 -05:00
parent f2e12724d3
commit f33651bf6a
No known key found for this signature in database
GPG key ID: 0E2A37416A25EF58
4 changed files with 251 additions and 344 deletions

View file

@ -2925,12 +2925,14 @@ fn correct_mutual_recursive_type_alias<'a>(
};
let mut new_lambda_sets = ImSet::default();
let mut new_recursion_variables = ImSet::default();
let mut new_infer_ext_vars = ImSet::default();
alias_type.instantiate_aliases(
alias_region,
&can_instantiate_symbol,
var_store,
&mut new_lambda_sets,
&mut new_recursion_variables,
&mut new_infer_ext_vars,
);
@ -2953,6 +2955,9 @@ fn correct_mutual_recursive_type_alias<'a>(
.map(|var| LambdaSet(Type::Variable(*var))),
);
// add any new recursion variables
alias.recursion_variables.extend(new_recursion_variables);
// add any new infer-in-output extension variables that the instantiation created to the current alias
alias
.infer_ext_in_output_variables