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