@@ -104,10 +104,6 @@ class TypeTransform {
104
104
case TypeKind::Id:
105
105
#define TYPE (Id, Parent )
106
106
#include " swift/AST/TypeNodes.def"
107
- case TypeKind::PrimaryArchetype:
108
- case TypeKind::OpenedArchetype:
109
- case TypeKind::PackArchetype:
110
- case TypeKind::ElementArchetype:
111
107
case TypeKind::Error:
112
108
case TypeKind::Unresolved:
113
109
case TypeKind::TypeVariable:
@@ -117,9 +113,41 @@ case TypeKind::Id:
117
113
case TypeKind::BuiltinTuple:
118
114
return t;
119
115
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
+
120
148
case TypeKind::GenericTypeParam: {
121
149
auto *param = cast<GenericTypeParamType>(base);
122
- return asDerived ().transformGenericTypeParam (param, pos);
150
+ return asDerived ().transformGenericTypeParamType (param, pos);
123
151
}
124
152
125
153
case TypeKind::Enum:
@@ -140,7 +168,7 @@ case TypeKind::Id:
140
168
141
169
return t;
142
170
}
143
-
171
+
144
172
case TypeKind::SILBlockStorage: {
145
173
auto storageTy = cast<SILBlockStorageType>(base);
146
174
Type transCap = doIt (storageTy->getCaptureType (),
@@ -176,7 +204,7 @@ case TypeKind::Id:
176
204
return t;
177
205
return SILBoxType::get (ctx, boxTy->getLayout (), newSubMap);
178
206
}
179
-
207
+
180
208
case TypeKind::SILFunction: {
181
209
auto fnTy = cast<SILFunctionType>(base);
182
210
@@ -338,20 +366,6 @@ case TypeKind::Id:
338
366
339
367
return BoundGenericType::get (bound->getDecl (), substParentTy, substArgs);
340
368
}
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
- }
355
369
356
370
case TypeKind::ExistentialMetatype: {
357
371
auto meta = cast<ExistentialMetatypeType>(base);
@@ -565,12 +579,12 @@ case TypeKind::Id:
565
579
566
580
case TypeKind::PackExpansion: {
567
581
auto *expand = cast<PackExpansionType>(base);
568
- return asDerived ().transformPackExpansion (expand, pos);
582
+ return asDerived ().transformPackExpansionType (expand, pos);
569
583
}
570
584
571
585
case TypeKind::PackElement: {
572
586
auto element = cast<PackElementType>(base);
573
- return asDerived ().transformPackElement (element, pos);
587
+ return asDerived ().transformPackElementType (element, pos);
574
588
}
575
589
576
590
case TypeKind::Tuple: {
@@ -636,7 +650,7 @@ case TypeKind::Id:
636
650
637
651
case TypeKind::DependentMember: {
638
652
auto dependent = cast<DependentMemberType>(base);
639
- return asDerived ().transformDependentMember (dependent, pos);
653
+ return asDerived ().transformDependentMemberType (dependent, pos);
640
654
}
641
655
642
656
case TypeKind::GenericFunction:
@@ -833,7 +847,7 @@ case TypeKind::Id:
833
847
auto objectTy = doIt (inout->getObjectType (), TypePosition::Invariant);
834
848
if (!objectTy || objectTy->hasError ())
835
849
return objectTy;
836
-
850
+
837
851
return objectTy.getPointer () == inout->getObjectType ().getPointer () ?
838
852
t : InOutType::get (objectTy);
839
853
}
@@ -866,10 +880,10 @@ case TypeKind::Id:
866
880
if (substMember.getPointer () != member.getPointer ())
867
881
anyChanged = true ;
868
882
}
869
-
883
+
870
884
if (!anyChanged)
871
885
return t;
872
-
886
+
873
887
return ProtocolCompositionType::get (ctx,
874
888
substMembers,
875
889
pc->getInverses (),
@@ -910,7 +924,7 @@ case TypeKind::Id:
910
924
substArgs);
911
925
}
912
926
}
913
-
927
+
914
928
llvm_unreachable (" Unhandled type in transformation" );
915
929
}
916
930
@@ -940,11 +954,11 @@ case TypeKind::Id:
940
954
LookUpConformanceInModule ());
941
955
}
942
956
943
- Type transformGenericTypeParam (GenericTypeParamType *param, TypePosition pos) {
957
+ Type transformGenericTypeParamType (GenericTypeParamType *param, TypePosition pos) {
944
958
return param;
945
959
}
946
960
947
- Type transformPackExpansion (PackExpansionType *expand, TypePosition pos) {
961
+ Type transformPackExpansionType (PackExpansionType *expand, TypePosition pos) {
948
962
// Substitution completely replaces this.
949
963
950
964
Type transformedPat = doIt (expand->getPatternType (), pos);
@@ -962,7 +976,7 @@ case TypeKind::Id:
962
976
return PackExpansionType::get (transformedPat, transformedCount);
963
977
}
964
978
965
- Type transformPackElement (PackElementType *element, TypePosition pos) {
979
+ Type transformPackElementType (PackElementType *element, TypePosition pos) {
966
980
Type transformedPack = doIt (element->getPackType (), pos);
967
981
if (!transformedPack)
968
982
return Type ();
@@ -973,7 +987,7 @@ case TypeKind::Id:
973
987
return PackElementType::get (transformedPack, element->getLevel ());
974
988
}
975
989
976
- Type transformDependentMember (DependentMemberType *dependent, TypePosition pos) {
990
+ Type transformDependentMemberType (DependentMemberType *dependent, TypePosition pos) {
977
991
auto dependentBase = doIt (dependent->getBase (), pos);
978
992
if (!dependentBase)
979
993
return Type ();
@@ -986,8 +1000,23 @@ case TypeKind::Id:
986
1000
987
1001
return DependentMemberType::get (dependentBase, dependent->getName ());
988
1002
}
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
+ }
989
1018
};
990
1019
991
1020
}
992
1021
993
- #endif
1022
+ #endif
0 commit comments