@@ -804,7 +804,7 @@ class PrintAST : public ASTVisitor<PrintAST> {
804
804
805
805
void printType (Type T) { printTypeWithOptions (T, Options); }
806
806
807
- void printTransformedTypeWithOptions (Type T, PrintOptions options ) {
807
+ Type getTransformedType (Type T) {
808
808
if (CurrentType && Current && CurrentType->mayHaveMembers ()) {
809
809
auto *M = Current->getDeclContext ()->getParentModule ();
810
810
SubstitutionMap subMap;
@@ -825,9 +825,16 @@ class PrintAST : public ASTVisitor<PrintAST> {
825
825
}
826
826
827
827
T = T.subst (subMap, SubstFlags::DesugarMemberTypes);
828
+ }
829
+
830
+ return T;
831
+ }
828
832
833
+ void printTransformedTypeWithOptions (Type T, PrintOptions options) {
834
+ T = getTransformedType (T);
835
+
836
+ if (CurrentType && Current && CurrentType->mayHaveMembers ())
829
837
options.TransformContext = TypeTransformContext (CurrentType);
830
- }
831
838
832
839
printTypeWithOptions (T, options);
833
840
}
@@ -1833,6 +1840,11 @@ void PrintAST::printSingleDepthOfGenericSignature(
1833
1840
}
1834
1841
1835
1842
void PrintAST::printRequirement (const Requirement &req) {
1843
+ SmallVector<Type, 2 > rootParameterPacks;
1844
+ getTransformedType (req.getFirstType ())
1845
+ ->getTypeParameterPacks (rootParameterPacks);
1846
+ bool isPackRequirement = !rootParameterPacks.empty ();
1847
+
1836
1848
switch (req.getKind ()) {
1837
1849
case RequirementKind::SameShape:
1838
1850
Printer << " (repeat (" ;
@@ -1842,22 +1854,21 @@ void PrintAST::printRequirement(const Requirement &req) {
1842
1854
Printer << " )) : Any" ;
1843
1855
return ;
1844
1856
case RequirementKind::Layout:
1845
- if (req. getFirstType ()-> hasParameterPack () )
1857
+ if (isPackRequirement )
1846
1858
Printer << " repeat " ;
1847
1859
printTransformedType (req.getFirstType ());
1848
1860
Printer << " : " ;
1849
1861
req.getLayoutConstraint ()->print (Printer, Options);
1850
1862
return ;
1851
1863
case RequirementKind::Conformance:
1852
1864
case RequirementKind::Superclass:
1853
- if (req. getFirstType ()-> hasParameterPack () )
1865
+ if (isPackRequirement )
1854
1866
Printer << " repeat " ;
1855
1867
printTransformedType (req.getFirstType ());
1856
1868
Printer << " : " ;
1857
1869
break ;
1858
1870
case RequirementKind::SameType:
1859
- if (req.getFirstType ()->hasParameterPack () ||
1860
- req.getSecondType ()->hasParameterPack ())
1871
+ if (isPackRequirement)
1861
1872
Printer << " repeat " ;
1862
1873
printTransformedType (req.getFirstType ());
1863
1874
Printer << " == " ;
0 commit comments