Skip to content

Commit 2ce0e14

Browse files
committed
Implement typeref to demangle tree conversion for nested bound generics
rdar://90218547
1 parent 1398760 commit 2ce0e14

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

stdlib/public/Reflection/TypeRef.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -609,6 +609,25 @@ class DemanglingForTypeRef
609609
nominalNode->addChild(parentNode, Dem);
610610
nominalNode->addChild(identifierNode, Dem);
611611

612+
// Peel off the "Type" node.
613+
parentNode = parentNode->getFirstChild();
614+
615+
auto nominalNode = unspecializedType->getFirstChild();
616+
617+
if (nominalNode->getNumChildren() != 2)
618+
return genericNode;
619+
620+
// Save identifier for reinsertion later, we have to remove it
621+
// so we can insert the parent node as the first child.
622+
auto identifierNode = nominalNode->getLastChild();
623+
624+
// Remove all children.
625+
nominalNode->removeChildAt(1);
626+
nominalNode->removeChildAt(0);
627+
628+
// Add the parent we just visited back in, followed by the identifier.
629+
nominalNode->addChild(parentNode, Dem);
630+
nominalNode->addChild(identifierNode, Dem);
612631
return genericNode;
613632
}
614633

0 commit comments

Comments
 (0)