@@ -492,6 +492,8 @@ class TypeSubstituter : public TypeTransform<TypeSubstituter> {
492
492
493
493
Type transformPackExpansion (PackExpansionType *expand, TypePosition pos);
494
494
495
+ Type transformPackElement (PackElementType *element, TypePosition pos);
496
+
495
497
SubstitutionMap transformSubstitutionMap (SubstitutionMap subs);
496
498
497
499
CanType transformSILField (CanType fieldTy, TypePosition pos);
@@ -508,14 +510,6 @@ TypeSubstituter::transform(TypeBase *type, TypePosition position) {
508
510
" should not be doing AST type-substitution on a lowered SIL type;"
509
511
" use SILType::subst" );
510
512
511
- auto oldLevel = level;
512
- SWIFT_DEFER { level = oldLevel; };
513
-
514
- if (auto elementTy = dyn_cast<PackElementType>(type)) {
515
- type = elementTy->getPackType ().getPointer ();
516
- level += elementTy->getLevel ();
517
- }
518
-
519
513
// We only substitute for substitutable types and dependent member types.
520
514
521
515
// For dependent member types, we may need to look up the member if the
@@ -592,6 +586,13 @@ Type TypeSubstituter::transformPackExpansion(PackExpansionType *expand,
592
586
return Type (PackType::get (expand->getASTContext (), eltTys));
593
587
}
594
588
589
+ Type TypeSubstituter::transformPackElement (PackElementType *element,
590
+ TypePosition pos) {
591
+ SWIFT_DEFER { level -= element->getLevel (); };
592
+ level += element->getLevel ();
593
+ return doIt (element->getPackType (), pos);
594
+ }
595
+
595
596
SubstitutionMap TypeSubstituter::transformSubstitutionMap (SubstitutionMap subs) {
596
597
// FIXME: Take level into account? Move level down into IFS?
597
598
return subs.subst (IFS);
0 commit comments