Sema: Bring back BindingSet::operator bool but call it BindingSet::isViable()

This commit is contained in:
Slava Pestov
2025-11-17 11:13:46 -05:00
parent fb0e08408e
commit ce3b5eb8ae
3 changed files with 8 additions and 2 deletions

View File

@@ -482,6 +482,12 @@ public:
!Defaults.empty();
}
/// Determine whether this set can be chosen as the next binding set
/// to attempt.
bool isViable() const {
return hasViableBindings() || isDirectHole();
}
ArrayRef<Constraint *> getConformanceRequirements() const {
return Protocols;
}

View File

@@ -1170,7 +1170,7 @@ std::optional<BindingSet> ConstraintSystem::determineBestBindings(
// associated with given type variable, any default constraints,
// or any conformance requirements to literal protocols with can
// produce a default type.
bool isViable = bindings.hasViableBindings() || bindings.isDirectHole();
bool isViable = bindings.isViable();
bindings.inferTransitiveSupertypeBindings();
bindings.determineLiteralCoverage();

View File

@@ -922,7 +922,7 @@ bool ConstraintGraph::contractEdges() {
if (tyvar1->getImpl().canBindToInOut()) {
bool isNotContractable = true;
auto bindings = CS.getBindingsFor(tyvar1);
if (bindings.hasViableBindings() || bindings.isDirectHole()) {
if (bindings.isViable()) {
// Holes can't be contracted.
if (bindings.isHole())
continue;