@@ -583,8 +583,35 @@ class DemanglingForTypeRef
583
583
genericNode->addChild (unspecializedType, Dem);
584
584
genericNode->addChild (genericArgsList, Dem);
585
585
586
- if (auto parent = BG->getParent ())
587
- assert (false && " not implemented" );
586
+ auto parent = BG->getParent ();
587
+ if (!parent)
588
+ return genericNode;
589
+
590
+ auto parentNode = visit (parent);
591
+ if (!parentNode || !parentNode->hasChildren () ||
592
+ parentNode->getKind () != Node::Kind::Type ||
593
+ !unspecializedType->hasChildren ())
594
+ return genericNode;
595
+
596
+ // Peel off the "Type" node.
597
+ parentNode = parentNode->getFirstChild ();
598
+
599
+ auto nominalNode = unspecializedType->getFirstChild ();
600
+
601
+ if (nominalNode->getNumChildren () != 2 )
602
+ return genericNode;
603
+
604
+ // Save identifier for reinsertion later, we have to remove it
605
+ // so we can insert the parent node as the first child.
606
+ auto identifierNode = nominalNode->getLastChild ();
607
+
608
+ // Remove all children.
609
+ nominalNode->removeChildAt (1 );
610
+ nominalNode->removeChildAt (0 );
611
+
612
+ // Add the parent we just visited back in, followed by the identifier.
613
+ nominalNode->addChild (parentNode, Dem);
614
+ nominalNode->addChild (identifierNode, Dem);
588
615
589
616
return genericNode;
590
617
}
0 commit comments