Merge pull request #78301 from slavapestov/remove-one-way-constraints

Sema: Remove ConstraintKind::OneWayBindParam and ConstraintKind::OneWayEqual
This commit is contained in:
Slava Pestov
2025-01-05 10:38:14 -05:00
committed by GitHub
27 changed files with 191 additions and 1147 deletions

View File

@@ -2181,7 +2181,6 @@ ConstraintSystem::matchTupleTypes(TupleType *tuple1, TupleType *tuple2,
case ConstraintKind::ValueMember:
case ConstraintKind::ValueWitness:
case ConstraintKind::BridgingConversion:
case ConstraintKind::OneWayEqual:
case ConstraintKind::FallbackType:
case ConstraintKind::UnresolvedMemberChainBase:
case ConstraintKind::PropertyWrapper:
@@ -2543,7 +2542,6 @@ static bool matchFunctionRepresentations(FunctionType::ExtInfo einfo1,
case ConstraintKind::UnresolvedValueMember:
case ConstraintKind::ValueMember:
case ConstraintKind::ValueWitness:
case ConstraintKind::OneWayEqual:
case ConstraintKind::FallbackType:
case ConstraintKind::UnresolvedMemberChainBase:
case ConstraintKind::PropertyWrapper:
@@ -3187,7 +3185,6 @@ ConstraintSystem::matchFunctionTypes(FunctionType *func1, FunctionType *func2,
case ConstraintKind::ValueMember:
case ConstraintKind::ValueWitness:
case ConstraintKind::BridgingConversion:
case ConstraintKind::OneWayEqual:
case ConstraintKind::FallbackType:
case ConstraintKind::UnresolvedMemberChainBase:
case ConstraintKind::PropertyWrapper:
@@ -7127,7 +7124,6 @@ ConstraintSystem::matchTypes(Type type1, Type type2, ConstraintKind kind,
case ConstraintKind::UnresolvedValueMember:
case ConstraintKind::ValueMember:
case ConstraintKind::ValueWitness:
case ConstraintKind::OneWayEqual:
case ConstraintKind::FallbackType:
case ConstraintKind::UnresolvedMemberChainBase:
case ConstraintKind::PropertyWrapper:
@@ -11195,6 +11191,9 @@ ConstraintSystem::SolutionKind ConstraintSystem::simplifyMemberConstraint(
functionRefInfo, locator,
/*includeInaccessibleMembers*/ true);
if (result.OverallResult == MemberLookupResult::Unsolved)
return formUnsolved();
// If unwrapped type still couldn't find anything for a given name,
// let's fallback to a "not such member" fix.
if (result.ViableCandidates.empty() && result.UnviableCandidates.empty())
@@ -11560,38 +11559,6 @@ ConstraintSystem::simplifyPropertyWrapperConstraint(
return SolutionKind::Solved;
}
ConstraintSystem::SolutionKind
ConstraintSystem::simplifyOneWayConstraint(
ConstraintKind kind,
Type first, Type second, TypeMatchOptions flags,
ConstraintLocatorBuilder locator) {
// Determine whether the second type can be fully simplified. Only then
// will this constraint be resolved.
Type secondSimplified = simplifyType(second);
if (secondSimplified->hasTypeVariable()) {
if (flags.contains(TMF_GenerateConstraints)) {
addUnsolvedConstraint(
Constraint::create(*this, kind, first, second,
getConstraintLocator(locator)));
return SolutionKind::Solved;
}
return SolutionKind::Unsolved;
}
// Propagate holes through one-way constraints.
if (secondSimplified->isPlaceholder()) {
recordAnyTypeVarAsPotentialHole(first);
return SolutionKind::Solved;
}
// Translate this constraint into an equality or bind-parameter constraint,
// as appropriate.
ASSERT(kind == ConstraintKind::OneWayEqual);
return matchTypes(first, secondSimplified, ConstraintKind::Equal, flags,
locator);
}
ConstraintSystem::SolutionKind
ConstraintSystem::simplifyUnresolvedMemberChainBaseConstraint(
Type first, Type second, TypeMatchOptions flags,
@@ -15717,9 +15684,6 @@ ConstraintSystem::addConstraintImpl(ConstraintKind kind, Type first,
case ConstraintKind::PropertyWrapper:
return simplifyPropertyWrapperConstraint(first, second, subflags, locator);
case ConstraintKind::OneWayEqual:
return simplifyOneWayConstraint(kind, first, second, subflags, locator);
case ConstraintKind::UnresolvedMemberChainBase:
return simplifyUnresolvedMemberChainBaseConstraint(first, second, subflags,
locator);
@@ -16297,12 +16261,6 @@ ConstraintSystem::simplifyConstraint(const Constraint &constraint) {
// See {Dis, Con}junctionStep class in CSStep.cpp for solving
return SolutionKind::Unsolved;
case ConstraintKind::OneWayEqual:
return simplifyOneWayConstraint(
constraint.getKind(), constraint.getFirstType(),
constraint.getSecondType(),
/*flags*/ std::nullopt, constraint.getLocator());
case ConstraintKind::UnresolvedMemberChainBase:
return simplifyUnresolvedMemberChainBaseConstraint(
constraint.getFirstType(), constraint.getSecondType(),