Skip to content

Commit f6710a5

Browse files
committed
[ConstraintSystem] Further refactoring of disjunction partitioning.
Unnest code by splitting it out into lambdas.
1 parent fc47edc commit f6710a5

File tree

1 file changed

+33
-33
lines changed

1 file changed

+33
-33
lines changed

lib/Sema/CSSolver.cpp

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1694,41 +1694,41 @@ void ConstraintSystem::partitionForDesignatedTypes(
16941694
if (designatedNominalTypes.empty())
16951695
return;
16961696

1697-
forEachChoice(
1698-
Choices, [&](unsigned constraintIndex, Constraint *constraint) -> bool {
1699-
auto *decl = constraint->getOverloadChoice().getDecl();
1700-
auto *funcDecl = cast<FuncDecl>(decl);
1701-
1702-
auto *parentDecl = funcDecl->getParent()->getAsDecl();
1703-
for (auto designatedTypeIndex : indices(designatedNominalTypes)) {
1704-
auto *designatedNominal =
1705-
designatedNominalTypes[designatedTypeIndex];
1706-
if (parentDecl == designatedNominal) {
1707-
if (designatedTypeIndex >= definedInDesignatedType.size())
1708-
definedInDesignatedType.resize(designatedTypeIndex + 1);
1709-
auto &constraints = definedInDesignatedType[designatedTypeIndex];
1710-
constraints.push_back(constraintIndex);
1711-
return true;
1712-
}
1697+
auto examineConstraint =
1698+
[&](unsigned constraintIndex, Constraint *constraint) -> bool {
1699+
auto *decl = constraint->getOverloadChoice().getDecl();
1700+
auto *funcDecl = cast<FuncDecl>(decl);
17131701

1714-
if (auto *extensionDecl = dyn_cast<ExtensionDecl>(parentDecl)) {
1715-
parentDecl = extensionDecl->getExtendedNominal();
1716-
if (parentDecl == designatedNominal) {
1717-
if (designatedTypeIndex >=
1718-
definedInExtensionOfDesignatedType.size())
1719-
definedInExtensionOfDesignatedType.resize(
1720-
designatedTypeIndex + 1);
1721-
1722-
auto &constraints =
1723-
definedInExtensionOfDesignatedType[designatedTypeIndex];
1724-
constraints.push_back(constraintIndex);
1725-
return true;
1726-
}
1727-
}
1728-
}
1702+
auto *parentDecl = funcDecl->getParent()->getAsDecl();
1703+
for (auto designatedTypeIndex : indices(designatedNominalTypes)) {
1704+
auto *designatedNominal =
1705+
designatedNominalTypes[designatedTypeIndex];
17291706

1730-
return false;
1731-
});
1707+
if (parentDecl == designatedNominal) {
1708+
auto &constraints = definedInDesignatedType[designatedTypeIndex];
1709+
constraints.push_back(constraintIndex);
1710+
return true;
1711+
}
1712+
1713+
auto *extensionDecl = dyn_cast<ExtensionDecl>(parentDecl);
1714+
if (!extensionDecl)
1715+
continue;
1716+
1717+
if (extensionDecl->getExtendedNominal() == designatedNominal) {
1718+
auto &constraints =
1719+
definedInExtensionOfDesignatedType[designatedTypeIndex];
1720+
constraints.push_back(constraintIndex);
1721+
return true;
1722+
}
1723+
}
1724+
1725+
return false;
1726+
};
1727+
1728+
definedInDesignatedType.resize(designatedNominalTypes.size());
1729+
definedInExtensionOfDesignatedType.resize(designatedNominalTypes.size());
1730+
1731+
forEachChoice(Choices, examineConstraint);
17321732

17331733
// Now collect the overload choices that are defined within the type
17341734
// that was designated in the operator declaration.

0 commit comments

Comments
 (0)