mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
Sema: Lazily build prepared overload when simplifying BindOverload constraint
This commit is contained in:
@@ -16648,7 +16648,7 @@ ConstraintSystem::simplifyConstraint(const Constraint &constraint) {
|
||||
constraint.getFirstType(), constraint.getSecondType(),
|
||||
constraint.getThirdType(), std::nullopt, constraint.getLocator());
|
||||
|
||||
case ConstraintKind::BindOverload:
|
||||
case ConstraintKind::BindOverload: {
|
||||
if (auto *fix = constraint.getFix()) {
|
||||
// TODO(diagnostics): Impact should be associated with a fix unless
|
||||
// it's a contextual problem, then only solver can decide what the impact
|
||||
@@ -16659,11 +16659,26 @@ ConstraintSystem::simplifyConstraint(const Constraint &constraint) {
|
||||
return SolutionKind::Error;
|
||||
}
|
||||
|
||||
// FIXME: Transitional hack.
|
||||
bool enablePreparedOverloads = false;
|
||||
|
||||
auto *preparedOverload = constraint.getPreparedOverload();
|
||||
if (!preparedOverload) {
|
||||
if (enablePreparedOverloads &&
|
||||
constraint.getOverloadChoice().canBePrepared()) {
|
||||
preparedOverload = prepareOverload(constraint.getLocator(),
|
||||
constraint.getOverloadChoice(),
|
||||
constraint.getDeclContext());
|
||||
const_cast<Constraint &>(constraint).setPreparedOverload(preparedOverload);
|
||||
}
|
||||
}
|
||||
|
||||
resolveOverload(constraint.getLocator(), constraint.getFirstType(),
|
||||
constraint.getOverloadChoice(),
|
||||
constraint.getDeclContext(),
|
||||
constraint.getPreparedOverload());
|
||||
preparedOverload);
|
||||
return SolutionKind::Solved;
|
||||
}
|
||||
|
||||
case ConstraintKind::SubclassOf:
|
||||
return simplifySubclassOfConstraint(constraint.getFirstType(),
|
||||
|
||||
Reference in New Issue
Block a user