@@ -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 (),
@@ -194,7 +222,7 @@ case TypeKind::Id:
194
222
newSubMap);
195
223
return boxTy;
196
224
}
197
-
225
+
198
226
case TypeKind::SILFunction: {
199
227
auto fnTy = cast<SILFunctionType>(base);
200
228
@@ -356,20 +384,6 @@ case TypeKind::Id:
356
384
357
385
return BoundGenericType::get (bound->getDecl (), substParentTy, substArgs);
358
386
}
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
- }
373
387
374
388
case TypeKind::ExistentialMetatype: {
375
389
auto meta = cast<ExistentialMetatypeType>(base);
@@ -591,12 +605,12 @@ case TypeKind::Id:
591
605
592
606
case TypeKind::PackExpansion: {
593
607
auto *expand = cast<PackExpansionType>(base);
594
- return asDerived ().transformPackExpansion (expand, pos);
608
+ return asDerived ().transformPackExpansionType (expand, pos);
595
609
}
596
610
597
611
case TypeKind::PackElement: {
598
612
auto element = cast<PackElementType>(base);
599
- return asDerived ().transformPackElement (element, pos);
613
+ return asDerived ().transformPackElementType (element, pos);
600
614
}
601
615
602
616
case TypeKind::Tuple: {
@@ -662,7 +676,7 @@ case TypeKind::Id:
662
676
663
677
case TypeKind::DependentMember: {
664
678
auto dependent = cast<DependentMemberType>(base);
665
- return asDerived ().transformDependentMember (dependent, pos);
679
+ return asDerived ().transformDependentMemberType (dependent, pos);
666
680
}
667
681
668
682
case TypeKind::GenericFunction:
@@ -859,7 +873,7 @@ case TypeKind::Id:
859
873
auto objectTy = doIt (inout->getObjectType (), TypePosition::Invariant);
860
874
if (!objectTy || objectTy->hasError ())
861
875
return objectTy;
862
-
876
+
863
877
return objectTy.getPointer () == inout->getObjectType ().getPointer () ?
864
878
t : InOutType::get (objectTy);
865
879
}
@@ -892,10 +906,10 @@ case TypeKind::Id:
892
906
if (substMember.getPointer () != member.getPointer ())
893
907
anyChanged = true ;
894
908
}
895
-
909
+
896
910
if (!anyChanged)
897
911
return t;
898
-
912
+
899
913
return ProtocolCompositionType::get (ctx,
900
914
substMembers,
901
915
pc->getInverses (),
@@ -936,7 +950,7 @@ case TypeKind::Id:
936
950
substArgs);
937
951
}
938
952
}
939
-
953
+
940
954
llvm_unreachable (" Unhandled type in transformation" );
941
955
}
942
956
@@ -970,11 +984,11 @@ case TypeKind::Id:
970
984
return doIt (fieldTy, pos)->getCanonicalType ();
971
985
}
972
986
973
- Type transformGenericTypeParam (GenericTypeParamType *param, TypePosition pos) {
987
+ Type transformGenericTypeParamType (GenericTypeParamType *param, TypePosition pos) {
974
988
return param;
975
989
}
976
990
977
- Type transformPackExpansion (PackExpansionType *expand, TypePosition pos) {
991
+ Type transformPackExpansionType (PackExpansionType *expand, TypePosition pos) {
978
992
// Substitution completely replaces this.
979
993
980
994
Type transformedPat = doIt (expand->getPatternType (), pos);
@@ -992,7 +1006,7 @@ case TypeKind::Id:
992
1006
return PackExpansionType::get (transformedPat, transformedCount);
993
1007
}
994
1008
995
- Type transformPackElement (PackElementType *element, TypePosition pos) {
1009
+ Type transformPackElementType (PackElementType *element, TypePosition pos) {
996
1010
Type transformedPack = doIt (element->getPackType (), pos);
997
1011
if (!transformedPack)
998
1012
return Type ();
@@ -1003,7 +1017,7 @@ case TypeKind::Id:
1003
1017
return PackElementType::get (transformedPack, element->getLevel ());
1004
1018
}
1005
1019
1006
- Type transformDependentMember (DependentMemberType *dependent, TypePosition pos) {
1020
+ Type transformDependentMemberType (DependentMemberType *dependent, TypePosition pos) {
1007
1021
auto dependentBase = doIt (dependent->getBase (), pos);
1008
1022
if (!dependentBase)
1009
1023
return Type ();
@@ -1016,6 +1030,21 @@ case TypeKind::Id:
1016
1030
1017
1031
return DependentMemberType::get (dependentBase, dependent->getName ());
1018
1032
}
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
+ }
1019
1048
};
1020
1049
1021
1050
}
0 commit comments