Skip to content

Commit 0d0c132

Browse files
committed
[Sema] NFC: Add accessors to check whether locator is type or conditional requirement
1 parent 6fd1600 commit 0d0c132

File tree

3 files changed

+20
-12
lines changed

3 files changed

+20
-12
lines changed

lib/Sema/CSDiagnostics.h

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -186,11 +186,11 @@ class RequirementFailure : public FailureDiagnostic {
186186
assert(!path.empty());
187187

188188
auto &last = path.back();
189-
assert(last.getKind() == ConstraintLocator::TypeParameterRequirement ||
190-
last.getKind() == ConstraintLocator::ConditionalRequirement);
189+
assert(last.isTypeParameterRequirement() ||
190+
last.isConditionalRequirement());
191191
assert(static_cast<RequirementKind>(last.getValue2()) == kind);
192192

193-
IsConditional = last.getKind() == ConstraintLocator::ConditionalRequirement;
193+
IsConditional = last.isConditionalRequirement();
194194

195195
// It's possible sometimes not to have no base expression.
196196
if (!expr)
@@ -205,10 +205,8 @@ class RequirementFailure : public FailureDiagnostic {
205205
assert(!path.empty());
206206

207207
auto &requirementLoc = path.back();
208-
assert(requirementLoc.getKind() ==
209-
ConstraintLocator::TypeParameterRequirement ||
210-
requirementLoc.getKind() ==
211-
ConstraintLocator::ConditionalRequirement);
208+
assert(requirementLoc.isTypeParameterRequirement() ||
209+
requirementLoc.isConditionalRequirement());
212210
return requirementLoc.getValue();
213211
}
214212

lib/Sema/CSSimplify.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1615,7 +1615,7 @@ static ConstraintFix *fixRequirementFailure(ConstraintSystem &cs, Type type1,
16151615
auto req = path.back();
16161616

16171617
ConstraintLocator *reqLoc = nullptr;
1618-
if (req.getKind() == ConstraintLocator::ConditionalRequirement) {
1618+
if (req.isConditionalRequirement()) {
16191619
// If underlaying conformance requirement has been fixed as
16201620
// we there is no reason to fix up conditional requirements.
16211621
if (cs.hasFixFor(cs.getConstraintLocator(anchor, req)))
@@ -2777,11 +2777,13 @@ ConstraintSystem::SolutionKind ConstraintSystem::simplifyConformsToConstraint(
27772777
SmallVector<LocatorPathElt, 4> path;
27782778
auto *anchor = locator.getLocatorParts(path);
27792779

2780-
if (!path.empty() &&
2781-
(path.back().getKind() == ConstraintLocator::TypeParameterRequirement ||
2782-
path.back().getKind() == ConstraintLocator::ConditionalRequirement)) {
2780+
if (path.empty())
2781+
return SolutionKind::Error;
2782+
2783+
if (path.back().isTypeParameterRequirement() ||
2784+
path.back().isConditionalRequirement()) {
27832785
ConstraintLocator *reqLoc = nullptr;
2784-
if (path.back().getKind() == ConstraintLocator::ConditionalRequirement) {
2786+
if (path.back().isConditionalRequirement()) {
27852787
// Underlying conformance requirement is itself fixed,
27862788
// this wouldn't lead to right solution.
27872789
if (hasFixFor(getConstraintLocator(anchor, path.back())))

lib/Sema/ConstraintLocator.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,14 @@ class ConstraintLocator : public llvm::FoldingSetNode {
421421
unsigned getNewSummaryFlags() const {
422422
return getSummaryFlagsForPathElement(getKind());
423423
}
424+
425+
bool isTypeParameterRequirement() const {
426+
return getKind() == PathElementKind::TypeParameterRequirement;
427+
}
428+
429+
bool isConditionalRequirement() const {
430+
return getKind() == PathElementKind::ConditionalRequirement;
431+
}
424432
};
425433

426434
/// Return the summary flags for an entire path.

0 commit comments

Comments
 (0)