@@ -552,104 +552,70 @@ swift::Demangle::NodePointer TypeSystemSwiftTypeRef::Transform(
552
552
return fn (node);
553
553
}
554
554
555
+ // / Desugar a sugared type.
556
+ static swift::Demangle::NodePointer
557
+ Desugar (swift::Demangle::Demangler &dem, swift::Demangle::NodePointer node,
558
+ swift::Demangle::Node::Kind bound_kind,
559
+ swift::Demangle::Node::Kind kind, llvm::StringRef name) {
560
+ LLDB_SCOPED_TIMER ();
561
+
562
+ using namespace swift ::Demangle;
563
+ NodePointer desugared = dem.createNode (bound_kind);
564
+ NodePointer type = dem.createNode (Node::Kind::Type);
565
+ {
566
+ NodePointer concrete = dem.createNode (kind);
567
+ NodePointer swift =
568
+ dem.createNodeWithAllocatedText (Node::Kind::Module, swift::STDLIB_NAME);
569
+ concrete->addChild (swift, dem);
570
+ NodePointer ident =
571
+ dem.createNodeWithAllocatedText (Node::Kind::Identifier, name);
572
+ concrete->addChild (ident, dem);
573
+ type->addChild (concrete, dem);
574
+ }
575
+ NodePointer type_list = dem.createNode (Node::Kind::TypeList);
576
+
577
+ assert (node->getNumChildren () >= 1 && node->getNumChildren () <= 2 &&
578
+ " Sugared types should only have 1 or 2 children" );
579
+ for (NodePointer child : *node) {
580
+ NodePointer type = dem.createNode (Node::Kind::Type);
581
+ type->addChild (child, dem);
582
+ type_list->addChild (type, dem);
583
+ }
584
+ desugared->addChild (type, dem);
585
+ desugared->addChild (type_list, dem);
586
+ return desugared;
587
+ }
588
+
555
589
// / Iteratively resolve all type aliases in \p node by looking up their
556
590
// / desugared types in the debug info of module \p M.
557
591
static swift::Demangle::NodePointer GetCanonicalNode (
558
592
TypeSystemSwiftTypeRef *module_holder, SwiftASTContext *target_holder,
559
593
swift::Demangle::Demangler &dem, swift::Demangle::NodePointer node) {
560
594
using namespace swift ::Demangle;
561
595
return TypeSystemSwiftTypeRef::Transform (dem, node, [&](NodePointer node) {
562
- NodePointer canonical = nullptr ;
563
596
auto kind = node->getKind ();
564
597
switch (kind) {
565
598
case Node::Kind::SugaredOptional:
566
599
// FIXME: Factor these three cases out.
567
600
assert (node->getNumChildren () == 1 );
568
601
if (node->getNumChildren () != 1 )
569
602
return node;
570
-
571
- canonical = dem.createNode (Node::Kind::BoundGenericEnum);
572
- {
573
- NodePointer type = dem.createNode (Node::Kind::Type);
574
- NodePointer e = dem.createNode (Node::Kind::Enum);
575
- NodePointer module = dem.createNodeWithAllocatedText (
576
- Node::Kind::Module, swift::STDLIB_NAME);
577
- e->addChild (module , dem);
578
- NodePointer optional =
579
- dem.createNodeWithAllocatedText (Node::Kind::Identifier, " Optional" );
580
- e->addChild (optional, dem);
581
- type->addChild (e, dem);
582
- canonical->addChild (type, dem);
583
- }
584
- {
585
- NodePointer typelist = dem.createNode (Node::Kind::TypeList);
586
- NodePointer type = dem.createNode (Node::Kind::Type);
587
- type->addChild (node->getFirstChild (), dem);
588
- typelist->addChild (type, dem);
589
- canonical->addChild (typelist, dem);
590
- }
591
- return canonical;
603
+ return Desugar (dem, node, Node::Kind::BoundGenericEnum, Node::Kind::Enum,
604
+ " Optional" );
592
605
case Node::Kind::SugaredArray: {
593
606
assert (node->getNumChildren () == 1 );
594
607
if (node->getNumChildren () != 1 )
595
608
return node;
596
-
597
- canonical = dem.createNode (Node::Kind::BoundGenericStructure);
598
- {
599
- NodePointer type = dem.createNode (Node::Kind::Type);
600
- NodePointer structure = dem.createNode (Node::Kind::Structure);
601
- NodePointer module = dem.createNodeWithAllocatedText (
602
- Node::Kind::Module, swift::STDLIB_NAME);
603
- structure->addChild (module , dem);
604
- NodePointer array =
605
- dem.createNodeWithAllocatedText (Node::Kind::Identifier, " Array" );
606
- structure->addChild (array, dem);
607
- type->addChild (structure, dem);
608
- canonical->addChild (type, dem);
609
- }
610
- {
611
- NodePointer typelist = dem.createNode (Node::Kind::TypeList);
612
- NodePointer type = dem.createNode (Node::Kind::Type);
613
- type->addChild (node->getFirstChild (), dem);
614
- typelist->addChild (type, dem);
615
- canonical->addChild (typelist, dem);
616
- }
617
- return canonical;
609
+ return Desugar (dem, node, Node::Kind::BoundGenericStructure,
610
+ Node::Kind::Structure, " Array" );
618
611
}
619
612
case Node::Kind::SugaredDictionary:
620
613
// FIXME: This isnt covered by any test.
621
614
assert (node->getNumChildren () == 2 );
622
615
if (node->getNumChildren () != 2 )
623
616
return node;
624
-
625
- canonical = dem.createNode (Node::Kind::BoundGenericStructure);
626
- {
627
- NodePointer type = dem.createNode (Node::Kind::Type);
628
- NodePointer structure = dem.createNode (Node::Kind::Structure);
629
- NodePointer module = dem.createNodeWithAllocatedText (
630
- Node::Kind::Module, swift::STDLIB_NAME);
631
- structure->addChild (module , dem);
632
- NodePointer dict = dem.createNodeWithAllocatedText (
633
- Node::Kind::Identifier, " Dictionary" );
634
- structure->addChild (dict, dem);
635
- type->addChild (structure, dem);
636
- canonical->addChild (type, dem);
637
- }
638
- {
639
- NodePointer typelist = dem.createNode (Node::Kind::TypeList);
640
- {
641
- NodePointer type = dem.createNode (Node::Kind::Type);
642
- type->addChild (node->getChild (0 ), dem);
643
- typelist->addChild (type, dem);
644
- }
645
- {
646
- NodePointer type = dem.createNode (Node::Kind::Type);
647
- type->addChild (node->getChild (1 ), dem);
648
- typelist->addChild (type, dem);
649
- }
650
- canonical->addChild (typelist, dem);
651
- }
652
- return canonical;
617
+ return Desugar (dem, node, Node::Kind::BoundGenericStructure,
618
+ Node::Kind::Structure, " Dictionary" );
653
619
case Node::Kind::SugaredParen:
654
620
assert (node->getNumChildren () == 1 );
655
621
if (node->getNumChildren () != 1 )
@@ -739,40 +705,6 @@ clang::api_notes::APINotesManager *TypeSystemSwiftTypeRef::GetAPINotesManager(
739
705
return apinotes_manager.get ();
740
706
}
741
707
742
- // / Desugar a sugared type.
743
- static swift::Demangle::NodePointer
744
- Desugar (swift::Demangle::Demangler &dem, swift::Demangle::NodePointer node,
745
- swift::Demangle::Node::Kind bound_kind,
746
- swift::Demangle::Node::Kind kind, llvm::StringRef name) {
747
- LLDB_SCOPED_TIMER ();
748
-
749
- using namespace swift ::Demangle;
750
- NodePointer desugared = dem.createNode (bound_kind);
751
- NodePointer type = dem.createNode (Node::Kind::Type);
752
- {
753
- NodePointer concrete = dem.createNode (kind);
754
- NodePointer swift =
755
- dem.createNodeWithAllocatedText (Node::Kind::Module, swift::STDLIB_NAME);
756
- concrete->addChild (swift, dem);
757
- NodePointer ident =
758
- dem.createNodeWithAllocatedText (Node::Kind::Identifier, name);
759
- concrete->addChild (ident, dem);
760
- type->addChild (concrete, dem);
761
- }
762
- NodePointer type_list = dem.createNode (Node::Kind::TypeList);
763
-
764
- assert (node->getNumChildren () >= 1 && node->getNumChildren () <= 2 &&
765
- " Sugared types should only have 1 or 2 children" );
766
- for (NodePointer child : *node) {
767
- NodePointer type = dem.createNode (Node::Kind::Type);
768
- type->addChild (child, dem);
769
- type_list->addChild (type, dem);
770
- }
771
- desugared->addChild (type, dem);
772
- desugared->addChild (type_list, dem);
773
- return desugared;
774
- }
775
-
776
708
// / Helper for \p GetSwiftName.
777
709
template <typename ContextInfo>
778
710
std::string ExtractSwiftName (
0 commit comments