Skip to content

Commit 5d20f03

Browse files
committed
[TypeResolution] Fold maybeResolvePackExpansionType into resolvePackExpansionType.
1 parent 2eb96d0 commit 5d20f03

File tree

1 file changed

+18
-38
lines changed

1 file changed

+18
-38
lines changed

lib/Sema/TypeCheckType.cpp

Lines changed: 18 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -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-
42034181
NeverNullType 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

42854265
NeverNullType TypeResolver::resolvePackReference(PackReferenceTypeRepr *repr,

0 commit comments

Comments
 (0)