Correctly clone able vars across subs

This commit is contained in:
Ayaz Hafiz 2022-10-12 16:17:32 -05:00
parent 9c88534758
commit 46b741e9dd
No known key found for this signature in database
GPG key ID: 0E2A37416A25EF58
2 changed files with 43 additions and 16 deletions

View file

@ -821,11 +821,14 @@ fn deep_copy_type_vars<C: CopyEnv>(
let new_content = match content {
// The vars for which we want to do something interesting.
FlexVar(opt_name) => FlexVar(opt_name.map(|n| env.clone_name(n))),
FlexAbleVar(opt_name, ability) => {
FlexAbleVar(opt_name.map(|n| env.clone_name(n)), ability)
}
FlexAbleVar(opt_name, abilities) => FlexAbleVar(
opt_name.map(|n| env.clone_name(n)),
env.clone_lambda_names(abilities),
),
RigidVar(name) => RigidVar(env.clone_name(name)),
RigidAbleVar(name, ability) => RigidAbleVar(env.clone_name(name), ability),
RigidAbleVar(name, abilities) => {
RigidAbleVar(env.clone_name(name), env.clone_lambda_names(abilities))
}
// Everything else is a mechanical descent.
Structure(flat_type) => match flat_type {