@@ -2030,9 +2030,6 @@ namespace {
20302030 NeverNullType resolveImplicitlyUnwrappedOptionalType (
20312031 ImplicitlyUnwrappedOptionalTypeRepr *repr,
20322032 TypeResolutionOptions options, bool isDirect);
2033- std::pair<Type, Type>
2034- maybeResolvePackExpansionType (PackExpansionTypeRepr *repr,
2035- TypeResolutionOptions options);
20362033 NeverNullType resolveVarargType (VarargTypeRepr *repr,
20372034 TypeResolutionOptions options);
20382035 NeverNullType resolvePackType (PackTypeRepr *repr,
@@ -4181,25 +4178,6 @@ NeverNullType TypeResolver::resolveImplicitlyUnwrappedOptionalType(
41814178 return uncheckedOptionalTy;
41824179}
41834180
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-
42034181NeverNullType TypeResolver::resolveVarargType (VarargTypeRepr *repr,
42044182 TypeResolutionOptions options) {
42054183 auto element = resolveType (repr->getElementType (), options);
@@ -4244,32 +4222,34 @@ NeverNullType TypeResolver::resolvePackExpansionType(PackExpansionTypeRepr *repr
42444222 TypeResolutionOptions options) {
42454223 auto &ctx = getASTContext ();
42464224
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 ())
42504229 return ErrorType::get (ctx);
42514230
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);
42574234
4258- if (!pair. second ) {
4235+ if (rootParameterPacks. empty () ) {
42594236 // 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 )
42614238 .highlight (repr->getSourceRange ());
42624239 return ErrorType::get (ctx);
42634240 }
42644241
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+
42654248 if (resolution.getStage () == TypeResolutionStage::Interface) {
42664249 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);
42704252
4271- SmallVector<Type, 2 > rootParameterPacks;
4272- pair.first ->getTypeParameterPacks (rootParameterPacks);
42734253 for (auto type : rootParameterPacks) {
42744254 if (!genericSig->haveSameShape (type, shapeType)) {
42754255 ctx.Diags .diagnose (repr->getLoc (), diag::expansion_not_same_shape,
@@ -4279,7 +4259,7 @@ NeverNullType TypeResolver::resolvePackExpansionType(PackExpansionTypeRepr *repr
42794259 return result;
42804260 }
42814261
4282- return PackExpansionType::get (pair. first , pair. second );
4262+ return PackExpansionType::get (patternType, rootParameterPacks[ 0 ] );
42834263}
42844264
42854265NeverNullType TypeResolver::resolvePackReference (PackReferenceTypeRepr *repr,
0 commit comments