@@ -583,8 +583,35 @@ class DemanglingForTypeRef
583583 genericNode->addChild (unspecializedType, Dem);
584584 genericNode->addChild (genericArgsList, Dem);
585585
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);
588615
589616 return genericNode;
590617 }
0 commit comments