Drop a clone in occurs

This commit is contained in:
Richard Feldman 2021-07-30 23:34:22 -04:00
parent 30fbc12c9f
commit f22da2e5b2

View file

@ -653,7 +653,7 @@ fn occurs(
if seen.contains(&root_var) { if seen.contains(&root_var) {
Some((root_var, vec![])) Some((root_var, vec![]))
} else { } else {
match subs.get_content_without_compacting(root_var).clone() { match subs.get_content_without_compacting(root_var) {
FlexVar(_) | RigidVar(_) | RecursionVar { .. } | Error => None, FlexVar(_) | RigidVar(_) | RecursionVar { .. } | Error => None,
Structure(flat_type) => { Structure(flat_type) => {
@ -664,14 +664,14 @@ fn occurs(
match flat_type { match flat_type {
Apply(_, args) => short_circuit(subs, root_var, &new_seen, args.iter()), Apply(_, args) => short_circuit(subs, root_var, &new_seen, args.iter()),
Func(arg_vars, closure_var, ret_var) => { Func(arg_vars, closure_var, ret_var) => {
let it = once(&ret_var) let it = once(ret_var)
.chain(once(&closure_var)) .chain(once(closure_var))
.chain(arg_vars.iter()); .chain(arg_vars.into_iter());
short_circuit(subs, root_var, &new_seen, it) short_circuit(subs, root_var, &new_seen, it)
} }
Record(vars_by_field, ext_var) => { Record(vars_by_field, ext_var) => {
let it = let it =
once(&ext_var).chain(vars_by_field.values().map(|field| match field { once(ext_var).chain(vars_by_field.values().map(|field| match field {
RecordField::Optional(var) => var, RecordField::Optional(var) => var,
RecordField::Required(var) => var, RecordField::Required(var) => var,
RecordField::Demanded(var) => var, RecordField::Demanded(var) => var,
@ -679,16 +679,16 @@ fn occurs(
short_circuit(subs, root_var, &new_seen, it) short_circuit(subs, root_var, &new_seen, it)
} }
TagUnion(tags, ext_var) => { TagUnion(tags, ext_var) => {
let it = once(&ext_var).chain(tags.values().flatten()); let it = once(ext_var).chain(tags.values().flatten());
short_circuit(subs, root_var, &new_seen, it) short_circuit(subs, root_var, &new_seen, it)
} }
FunctionOrTagUnion(_, _, ext_var) => { FunctionOrTagUnion(_, _, ext_var) => {
let it = once(&ext_var); let it = once(ext_var);
short_circuit(subs, root_var, &new_seen, it) short_circuit(subs, root_var, &new_seen, it)
} }
RecursiveTagUnion(_rec_var, tags, ext_var) => { RecursiveTagUnion(_rec_var, tags, ext_var) => {
// TODO rec_var is excluded here, verify that this is correct // TODO rec_var is excluded here, verify that this is correct
let it = once(&ext_var).chain(tags.values().flatten()); let it = once(ext_var).chain(tags.values().flatten());
short_circuit(subs, root_var, &new_seen, it) short_circuit(subs, root_var, &new_seen, it)
} }
EmptyRecord | EmptyTagUnion | Erroneous(_) => None, EmptyRecord | EmptyTagUnion | Erroneous(_) => None,