@@ -104,10 +104,6 @@ class TypeTransform {
104104case 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