@@ -943,6 +943,7 @@ class PrintAST : public ASTVisitor<PrintAST> {
943
943
InnermostOnly = 4 ,
944
944
SwapSelfAndDependentMemberType = 8 ,
945
945
PrintInherited = 16 ,
946
+ PrintInverseRequirements = 32 ,
946
947
};
947
948
948
949
void printInheritedFromRequirementSignature (ProtocolDecl *proto,
@@ -1646,9 +1647,16 @@ void PrintAST::printGenericSignature(
1646
1647
GenericSignature genericSig,
1647
1648
unsigned flags,
1648
1649
llvm::function_ref<bool (const Requirement &)> filter) {
1650
+
1649
1651
SmallVector<Requirement, 2 > requirements;
1650
1652
SmallVector<InverseRequirement, 2 > inverses;
1651
- genericSig->getRequirementsWithInverses (requirements, inverses);
1653
+
1654
+ if (flags & PrintInverseRequirements) {
1655
+ genericSig->getRequirementsWithInverses (requirements, inverses);
1656
+ } else {
1657
+ requirements.append (genericSig.getRequirements ().begin (),
1658
+ genericSig.getRequirements ().end ());
1659
+ }
1652
1660
1653
1661
if (flags & InnermostOnly) {
1654
1662
auto genericParams = genericSig.getInnermostGenericParams ();
@@ -2627,7 +2635,7 @@ void PrintAST::printDeclGenericRequirements(GenericContext *decl) {
2627
2635
2628
2636
Printer.printStructurePre (PrintStructureKind::DeclGenericParameterClause);
2629
2637
printGenericSignature (genericSig,
2630
- PrintRequirements,
2638
+ PrintRequirements | PrintInverseRequirements ,
2631
2639
[parentSig](const Requirement &req) {
2632
2640
if (parentSig)
2633
2641
return !parentSig->isRequirementSatisfied (req);
@@ -2886,7 +2894,7 @@ void PrintAST::printExtension(ExtensionDecl *decl) {
2886
2894
assert (baseGenericSig &&
2887
2895
" an extension can't be generic if the base type isn't" );
2888
2896
printGenericSignature (genericSig,
2889
- PrintRequirements,
2897
+ PrintRequirements | PrintInverseRequirements ,
2890
2898
[baseGenericSig](const Requirement &req) -> bool {
2891
2899
// Only include constraints that are not satisfied by the base type.
2892
2900
return !baseGenericSig->isRequirementSatisfied (req);
@@ -7160,7 +7168,8 @@ class TypePrinter : public TypeVisitor<TypePrinter> {
7160
7168
printFunctionExtInfo (T);
7161
7169
printGenericSignature (T->getGenericSignature (),
7162
7170
PrintAST::PrintParams |
7163
- PrintAST::PrintRequirements);
7171
+ PrintAST::PrintRequirements |
7172
+ PrintAST::PrintInverseRequirements);
7164
7173
Printer << " " ;
7165
7174
7166
7175
visitAnyFunctionTypeParams (T->getParams (), /* printLabels*/ true );
@@ -7239,7 +7248,8 @@ class TypePrinter : public TypeVisitor<TypePrinter> {
7239
7248
if (GenericSignature sig = T->getInvocationGenericSignature ()) {
7240
7249
printGenericSignature (sig,
7241
7250
PrintAST::PrintParams |
7242
- PrintAST::PrintRequirements);
7251
+ PrintAST::PrintRequirements |
7252
+ PrintAST::PrintInverseRequirements);
7243
7253
Printer << " " ;
7244
7254
}
7245
7255
@@ -7264,7 +7274,8 @@ class TypePrinter : public TypeVisitor<TypePrinter> {
7264
7274
sub->Printer << " @substituted " ;
7265
7275
sub->printGenericSignature (sig,
7266
7276
PrintAST::PrintParams |
7267
- PrintAST::PrintRequirements);
7277
+ PrintAST::PrintRequirements |
7278
+ PrintAST::PrintInverseRequirements);
7268
7279
sub->Printer << " " ;
7269
7280
}
7270
7281
@@ -7375,7 +7386,9 @@ class TypePrinter : public TypeVisitor<TypePrinter> {
7375
7386
[&sub, T]{
7376
7387
if (auto sig = T->getLayout ()->getGenericSignature ()) {
7377
7388
sub.printGenericSignature (sig,
7378
- PrintAST::PrintParams | PrintAST::PrintRequirements);
7389
+ PrintAST::PrintParams |
7390
+ PrintAST::PrintRequirements |
7391
+ PrintAST::PrintInverseRequirements);
7379
7392
sub.Printer << " " ;
7380
7393
}
7381
7394
sub.Printer << " {" ;
@@ -7930,8 +7943,10 @@ void GenericSignature::print(ASTPrinter &Printer,
7930
7943
return ;
7931
7944
}
7932
7945
7933
- PrintAST (Printer, Opts).printGenericSignature (
7934
- *this , PrintAST::PrintParams | PrintAST::PrintRequirements);
7946
+ auto flags = PrintAST::PrintParams | PrintAST::PrintRequirements;
7947
+ if (Opts.PrintInverseRequirements )
7948
+ flags |= PrintAST::PrintInverseRequirements;
7949
+ PrintAST (Printer, Opts).printGenericSignature (*this , flags);
7935
7950
}
7936
7951
7937
7952
void Requirement::print (raw_ostream &os, const PrintOptions &opts) const {
@@ -8131,7 +8146,8 @@ void ProtocolConformance::printName(llvm::raw_ostream &os,
8131
8146
typePrinter
8132
8147
.printGenericSignature (genericSig,
8133
8148
PrintAST::PrintParams |
8134
- PrintAST::PrintRequirements);
8149
+ PrintAST::PrintRequirements |
8150
+ PrintAST::PrintInverseRequirements);
8135
8151
os << ' ' ;
8136
8152
}
8137
8153
}
0 commit comments