Skip to content

Commit afbe232

Browse files
committed
AST: Split up remaining cases of TypeSubstituter::transform()
Also rename and reformat a few things added recently.
1 parent cbe2c28 commit afbe232

File tree

2 files changed

+165
-66
lines changed

2 files changed

+165
-66
lines changed

include/swift/AST/TypeTransform.h

Lines changed: 62 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -104,10 +104,6 @@ class TypeTransform {
104104
case TypeKind::Id:
105105
#define TYPE(Id, Parent)
106106
#include "swift/AST/TypeNodes.def"
107-
case TypeKind::PrimaryArchetype:
108-
case TypeKind::OpenedArchetype:
109-
case TypeKind::PackArchetype:
110-
case TypeKind::ElementArchetype:
111107
case TypeKind::Error:
112108
case TypeKind::Unresolved:
113109
case TypeKind::TypeVariable:
@@ -117,9 +113,41 @@ case TypeKind::Id:
117113
case TypeKind::BuiltinTuple:
118114
return t;
119115

116+
case TypeKind::PrimaryArchetype:
117+
case TypeKind::PackArchetype: {
118+
auto *archetype = cast<ArchetypeType>(base);
119+
return asDerived().transformPrimaryArchetypeType(archetype, pos);
120+
}
121+
122+
case TypeKind::OpaqueTypeArchetype: {
123+
auto *opaque = cast<OpaqueTypeArchetypeType>(base);
124+
if (auto result = asDerived().transformOpaqueTypeArchetypeType(opaque, pos))
125+
return *result;
126+
127+
auto subMap = opaque->getSubstitutions();
128+
auto newSubMap = asDerived().transformSubMap(subMap);
129+
if (newSubMap == subMap)
130+
return t;
131+
if (!newSubMap)
132+
return Type();
133+
134+
return OpaqueTypeArchetypeType::get(opaque->getDecl(),
135+
opaque->getInterfaceType(),
136+
newSubMap);
137+
}
138+
139+
case TypeKind::OpenedArchetype:
140+
case TypeKind::ElementArchetype: {
141+
auto *local = cast<LocalArchetypeType>(base);
142+
if (auto result = asDerived().transformLocalArchetypeType(local, pos))
143+
return *result;
144+
145+
return local;
146+
}
147+
120148
case TypeKind::GenericTypeParam: {
121149
auto *param = cast<GenericTypeParamType>(base);
122-
return asDerived().transformGenericTypeParam(param, pos);
150+
return asDerived().transformGenericTypeParamType(param, pos);
123151
}
124152

125153
case TypeKind::Enum:
@@ -140,7 +168,7 @@ case TypeKind::Id:
140168

141169
return t;
142170
}
143-
171+
144172
case TypeKind::SILBlockStorage: {
145173
auto storageTy = cast<SILBlockStorageType>(base);
146174
Type transCap = doIt(storageTy->getCaptureType(),
@@ -176,7 +204,7 @@ case TypeKind::Id:
176204
return t;
177205
return SILBoxType::get(ctx, boxTy->getLayout(), newSubMap);
178206
}
179-
207+
180208
case TypeKind::SILFunction: {
181209
auto fnTy = cast<SILFunctionType>(base);
182210

@@ -338,20 +366,6 @@ case TypeKind::Id:
338366

339367
return BoundGenericType::get(bound->getDecl(), substParentTy, substArgs);
340368
}
341-
342-
case TypeKind::OpaqueTypeArchetype: {
343-
auto opaque = cast<OpaqueTypeArchetypeType>(base);
344-
auto subMap = opaque->getSubstitutions();
345-
auto newSubMap = asDerived().transformSubMap(subMap);
346-
if (newSubMap == subMap)
347-
return t;
348-
if (!newSubMap)
349-
return Type();
350-
351-
return OpaqueTypeArchetypeType::get(opaque->getDecl(),
352-
opaque->getInterfaceType(),
353-
newSubMap);
354-
}
355369

356370
case TypeKind::ExistentialMetatype: {
357371
auto meta = cast<ExistentialMetatypeType>(base);
@@ -565,12 +579,12 @@ case TypeKind::Id:
565579

566580
case TypeKind::PackExpansion: {
567581
auto *expand = cast<PackExpansionType>(base);
568-
return asDerived().transformPackExpansion(expand, pos);
582+
return asDerived().transformPackExpansionType(expand, pos);
569583
}
570584

571585
case TypeKind::PackElement: {
572586
auto element = cast<PackElementType>(base);
573-
return asDerived().transformPackElement(element, pos);
587+
return asDerived().transformPackElementType(element, pos);
574588
}
575589

576590
case TypeKind::Tuple: {
@@ -636,7 +650,7 @@ case TypeKind::Id:
636650

637651
case TypeKind::DependentMember: {
638652
auto dependent = cast<DependentMemberType>(base);
639-
return asDerived().transformDependentMember(dependent, pos);
653+
return asDerived().transformDependentMemberType(dependent, pos);
640654
}
641655

642656
case TypeKind::GenericFunction:
@@ -833,7 +847,7 @@ case TypeKind::Id:
833847
auto objectTy = doIt(inout->getObjectType(), TypePosition::Invariant);
834848
if (!objectTy || objectTy->hasError())
835849
return objectTy;
836-
850+
837851
return objectTy.getPointer() == inout->getObjectType().getPointer() ?
838852
t : InOutType::get(objectTy);
839853
}
@@ -866,10 +880,10 @@ case TypeKind::Id:
866880
if (substMember.getPointer() != member.getPointer())
867881
anyChanged = true;
868882
}
869-
883+
870884
if (!anyChanged)
871885
return t;
872-
886+
873887
return ProtocolCompositionType::get(ctx,
874888
substMembers,
875889
pc->getInverses(),
@@ -910,7 +924,7 @@ case TypeKind::Id:
910924
substArgs);
911925
}
912926
}
913-
927+
914928
llvm_unreachable("Unhandled type in transformation");
915929
}
916930

