Skip to content

Commit 76ec490

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

File tree

2 files changed

+166
-72
lines changed

2 files changed

+166
-72
lines changed

include/swift/AST/TypeTransform.h

Lines changed: 61 additions & 32 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(),
@@ -194,7 +222,7 @@ case TypeKind::Id:
194222
newSubMap);
195223
return boxTy;
196224
}
197-
225+
198226
case TypeKind::SILFunction: {
199227
auto fnTy = cast<SILFunctionType>(base);
200228

@@ -356,20 +384,6 @@ case TypeKind::Id:
356384

357385
return BoundGenericType::get(bound->getDecl(), substParentTy, substArgs);
358386
}
359-
360-
case TypeKind::OpaqueTypeArchetype: {
361-
auto opaque = cast<OpaqueTypeArchetypeType>(base);
362-
auto subMap = opaque->getSubstitutions();
363-
auto newSubMap = asDerived().transformSubMap(subMap);
364-
if (newSubMap == subMap)
365-
return t;
366-
if (!newSubMap)
367-
return Type();
368-
369-
return OpaqueTypeArchetypeType::get(opaque->getDecl(),
370-
opaque->getInterfaceType(),
371-
newSubMap);
372-
}
373387

374388
case TypeKind::ExistentialMetatype: {
375389
auto meta = cast<ExistentialMetatypeType>(base);
@@ -591,12 +605,12 @@ case TypeKind::Id:
591605

592606
case TypeKind::PackExpansion: {
593607
auto *expand = cast<PackExpansionType>(base);
594-
return asDerived().transformPackExpansion(expand, pos);
608+
return asDerived().transformPackExpansionType(expand, pos);
595609
}
596610

597611
case TypeKind::PackElement: {
598612
auto element = cast<PackElementType>(base);
599-
return asDerived().transformPackElement(element, pos);
613+
return asDerived().transformPackElementType(element, pos);
600614
}
601615

602616
case TypeKind::Tuple: {
@@ -662,7 +676,7 @@ case TypeKind::Id:
662676

663677
case TypeKind::DependentMember: {
664678
auto dependent = cast<DependentMemberType>(base);
665-
return asDerived().transformDependentMember(dependent, pos);
679+
return asDerived().transformDependentMemberType(dependent, pos);
666680
}
667681

668682
case TypeKind::GenericFunction:
@@ -859,7 +873,7 @@ case TypeKind::Id:
859873
auto objectTy = doIt(inout->getObjectType(), TypePosition::Invariant);
860874
if (!objectTy || objectTy->hasError())
861875
return objectTy;
862-
876+
863877
return objectTy.getPointer() == inout->getObjectType().getPointer() ?
864878
t : InOutType::get(objectTy);
865879
}
@@ -892,10 +906,10 @@ case TypeKind::Id:
892906
if (substMember.getPointer() != member.getPointer())
893907
anyChanged = true;
894908
}
895-
909+
896910
if (!anyChanged)
897911
return t;
898-
912+
899913
return ProtocolCompositionType::get(ctx,
900914
substMembers,
901915
pc->getInverses(),
@@ -936,7 +950,7 @@ case TypeKind::Id:
936950
substArgs);
937951
}
938952
}
939-
953+
940954
llvm_unreachable("Unhandled type in transformation");
941955
}
942956

@@ -970,11 +984,11 @@ case TypeKind::Id:
970984
return doIt(fieldTy, pos)->getCanonicalType();
971985
}
972986

973-
Type transformGenericTypeParam(GenericTypeParamType *param, TypePosition pos) {
987+
Type transformGenericTypeParamType(GenericTypeParamType *param, TypePosition pos) {
974988
return param;
975989
}
976990

977-
Type transformPackExpansion(PackExpansionType *expand, TypePosition pos) {
991+
Type transformPackExpansionType(PackExpansionType *expand, TypePosition pos) {
978992
// Substitution completely replaces this.
979993

980994
Type transformedPat = doIt(expand->getPatternType(), pos);
@@ -992,7 +1006,7 @@ case TypeKind::Id:
9921006
return PackExpansionType::get(transformedPat, transformedCount);
9931007
}
9941008

995-
Type transformPackElement(PackElementType *element, TypePosition pos) {
1009+
Type transformPackElementType(PackElementType *element, TypePosition pos) {
9961010
Type transformedPack = doIt(element->getPackType(), pos);
9971011
if (!transformedPack)
9981012
return Type();
@@ -1003,7 +1017,7 @@ case TypeKind::Id:
10031017
return PackElementType::get(transformedPack, element->getLevel());
10041018
}
10051019

1006-
Type transformDependentMember(DependentMemberType *dependent, TypePosition pos) {
1020+
Type transformDependentMemberType(DependentMemberType *dependent, TypePosition pos) {
10071021
auto dependentBase = doIt(dependent->getBase(), pos);
10081022
if (!dependentBase)
10091023
return Type();
@@ -1016,6 +1030,21 @@ case TypeKind::Id:
10161030

10171031
return DependentMemberType::get(dependentBase, dependent->getName());
10181032
}
1033+
1034+
Type transformPrimaryArchetypeType(ArchetypeType *primary,
1035+
TypePosition pos) {
1036+
return primary;
1037+
}
1038+
1039+
std::optional<Type> transformOpaqueTypeArchetypeType(OpaqueTypeArchetypeType *opaque,
1040+
TypePosition pos) {
1041+
return std::nullopt;
1042+
}
1043+
1044+
std::optional<Type> transformLocalArchetypeType(LocalArchetypeType *opaque,
1045+
TypePosition pos) {
1046+
return std::nullopt;
1047+
}
10191048
};
10201049

10211050
}

0 commit comments

Comments
 (0)