@@ -2030,9 +2030,6 @@ namespace {
2030
2030
NeverNullType resolveImplicitlyUnwrappedOptionalType (
2031
2031
ImplicitlyUnwrappedOptionalTypeRepr *repr,
2032
2032
TypeResolutionOptions options, bool isDirect);
2033
- std::pair<Type, Type>
2034
- maybeResolvePackExpansionType (PackExpansionTypeRepr *repr,
2035
- TypeResolutionOptions options);
2036
2033
NeverNullType resolveVarargType (VarargTypeRepr *repr,
2037
2034
TypeResolutionOptions options);
2038
2035
NeverNullType resolvePackType (PackTypeRepr *repr,
@@ -4181,25 +4178,6 @@ NeverNullType TypeResolver::resolveImplicitlyUnwrappedOptionalType(
4181
4178
return uncheckedOptionalTy;
4182
4179
}
4183
4180
4184
- std::pair<Type, Type>
4185
- TypeResolver::maybeResolvePackExpansionType (PackExpansionTypeRepr *repr,
4186
- TypeResolutionOptions options) {
4187
- auto elementOptions = options;
4188
- elementOptions |= TypeResolutionFlags::AllowPackReferences;
4189
- auto patternTy = resolveType (repr->getPatternType (), elementOptions);
4190
- if (patternTy->hasError ())
4191
- return std::make_pair (ErrorType::get (getASTContext ()), Type ());
4192
-
4193
- // Find the first type parameter pack and use that as the count type.
4194
- SmallVector<Type, 1 > rootParameterPacks;
4195
- patternTy->getTypeParameterPacks (rootParameterPacks);
4196
-
4197
- if (rootParameterPacks.empty ())
4198
- return std::make_pair (patternTy, Type ());
4199
-
4200
- return std::make_pair (patternTy, rootParameterPacks[0 ]);
4201
- }
4202
-
4203
4181
NeverNullType TypeResolver::resolveVarargType (VarargTypeRepr *repr,
4204
4182
TypeResolutionOptions options) {
4205
4183
auto element = resolveType (repr->getElementType (), options);
@@ -4244,32 +4222,34 @@ NeverNullType TypeResolver::resolvePackExpansionType(PackExpansionTypeRepr *repr
4244
4222
TypeResolutionOptions options) {
4245
4223
auto &ctx = getASTContext ();
4246
4224
4247
- auto pair = maybeResolvePackExpansionType (repr, options);
4248
-
4249
- if (pair.first ->hasError ())
4225
+ auto elementOptions = options;
4226
+ elementOptions |= TypeResolutionFlags::AllowPackReferences;
4227
+ auto patternType = resolveType (repr->getPatternType (), elementOptions);
4228
+ if (patternType->hasError ())
4250
4229
return ErrorType::get (ctx);
4251
4230
4252
- // We might not allow variadic expansions here at all.
4253
- if (!options.isPackExpansionSupported (getDeclContext ())) {
4254
- diagnose (repr->getLoc (), diag::expansion_not_allowed, pair.first );
4255
- return ErrorType::get (ctx);
4256
- }
4231
+ // Find the first type parameter pack and use that as the count type.
4232
+ SmallVector<Type, 2 > rootParameterPacks;
4233
+ patternType->getTypeParameterPacks (rootParameterPacks);
4257
4234
4258
- if (!pair. second ) {
4235
+ if (rootParameterPacks. empty () ) {
4259
4236
// The pattern type must contain at least one pack reference.
4260
- diagnose (repr->getLoc (), diag::expansion_not_variadic, pair. first )
4237
+ diagnose (repr->getLoc (), diag::expansion_not_variadic, patternType )
4261
4238
.highlight (repr->getSourceRange ());
4262
4239
return ErrorType::get (ctx);
4263
4240
}
4264
4241
4242
+ // We might not allow variadic expansions here at all.
4243
+ if (!options.isPackExpansionSupported (getDeclContext ())) {
4244
+ diagnose (repr->getLoc (), diag::expansion_not_allowed, patternType);
4245
+ return ErrorType::get (ctx);
4246
+ }
4247
+
4265
4248
if (resolution.getStage () == TypeResolutionStage::Interface) {
4266
4249
auto genericSig = resolution.getGenericSignature ();
4267
- auto shapeType = genericSig->getReducedShape (pair.second );
4268
-
4269
- auto result = PackExpansionType::get (pair.first , shapeType);
4250
+ auto shapeType = genericSig->getReducedShape (rootParameterPacks[0 ]);
4251
+ auto result = PackExpansionType::get (patternType, shapeType);
4270
4252
4271
- SmallVector<Type, 2 > rootParameterPacks;
4272
- pair.first ->getTypeParameterPacks (rootParameterPacks);
4273
4253
for (auto type : rootParameterPacks) {
4274
4254
if (!genericSig->haveSameShape (type, shapeType)) {
4275
4255
ctx.Diags .diagnose (repr->getLoc (), diag::expansion_not_same_shape,
@@ -4279,7 +4259,7 @@ NeverNullType TypeResolver::resolvePackExpansionType(PackExpansionTypeRepr *repr
4279
4259
return result;
4280
4260
}
4281
4261
4282
- return PackExpansionType::get (pair. first , pair. second );
4262
+ return PackExpansionType::get (patternType, rootParameterPacks[ 0 ] );
4283
4263
}
4284
4264
4285
4265
NeverNullType TypeResolver::resolvePackReference (PackReferenceTypeRepr *repr,
0 commit comments