@@ -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,
@@ -3158,20 +3155,7 @@ TypeResolver::resolveASTFunctionTypeParams(TupleTypeRepr *inputRepr,
3158
3155
// Do we have an old-style variadic parameter?
3159
3156
bool variadic = false ;
3160
3157
3161
- if (auto *packExpansionTypeRepr = dyn_cast<PackExpansionTypeRepr>(nestedRepr)) {
3162
- auto patternOptions = elementOptions;
3163
- patternOptions.setContext (TypeResolverContext::VariadicFunctionInput);
3164
-
3165
- auto pair = maybeResolvePackExpansionType (packExpansionTypeRepr,
3166
- patternOptions);
3167
- if (pair.first ->hasError ()) {
3168
- elements.emplace_back (ErrorType::get (getASTContext ()));
3169
- continue ;
3170
- }
3171
-
3172
- // We have a pack expansion type.
3173
- ty = PackExpansionType::get (pair.first , pair.second );
3174
- } else if (auto *varargTypeRepr = dyn_cast<VarargTypeRepr>(nestedRepr)) {
3158
+ if (auto *varargTypeRepr = dyn_cast<VarargTypeRepr>(nestedRepr)) {
3175
3159
if (ellipsisLoc) {
3176
3160
diagnose (varargTypeRepr->getLoc (),
3177
3161
diag::multiple_ellipsis_in_tuple)
@@ -4194,25 +4178,6 @@ NeverNullType TypeResolver::resolveImplicitlyUnwrappedOptionalType(
4194
4178
return uncheckedOptionalTy;
4195
4179
}
4196
4180
4197
- std::pair<Type, Type>
4198
- TypeResolver::maybeResolvePackExpansionType (PackExpansionTypeRepr *repr,
4199
- TypeResolutionOptions options) {
4200
- auto elementOptions = options;
4201
- elementOptions |= TypeResolutionFlags::AllowPackReferences;
4202
- auto patternTy = resolveType (repr->getPatternType (), elementOptions);
4203
- if (patternTy->hasError ())
4204
- return std::make_pair (ErrorType::get (getASTContext ()), Type ());
4205
-
4206
- // Find the first type parameter pack and use that as the count type.
4207
- SmallVector<Type, 1 > rootParameterPacks;
4208
- patternTy->getTypeParameterPacks (rootParameterPacks);
4209
-
4210
- if (rootParameterPacks.empty ())
4211
- return std::make_pair (patternTy, Type ());
4212
-
4213
- return std::make_pair (patternTy, rootParameterPacks[0 ]);
4214
- }
4215
-
4216
4181
NeverNullType TypeResolver::resolveVarargType (VarargTypeRepr *repr,
4217
4182
TypeResolutionOptions options) {
4218
4183
auto element = resolveType (repr->getElementType (), options);
@@ -4257,32 +4222,34 @@ NeverNullType TypeResolver::resolvePackExpansionType(PackExpansionTypeRepr *repr
4257
4222
TypeResolutionOptions options) {
4258
4223
auto &ctx = getASTContext ();
4259
4224
4260
- auto pair = maybeResolvePackExpansionType (repr, options);
4261
-
4262
- if (pair.first ->hasError ())
4225
+ auto elementOptions = options;
4226
+ elementOptions |= TypeResolutionFlags::AllowPackReferences;
4227
+ auto patternType = resolveType (repr->getPatternType (), elementOptions);
4228
+ if (patternType->hasError ())
4263
4229
return ErrorType::get (ctx);
4264
4230
4265
- // We might not allow variadic expansions here at all.
4266
- if (!options.isPackExpansionSupported (getDeclContext ())) {
4267
- diagnose (repr->getLoc (), diag::expansion_not_allowed, pair.first );
4268
- return ErrorType::get (ctx);
4269
- }
4231
+ // Find the first type parameter pack and use that as the count type.
4232
+ SmallVector<Type, 2 > rootParameterPacks;
4233
+ patternType->getTypeParameterPacks (rootParameterPacks);
4270
4234
4271
- if (!pair. second ) {
4235
+ if (rootParameterPacks. empty () ) {
4272
4236
// The pattern type must contain at least one pack reference.
4273
- diagnose (repr->getLoc (), diag::expansion_not_variadic, pair. first )
4237
+ diagnose (repr->getLoc (), diag::expansion_not_variadic, patternType )
4274
4238
.highlight (repr->getSourceRange ());
4275
4239
return ErrorType::get (ctx);
4276
4240
}
4277
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
+
4278
4248
if (resolution.getStage () == TypeResolutionStage::Interface) {
4279
4249
auto genericSig = resolution.getGenericSignature ();
4280
- auto shapeType = genericSig->getReducedShape (pair.second );
4281
-
4282
- auto result = PackExpansionType::get (pair.first , shapeType);
4250
+ auto shapeType = genericSig->getReducedShape (rootParameterPacks[0 ]);
4251
+ auto result = PackExpansionType::get (patternType, shapeType);
4283
4252
4284
- SmallVector<Type, 2 > rootParameterPacks;
4285
- pair.first ->getTypeParameterPacks (rootParameterPacks);
4286
4253
for (auto type : rootParameterPacks) {
4287
4254
if (!genericSig->haveSameShape (type, shapeType)) {
4288
4255
ctx.Diags .diagnose (repr->getLoc (), diag::expansion_not_same_shape,
@@ -4292,7 +4259,7 @@ NeverNullType TypeResolver::resolvePackExpansionType(PackExpansionTypeRepr *repr
4292
4259
return result;
4293
4260
}
4294
4261
4295
- return PackExpansionType::get (pair. first , pair. second );
4262
+ return PackExpansionType::get (patternType, rootParameterPacks[ 0 ] );
4296
4263
}
4297
4264
4298
4265
NeverNullType TypeResolver::resolvePackReference (PackReferenceTypeRepr *repr,
0 commit comments