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