Skip to content

Commit aa89925

Browse files
committed
[Demangling] Add decodeMangleProtocolConformance function.
This is to match the decodeMangledType function that already exists.
1 parent 3fcbce7 commit aa89925

File tree

1 file changed

+42
-36
lines changed

1 file changed

+42
-36
lines changed

include/swift/Demangling/TypeDecoder.h

Lines changed: 42 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -481,107 +481,107 @@ class TypeDecoder {
481481
return BuiltProtocolConformance();
482482

483483
return decodeMangledProtocolConformance(Node->getChild(0));
484-
484+
485485
case NodeKind::ConcreteProtocolConformance: {
486486
if (Node->getNumChildren() < 3)
487487
return BuiltProtocolConformance();
488-
488+
489489
auto conformingType = decodeMangledType(Node->getChild(0));
490490
if (!conformingType)
491491
return BuiltProtocolConformance();
492-
492+
493493
auto conformanceDecl
494494
= decodeMangledProtocolConformanceDecl(conformingType,
495495
Node->getChild(1));
496-
496+
497497
if (!conformanceDecl)
498498
return BuiltProtocolConformance();
499-
499+
500500
std::vector<BuiltProtocolConformance> conformanceArgs;
501-
501+
502502
if (Node->getChild(2)->getKind() != NodeKind::AnyProtocolConformanceList)
503503
return BuiltProtocolConformance();
504-
504+
505505
for (auto mangledArg : *Node->getChild(2)) {
506506
auto arg = decodeMangledProtocolConformance(mangledArg);
507507
if (!arg)
508508
return BuiltProtocolConformance();
509509
conformanceArgs.push_back(arg);
510510
}
511-
511+
512512
return Builder.createConcreteProtocolConformance(conformingType,
513513
conformanceDecl,
514514
conformanceArgs);
515515
}
516-
516+
517517
case NodeKind::DependentProtocolConformanceRoot: {
518518
if (Node->getNumChildren() < 3)
519519
return BuiltProtocolConformance();
520-
520+
521521
auto conformingType = decodeMangledType(Node->getChild(0));
522522
if (!conformingType)
523523
return BuiltProtocolConformance();
524-
524+
525525
auto conformingRequirement = decodeMangledProtocolType(Node->getChild(1));
526526
if (!conformingRequirement)
527527
return BuiltProtocolConformance();
528-
528+
529529
if (!Node->getChild(2)->hasIndex())
530530
return BuiltProtocolConformance();
531-
531+
532532
auto index = Node->getChild(2)->getIndex();
533-
533+
534534
return Builder.createDependentProtocolConformanceRoot(conformingType,
535535
conformingRequirement,
536536
index);
537537
}
538-
538+
539539
case NodeKind::DependentProtocolConformanceAssociated: {
540540
if (Node->getNumChildren() < 3)
541541
return BuiltProtocolConformance();
542542

543543
auto base = decodeMangledProtocolConformance(Node->getChild(0));
544544
if (!base)
545545
return BuiltProtocolConformance();
546-
546+
547547
if (Node->getChild(1)->getKind() != NodeKind::DependentAssociatedConformance)
548548
return BuiltProtocolConformance();
549549
if (Node->getChild(1)->getNumChildren() < 2)
550550
return BuiltProtocolConformance();
551-
551+
552552
auto conformingType = decodeMangledType(Node->getChild(1)->getChild(0));
553553
if (!conformingType)
554554
return BuiltProtocolConformance();
555555
auto conformingRequirement = decodeMangledProtocolType(Node->getChild(1)->getChild(1));
556556
if (!conformingRequirement)
557557
return BuiltProtocolConformance();
558-
558+
559559
if (!Node->getChild(2)->hasIndex())
560560
return BuiltProtocolConformance();
561-
561+
562562
auto index = Node->getChild(2)->getIndex();
563563

564564
return Builder.createDependentProtocolConformanceAssociated(base,
565565
conformingType,
566566
conformingRequirement,
567567
index);
568568
}
569-
569+
570570
case NodeKind::DependentProtocolConformanceInherited: {
571571
if (Node->getNumChildren() < 3)
572572
return BuiltProtocolConformance();
573573

574574
auto base = decodeMangledProtocolConformance(Node->getChild(0));
575575
if (!base)
576576
return BuiltProtocolConformance();
577-
577+
578578
auto superRequirement = decodeMangledProtocolType(Node->getChild(1));
579579
if (!superRequirement)
580580
return BuiltProtocolConformance();
581-
581+
582582
if (!Node->getChild(2)->hasIndex())
583583
return BuiltProtocolConformance();
584-
584+
585585
auto index = Node->getChild(2)->getIndex();
586586

587587
return Builder.createDependentProtocolConformanceInherited(base,
@@ -593,7 +593,7 @@ class TypeDecoder {
593593
return BuiltProtocolConformance();
594594
}
595595
}
596-
596+
597597
BuiltProtocolConformanceDecl decodeMangledProtocolConformanceDecl(BuiltType ConformingType,
598598
NodePointer Node) {
599599
if (!Node) return BuiltProtocolConformanceDecl();
@@ -603,53 +603,53 @@ class TypeDecoder {
603603
case NodeKind::ProtocolConformanceRefInTypeModule: {
604604
if (Node->getNumChildren() < 1)
605605
return BuiltProtocolConformanceDecl();
606-
606+
607607
auto protocolRequirement = decodeMangledProtocolType(Node->getChild(0));
608608
if (!protocolRequirement)
609609
return BuiltProtocolConformanceDecl();
610-
610+
611611
return Builder.createProtocolConformanceDeclInTypeModule(ConformingType,
612612
protocolRequirement);
613613
}
614-
614+
615615
case NodeKind::ProtocolConformanceRefInProtocolModule: {
616616
if (Node->getNumChildren() < 1)
617617
return BuiltProtocolConformanceDecl();
618-
618+
619619
auto protocolRequirement = decodeMangledProtocolType(Node->getChild(0));
620620
if (!protocolRequirement)
621621
return BuiltProtocolConformanceDecl();
622-
622+
623623
return Builder.createProtocolConformanceDeclInProtocolModule(ConformingType,
624624
protocolRequirement);
625625
}
626-
626+
627627
case NodeKind::ProtocolConformanceRefInOtherModule: {
628628
if (Node->getNumChildren() < 2)
629629
return BuiltProtocolConformanceDecl();
630-
630+
631631
auto protocolRequirement = decodeMangledProtocolType(Node->getChild(0));
632632
if (!protocolRequirement)
633633
return BuiltProtocolConformanceDecl();
634-
634+
635635
auto moduleName = Node->getChild(1)->getText();
636-
636+
637637
return Builder.createProtocolConformanceDeclRetroactive(ConformingType,
638638
protocolRequirement,
639639
moduleName);
640640
}
641-
641+
642642
/*
643643
case NodeKind::ProtocolConformanceSymbolicReference:
644644
return Builder.createSymbolicProtocolConformanceDecl(ConformingType,
645645
Node);
646646
*/
647-
647+
648648
default:
649649
return BuiltProtocolConformance();
650650
}
651651
}
652-
652+
653653
/// Given a demangle tree, attempt to turn it into a type.
654654
TypeLookupErrorOr<BuiltType> decodeMangledType(NodePointer Node) {
655655
return decodeMangledType(Node, 0);
@@ -1730,6 +1730,12 @@ decodeMangledType(BuilderType &Builder, NodePointer Node) {
17301730
return TypeDecoder<BuilderType>(Builder).decodeMangledType(Node);
17311731
}
17321732

1733+
template <typename BuilderType>
1734+
inline TypeLookupErrorOr<typename BuilderType::BuiltProtocolConformance>
1735+
decodeMangledProtocolConformance(BuilderType &Builder, NodePointer Node) {
1736+
return TypeDecoder<BuilderType>(Builder).decodeMangledProtocolConformance(Node);
1737+
}
1738+
17331739
SWIFT_END_INLINE_NAMESPACE
17341740
} // end namespace Demangle
17351741
} // end namespace swift

0 commit comments

Comments
 (0)