@@ -940,11 +954,11 @@ case TypeKind::Id:
940954
LookUpConformanceInModule());
941955
}
942956

943-
Type transformGenericTypeParam(GenericTypeParamType *param, TypePosition pos) {
957+
Type transformGenericTypeParamType(GenericTypeParamType *param, TypePosition pos) {
944958
return param;
945959
}
946960

947-
Type transformPackExpansion(PackExpansionType *expand, TypePosition pos) {
961+
Type transformPackExpansionType(PackExpansionType *expand, TypePosition pos) {
948962
// Substitution completely replaces this.
949963

950964
Type transformedPat = doIt(expand->getPatternType(), pos);
@@ -962,7 +976,7 @@ case TypeKind::Id:
962976
return PackExpansionType::get(transformedPat, transformedCount);
963977
}
964978

965-
Type transformPackElement(PackElementType *element, TypePosition pos) {
979+
Type transformPackElementType(PackElementType *element, TypePosition pos) {
966980
Type transformedPack = doIt(element->getPackType(), pos);
967981
if (!transformedPack)
968982
return Type();
@@ -973,7 +987,7 @@ case TypeKind::Id:
973987
return PackElementType::get(transformedPack, element->getLevel());
974988
}
975989

976-
Type transformDependentMember(DependentMemberType *dependent, TypePosition pos) {
990+
Type transformDependentMemberType(DependentMemberType *dependent, TypePosition pos) {
977991
auto dependentBase = doIt(dependent->getBase(), pos);
978992
if (!dependentBase)
979993
return Type();
@@ -986,8 +1000,23 @@ case TypeKind::Id:
9861000

9871001
return DependentMemberType::get(dependentBase, dependent->getName());
9881002
}
1003+
1004+
Type transformPrimaryArchetypeType(ArchetypeType *primary,
1005+
TypePosition pos) {
1006+
return primary;
1007+
}
1008+
1009+
std::optional<Type> transformOpaqueTypeArchetypeType(OpaqueTypeArchetypeType *opaque,
1010+
TypePosition pos) {
1011+
return std::nullopt;
1012+
}
1013+
1014+
std::optional<Type> transformLocalArchetypeType(LocalArchetypeType *opaque,
1015+
TypePosition pos) {
1016+
return std::nullopt;
1017+
}
9891018
};
9901019

9911020
}
9921021

993-
#endif
1022+
#endif

0 commit comments

Comments
 (0)