Skip to content

Commit 5296fbd

Browse files
committed
[NFC][RequirementMachine] Stylistic changes for computing confict
diagnostics. Move computing requirements from rules into a static function, make a few variables const, etc.
1 parent f52593b commit 5296fbd

File tree

3 files changed

+32
-39
lines changed

3 files changed

+32
-39
lines changed

lib/AST/RequirementMachine/RewriteSystem.cpp

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -753,20 +753,44 @@ void RewriteSystem::freeze() {
753753
ConflictingRules.clear();
754754
}
755755

756+
static Optional<Requirement>
757+
getRequirementForDiagnostics(Type subject, Symbol property) {
758+
switch (property.getKind()) {
759+
case Symbol::Kind::ConcreteType:
760+
return Requirement(RequirementKind::SameType, subject,
761+
property.getConcreteType());
762+
763+
case Symbol::Kind::Superclass:
764+
return Requirement(RequirementKind::Superclass, subject,
765+
property.getConcreteType());
766+
767+
case Symbol::Kind::Protocol:
768+
return Requirement(RequirementKind::Conformance, subject,
769+
property.getProtocol()->getDeclaredInterfaceType());
770+
771+
case Symbol::Kind::Layout:
772+
return Requirement(RequirementKind::Layout, subject,
773+
property.getLayoutConstraint());
774+
775+
default:
776+
return None;
777+
}
778+
}
779+
756780
void RewriteSystem::computeConflictDiagnostics(
757781
SmallVectorImpl<RequirementError> &errors, SourceLoc signatureLoc,
758782
const PropertyMap &propertyMap,
759783
TypeArrayView<GenericTypeParamType> genericParams) {
760784
for (auto pair : ConflictingRules) {
761-
auto *firstRule = &getRule(pair.first);
762-
auto *secondRule = &getRule(pair.second);
785+
const auto &firstRule = getRule(pair.first);
786+
const auto &secondRule = getRule(pair.second);
763787

764-
auto firstProperty = firstRule->isPropertyRule();
765-
auto secondProperty = secondRule->isPropertyRule();
788+
auto firstProperty = firstRule.isPropertyRule();
789+
auto secondProperty = secondRule.isPropertyRule();
766790
assert(firstProperty && secondProperty);
767791

768-
auto firstTerm = firstRule->getRHS();
769-
auto secondTerm = secondRule->getRHS();
792+
auto firstTerm = firstRule.getRHS();
793+
auto secondTerm = secondRule.getRHS();
770794
auto subjectTerm =
771795
firstTerm.size() > secondTerm.size() ? firstTerm : secondTerm;
772796

@@ -777,8 +801,8 @@ void RewriteSystem::computeConflictDiagnostics(
777801

778802
Type subject = propertyMap.getTypeForTerm(subjectTerm, genericParams);
779803
errors.push_back(RequirementError::forConflictingRequirement(
780-
*firstRule->getPropertyRequirement(subject),
781-
*secondRule->getPropertyRequirement(subject),
804+
*getRequirementForDiagnostics(subject, *firstProperty),
805+
*getRequirementForDiagnostics(subject, *secondProperty),
782806
signatureLoc));
783807
}
784808
}

lib/AST/RequirementMachine/Rule.cpp

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -43,33 +43,6 @@ Optional<Symbol> Rule::isPropertyRule() const {
4343
return property;
4444
}
4545

46-
Optional<Requirement> Rule::getPropertyRequirement(Type subject) const {
47-
auto property = isPropertyRule();
48-
if (!property)
49-
return None;
50-
51-
switch (property->getKind()) {
52-
case Symbol::Kind::ConcreteType:
53-
return Requirement(RequirementKind::SameType, subject,
54-
property->getConcreteType());
55-
56-
case Symbol::Kind::Superclass:
57-
return Requirement(RequirementKind::Superclass, subject,
58-
property->getConcreteType());
59-
60-
case Symbol::Kind::Protocol:
61-
return Requirement(RequirementKind::Conformance, subject,
62-
property->getProtocol()->getDeclaredInterfaceType());
63-
64-
case Symbol::Kind::Layout:
65-
return Requirement(RequirementKind::Layout, subject,
66-
property->getLayoutConstraint());
67-
68-
default:
69-
return None;
70-
}
71-
}
72-
7346
/// If this is a rule of the form T.[P] => T where [P] is a protocol symbol,
7447
/// return the protocol P, otherwise return nullptr.
7548
const ProtocolDecl *Rule::isProtocolConformanceRule() const {

lib/AST/RequirementMachine/Rule.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@
1313
#ifndef SWIFT_RULE_H
1414
#define SWIFT_RULE_H
1515

16-
#include "swift/AST/Requirement.h"
17-
1816
#include "Symbol.h"
1917
#include "Term.h"
2018

@@ -109,8 +107,6 @@ class Rule final {
109107

110108
Optional<Symbol> isPropertyRule() const;
111109

112-
Optional<Requirement> getPropertyRequirement(Type subject) const;
113-
114110
const ProtocolDecl *isProtocolConformanceRule() const;
115111

116112
const ProtocolDecl *isAnyConformanceRule() const;

0 commit comments

Comments
 (0)