@@ -1422,12 +1422,14 @@ namespace {
1422
1422
// Introduce type variables for unbound generics.
1423
1423
const auto genericOpener = OpenUnboundGenericType (CS, locator);
1424
1424
const auto placeholderHandler = HandlePlaceholderType (CS, locator);
1425
- OpenPackElementFn packElementOpener = nullptr ;
1425
+
1426
+ // Add a PackElementOf constraint for 'each T' type reprs.
1427
+ GenericEnvironment *elementEnv = nullptr ;
1426
1428
if (!PackElementEnvironments.empty ()) {
1427
1429
options |= TypeResolutionFlags::AllowPackReferences;
1428
- packElementOpener = OpenPackElementType (CS,
1429
- CS.getConstraintLocator (locator), PackElementEnvironments.back ());
1430
+ elementEnv = PackElementEnvironments.back ();
1430
1431
}
1432
+ const auto packElementOpener = OpenPackElementType (CS, locator, elementEnv);
1431
1433
1432
1434
const auto result = TypeResolution::resolveContextualType (
1433
1435
repr, CS.DC , options, genericOpener, placeholderHandler,
@@ -1673,17 +1675,17 @@ namespace {
1673
1675
auto options =
1674
1676
TypeResolutionOptions (TypeResolverContext::InExpression);
1675
1677
for (auto specializationArg : specializationArgs) {
1676
- OpenPackElementFn packElementOpener = nullptr ;
1678
+ GenericEnvironment *elementEnv = nullptr ;
1677
1679
if (!PackElementEnvironments.empty ()) {
1678
1680
options |= TypeResolutionFlags::AllowPackReferences;
1679
- packElementOpener = OpenPackElementType (CS, locator, PackElementEnvironments.back () );
1681
+ elementEnv = PackElementEnvironments.back ();
1680
1682
}
1681
1683
const auto result = TypeResolution::resolveContextualType (
1682
1684
specializationArg, CurDC, options,
1683
1685
// Introduce type variables for unbound generics.
1684
1686
OpenUnboundGenericType (CS, locator),
1685
1687
HandlePlaceholderType (CS, locator),
1686
- packElementOpener );
1688
+ OpenPackElementType (CS, locator, elementEnv) );
1687
1689
if (result->hasError ())
1688
1690
return true ;
1689
1691
@@ -1743,18 +1745,18 @@ namespace {
1743
1745
auto options =
1744
1746
TypeResolutionOptions (TypeResolverContext::InExpression);
1745
1747
for (size_t i = 0 , e = specializations.size (); i < e; ++i) {
1746
- OpenPackElementFn packElementOpener = nullptr ;
1748
+ GenericEnvironment *elementEnv = nullptr ;
1747
1749
if (!PackElementEnvironments.empty ()) {
1748
1750
options |= TypeResolutionFlags::AllowPackReferences;
1749
- packElementOpener = OpenPackElementType (CS, locator, PackElementEnvironments.back () );
1751
+ elementEnv = PackElementEnvironments.back ();
1750
1752
}
1751
1753
1752
1754
const auto result = TypeResolution::resolveContextualType (
1753
1755
specializations[i], CS.DC , options,
1754
1756
// Introduce type variables for unbound generics.
1755
1757
OpenUnboundGenericType (CS, locator),
1756
1758
HandlePlaceholderType (CS, locator),
1757
- packElementOpener );
1759
+ OpenPackElementType (CS, locator, elementEnv) );
1758
1760
if (result->hasError ())
1759
1761
return Type ();
1760
1762
0 commit comments