treat each overload separately

This commit is contained in:
Douglas Creager 2025-12-04 09:47:59 -05:00
parent 54a4f2ec58
commit 3384392747
1 changed files with 34 additions and 38 deletions

View File

@ -1655,21 +1655,14 @@ impl<'db> SpecializationBuilder<'db> {
return Ok(()); return Ok(());
}; };
let mut when = ConstraintSet::from(false);
for formal_signature in &formal_callable.signatures(self.db).overloads { for formal_signature in &formal_callable.signatures(self.db).overloads {
for actual_callable in actual_callables.as_slice() { for actual_callable in actual_callables.as_slice() {
for actual_signature in &actual_callable.signatures(self.db).overloads { for actual_signature in &actual_callable.signatures(self.db).overloads {
when.union( let when = formal_signature.when_constraint_set_assignable_to(
self.db,
formal_signature.when_constraint_set_assignable_to(
self.db, self.db,
actual_signature, actual_signature,
self.inferable, self.inferable,
),
); );
}
}
}
when.for_each_path(self.db, |path| { when.for_each_path(self.db, |path| {
for constraint in path.positive_constraints() { for constraint in path.positive_constraints() {
@ -1702,6 +1695,9 @@ impl<'db> SpecializationBuilder<'db> {
} }
}); });
} }
}
}
}
// TODO: Add more forms that we can structurally induct into: type[C], callables // TODO: Add more forms that we can structurally induct into: type[C], callables
_ => {} _ => {}