@@ -1694,41 +1694,41 @@ void ConstraintSystem::partitionForDesignatedTypes(
1694
1694
if (designatedNominalTypes.empty ())
1695
1695
return ;
1696
1696
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);
1713
1701
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];
1729
1706
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);
1732
1732
1733
1733
// Now collect the overload choices that are defined within the type
1734
1734
// that was designated in the operator declaration.
0 commit comments