Skip to content

Commit 0085eb0

Browse files
committed
[RequirementMachine] Separate setting the explicit bit and the requirement
ID for a rewrite rule.
1 parent 4b55c30 commit 0085eb0

File tree

3 files changed

+13
-12
lines changed

3 files changed

+13
-12
lines changed

lib/AST/RequirementMachine/HomotopyReduction.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ void RewriteSystem::propagateExplicitBits() {
184184
for (unsigned ruleID : rulesInEmptyContext) {
185185
auto &rule = getRule(ruleID);
186186
if (!rule.isPermanent() && !rule.isExplicit())
187-
rule.markExplicit(None);
187+
rule.markExplicit();
188188
}
189189
}
190190
}
@@ -220,7 +220,7 @@ void RewriteSystem::propagateRedundantRequirementIDs() {
220220
replacement.dump(llvm::dbgs());
221221
}
222222

223-
replacement.markExplicit(requirementID);
223+
replacement.setRequirementID(requirementID);
224224
}
225225
}
226226
}

lib/AST/RequirementMachine/RewriteSystem.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -500,7 +500,8 @@ bool RewriteSystem::addExplicitRule(MutableTerm lhs, MutableTerm rhs,
500500
SmallVectorImpl<RequirementError> &errors) {
501501
bool added = addRule(std::move(lhs), std::move(rhs));
502502
if (added) {
503-
Rules.back().markExplicit(requirementID);
503+
Rules.back().markExplicit();
504+
Rules.back().setRequirementID(requirementID);
504505
} else if (requirementID.hasValue()) {
505506
auto req = WrittenRequirements[requirementID.getValue()];
506507
errors.push_back(
@@ -742,13 +743,11 @@ void RewriteSystem::computeRedundantRequirementDiagnostics(
742743
for (unsigned ruleID : indices(getRules())) {
743744
auto &rule = getRules()[ruleID];
744745

745-
if (!rule.isExplicit() && !rule.isPermanent() && !rule.isRedundant() &&
746+
if (!rule.getRequirementID().hasValue() &&
747+
!rule.isPermanent() && !rule.isRedundant() &&
746748
isInMinimizationDomain(rule.getLHS().getRootProtocol()))
747749
impliedRequirements.insert(ruleID);
748750

749-
if (!rule.isExplicit())
750-
continue;
751-
752751
auto requirementID = rule.getRequirementID();
753752
if (!requirementID.hasValue())
754753
continue;

lib/AST/RequirementMachine/RewriteSystem.h

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,11 @@ class Rule final {
107107
return requirementID;
108108
}
109109

110+
void setRequirementID(Optional<unsigned> requirementID) {
111+
assert(!getRequirementID().hasValue());
112+
this->requirementID = requirementID;
113+
}
114+
110115
Optional<Symbol> isPropertyRule() const;
111116

112117
const ProtocolDecl *isProtocolConformanceRule() const;
@@ -176,12 +181,9 @@ class Rule final {
176181
Permanent = true;
177182
}
178183

179-
void markExplicit(Optional<unsigned> requirementID) {
180-
assert((!Explicit || requirementID.hasValue()) &&
181-
"Rule is already explicit");
182-
assert(!Permanent &&
184+
void markExplicit() {
185+
assert(!Explicit && !Permanent &&
183186
"Permanent and explicit are mutually exclusive");
184-
this->requirementID = requirementID;
185187
Explicit = true;
186188
}
187189

0 commit comments

Comments
 (0)