@@ -399,6 +399,17 @@ static StringRef getDumpString(ForeignErrorConvention::IsOwned_t owned) {
399
399
400
400
llvm_unreachable (" Unhandled ForeignErrorConvention::IsOwned_t in switch." );
401
401
}
402
+ static StringRef getDumpString (RequirementKind kind) {
403
+ switch (kind) {
404
+ case RequirementKind::SameShape: return " same_shape" ;
405
+ case RequirementKind::Conformance: return " conforms_to" ;
406
+ case RequirementKind::Layout: return " has_layout" ;
407
+ case RequirementKind::Superclass: return " subclass_of" ;
408
+ case RequirementKind::SameType: return " same_type" ;
409
+ }
410
+
411
+ llvm_unreachable (" Unhandled RequirementKind in switch." );
412
+ }
402
413
static unsigned getDumpString (unsigned value) {
403
414
return value;
404
415
}
@@ -638,23 +649,51 @@ class PrintBase {
638
649
}, Label);
639
650
}
640
651
641
- void printRec (SubstitutionMap map) {
652
+ void printRec (SubstitutionMap map, StringRef label = " " ) {
642
653
SmallPtrSet<const ProtocolConformance *, 4 > Dumped;
643
- printRec (map, Dumped);
654
+ printRec (map, Dumped, label );
644
655
}
645
656
646
- void printRec (SubstitutionMap map, VisitedConformances &visited);
657
+ void printRec (const ProtocolConformanceRef &conf, StringRef label = " " ) {
658
+ SmallPtrSet<const ProtocolConformance *, 4 > Dumped;
659
+ printRec (conf, Dumped, label);
660
+ }
647
661
648
- void printRec (ProtocolConformanceRef conf, StringRef label = " " ) {
649
- printRecRaw ([&](StringRef label) {
650
- conf.dump (OS, Indent);
651
- }, label);
662
+ void printRec (SubstitutionMap map, VisitedConformances &visited,
663
+ StringRef label = " " );
664
+
665
+ void printRec (const ProtocolConformanceRef &conf,
666
+ VisitedConformances &visited, StringRef label = " " );
667
+
668
+ void printRec (const ProtocolConformance *conformance,
669
+ VisitedConformances &visited, StringRef label = " " );
670
+
671
+ void visitRequirement (const Requirement &requirement, StringRef label = " " ) {
672
+ printHead (" requirement" , ASTNodeColor, label);
673
+
674
+ PrintOptions opts;
675
+ opts.ProtocolQualifiedDependentMemberTypes = true ;
676
+
677
+ printFieldQuotedRaw ([&](raw_ostream &out) {
678
+ requirement.getFirstType ().print (out, opts);
679
+ }, " " );
680
+
681
+ printField (requirement.getKind (), " " );
682
+
683
+ if (requirement.getKind () != RequirementKind::Layout
684
+ && requirement.getSecondType ())
685
+ printFieldQuotedRaw ([&](raw_ostream &out) {
686
+ requirement.getSecondType ().print (out, opts);
687
+ }, " " );
688
+ else if (requirement.getLayoutConstraint ())
689
+ printFieldQuoted (requirement.getLayoutConstraint (), " " );
690
+
691
+ printFoot ();
652
692
}
653
693
654
694
void printRec (const Requirement &requirement, StringRef label = " " ) {
655
695
printRecRaw ([&](StringRef label) {
656
- OS.indent (Indent);
657
- requirement.dump (OS);
696
+ visitRequirement (requirement);
658
697
});
659
698
}
660
699
@@ -3352,49 +3391,34 @@ class PrintConformance : public PrintBase {
3352
3391
public:
3353
3392
using PrintBase::PrintBase;
3354
3393
3355
- using PrintBase::printRec;
3356
-
3357
- void printRec (const ProtocolConformanceRef &conf,
3358
- VisitedConformances &visited, StringRef label = " " ) {
3359
- printRecRaw ([&](StringRef label) {
3360
- visitProtocolConformanceRef (conf, visited);
3361
- }, label);
3362
- }
3363
-
3364
- void printRec (const ProtocolConformance *conformance,
3365
- VisitedConformances &visited, StringRef label = " " ) {
3366
- printRecRaw ([&](StringRef label) {
3367
- visitProtocolConformance (conformance, visited);
3368
- }, label);
3369
- }
3370
-
3371
3394
void visitProtocolConformanceRef (const ProtocolConformanceRef conformance,
3372
- VisitedConformances &visited) {
3395
+ VisitedConformances &visited,
3396
+ StringRef label) {
3373
3397
if (conformance.isInvalid ()) {
3374
- printHead (" invalid_conformance" , ASTNodeColor);
3398
+ printHead (" invalid_conformance" , ASTNodeColor, label );
3375
3399
printFoot ();
3376
3400
} else if (conformance.isConcrete ()) {
3377
- visitProtocolConformance (conformance.getConcrete (), visited);
3401
+ visitProtocolConformance (conformance.getConcrete (), visited, label );
3378
3402
} else if (conformance.isPack ()) {
3379
- visitPackConformance (conformance.getPack (), visited);
3403
+ visitPackConformance (conformance.getPack (), visited, label );
3380
3404
} else {
3381
3405
assert (conformance.isAbstract ());
3382
3406
3383
- printHead (" abstract_conformance" , ASTNodeColor);
3407
+ printHead (" abstract_conformance" , ASTNodeColor, label );
3384
3408
printFieldQuoted (conformance.getAbstract ()->getName (), " protocol" );
3385
3409
printFoot ();
3386
3410
}
3387
3411
}
3388
3412
3389
3413
void visitProtocolConformance (const ProtocolConformance *conformance,
3390
- VisitedConformances &visited) {
3414
+ VisitedConformances &visited, StringRef label ) {
3391
3415
// A recursive conformance shouldn't have its contents printed, or there's
3392
3416
// infinite recursion. (This also avoids printing things that occur multiple
3393
3417
// times in a conformance hierarchy.)
3394
3418
auto shouldPrintDetails = visited.insert (conformance).second ;
3395
3419
3396
3420
auto printCommon = [&](StringRef kind) {
3397
- printHead (kind, ASTNodeColor);
3421
+ printHead (kind, ASTNodeColor, label );
3398
3422
printFieldQuoted (conformance->getType (), " type" );
3399
3423
printFieldQuoted (conformance->getProtocol ()->getName (), " protocol" );
3400
3424
printFlag (!shouldPrintDetails, " <details printed above>" );
@@ -3504,8 +3528,8 @@ class PrintConformance : public PrintBase {
3504
3528
}
3505
3529
3506
3530
void visitPackConformance (const PackConformance *conformance,
3507
- VisitedConformances &visited) {
3508
- printHead (" pack_conformance" , ASTNodeColor);
3531
+ VisitedConformances &visited, StringRef label ) {
3532
+ printHead (" pack_conformance" , ASTNodeColor, label );
3509
3533
3510
3534
printFieldQuoted (Type (conformance->getType ()), " type" );
3511
3535
printFieldQuoted (conformance->getProtocol ()->getName (), " protocol" );
@@ -3519,15 +3543,15 @@ class PrintConformance : public PrintBase {
3519
3543
3520
3544
void visitSubstitutionMap (SubstitutionMap map,
3521
3545
SubstitutionMap::DumpStyle style,
3522
- VisitedConformances &visited) {
3546
+ VisitedConformances &visited, StringRef label ) {
3523
3547
// In Minimal style, use single quote so this dump can appear in
3524
3548
// double-quoted fields without escaping.
3525
3549
std::optional<llvm::SaveAndRestore<char >> restoreQuote;
3526
3550
if (style == SubstitutionMap::DumpStyle::Minimal)
3527
3551
restoreQuote.emplace (quote, ' \' ' );
3528
3552
3529
3553
auto genericSig = map.getGenericSignature ();
3530
- printHead (" substitution_map" , ASTNodeColor);
3554
+ printHead (" substitution_map" , ASTNodeColor, label );
3531
3555
SWIFT_DEFER { printFoot (); };
3532
3556
3533
3557
if (genericSig.isNull ()) {
@@ -3590,11 +3614,29 @@ class PrintConformance : public PrintBase {
3590
3614
}
3591
3615
};
3592
3616
3593
- void PrintBase::printRec (SubstitutionMap map, VisitedConformances &visited) {
3617
+ void PrintBase::printRec (SubstitutionMap map, VisitedConformances &visited,
3618
+ StringRef label) {
3594
3619
printRecRaw ([&](StringRef label) {
3595
3620
PrintConformance (OS, Indent)
3596
- .visitSubstitutionMap (map, SubstitutionMap::DumpStyle::Full, visited);
3597
- });
3621
+ .visitSubstitutionMap (map, SubstitutionMap::DumpStyle::Full, visited,
3622
+ label);
3623
+ }, label);
3624
+ }
3625
+
3626
+ void PrintBase::printRec (const ProtocolConformanceRef &ref,
3627
+ VisitedConformances &visited, StringRef label) {
3628
+ printRecRaw ([&](StringRef label) {
3629
+ PrintConformance (OS, Indent)
3630
+ .visitProtocolConformanceRef (ref, visited, label);
3631
+ }, label);
3632
+ }
3633
+
3634
+ void PrintBase::printRec (const ProtocolConformance *conformance,
3635
+ VisitedConformances &visited, StringRef label) {
3636
+ printRecRaw ([&](StringRef label) {
3637
+ PrintConformance (OS, Indent)
3638
+ .visitProtocolConformance (conformance, visited, label);
3639
+ }, label);
3598
3640
}
3599
3641
3600
3642
} // end anonymous namespace
@@ -3610,12 +3652,12 @@ void ProtocolConformanceRef::dump(llvm::raw_ostream &out, unsigned indent,
3610
3652
if (!details && isConcrete ())
3611
3653
visited.insert (getConcrete ());
3612
3654
3613
- PrintConformance (out, indent).visitProtocolConformanceRef (*this , visited);
3655
+ PrintConformance (out, indent).visitProtocolConformanceRef (*this , visited, " " );
3614
3656
}
3615
3657
3616
3658
void ProtocolConformanceRef::print (llvm::raw_ostream &out) const {
3617
3659
llvm::SmallPtrSet<const ProtocolConformance *, 8 > visited;
3618
- PrintConformance (out, 0 ).visitProtocolConformanceRef (*this , visited);
3660
+ PrintConformance (out, 0 ).visitProtocolConformanceRef (*this , visited, " " );
3619
3661
}
3620
3662
3621
3663
void ProtocolConformance::dump () const {
@@ -3626,18 +3668,18 @@ void ProtocolConformance::dump() const {
3626
3668
3627
3669
void ProtocolConformance::dump (llvm::raw_ostream &out, unsigned indent) const {
3628
3670
llvm::SmallPtrSet<const ProtocolConformance *, 8 > visited;
3629
- PrintConformance (out, indent).visitProtocolConformance (this , visited);
3671
+ PrintConformance (out, indent).visitProtocolConformance (this , visited, " " );
3630
3672
}
3631
3673
3632
3674
void PackConformance::dump (llvm::raw_ostream &out, unsigned indent) const {
3633
3675
llvm::SmallPtrSet<const ProtocolConformance *, 8 > visited;
3634
- PrintConformance (out, indent).visitPackConformance (this , visited);
3676
+ PrintConformance (out, indent).visitPackConformance (this , visited, " " );
3635
3677
}
3636
3678
3637
3679
void SubstitutionMap::dump (llvm::raw_ostream &out, DumpStyle style,
3638
3680
unsigned indent) const {
3639
3681
llvm::SmallPtrSet<const ProtocolConformance *, 8 > visited;
3640
- PrintConformance (out, indent).visitSubstitutionMap (*this , style, visited);
3682
+ PrintConformance (out, indent).visitSubstitutionMap (*this , style, visited, " " );
3641
3683
}
3642
3684
3643
3685
void SubstitutionMap::dump () const {
@@ -4348,34 +4390,7 @@ void Requirement::dump() const {
4348
4390
llvm::errs () << ' \n ' ;
4349
4391
}
4350
4392
void Requirement::dump (raw_ostream &out) const {
4351
- switch (getKind ()) {
4352
- case RequirementKind::SameShape:
4353
- out << " same_shape: " ;
4354
- break ;
4355
- case RequirementKind::Conformance:
4356
- out << " conforms_to: " ;
4357
- break ;
4358
- case RequirementKind::Layout:
4359
- out << " layout: " ;
4360
- break ;
4361
- case RequirementKind::Superclass:
4362
- out << " superclass: " ;
4363
- break ;
4364
- case RequirementKind::SameType:
4365
- out << " same_type: " ;
4366
- break ;
4367
- }
4368
-
4369
- PrintOptions opts;
4370
- opts.ProtocolQualifiedDependentMemberTypes = true ;
4371
-
4372
- getFirstType ().print (out, opts);
4373
- out << " " ;
4374
-
4375
- if (getKind () != RequirementKind::Layout && getSecondType ())
4376
- getSecondType ().print (out, opts);
4377
- else if (getLayoutConstraint ())
4378
- out << getLayoutConstraint ();
4393
+ PrintBase (out, 0 ).visitRequirement (*this );
4379
4394
}
4380
4395
4381
4396
void SILParameterInfo::dump () const {
0 commit comments