@@ -1788,36 +1788,50 @@ NodePointer Demangler::demangleImplFunctionType() {
17881788
17891789NodePointer Demangler::demangleMetatype () {
17901790 switch (nextChar ()) {
1791+ case ' a' :
1792+ return createWithPoppedType (Node::Kind::TypeMetadataAccessFunction);
1793+ case ' A' :
1794+ return createWithChild (Node::Kind::ReflectionMetadataAssocTypeDescriptor,
1795+ popProtocolConformance ());
1796+ case ' B' :
1797+ return createWithChild (Node::Kind::ReflectionMetadataBuiltinDescriptor,
1798+ popNode (Node::Kind::Type));
17911799 case ' c' :
17921800 return createWithChild (Node::Kind::ProtocolConformanceDescriptor,
17931801 popProtocolConformance ());
1802+ case ' C' : {
1803+ NodePointer Ty = popNode (Node::Kind::Type);
1804+ if (!Ty || !isAnyGeneric (Ty->getChild (0 )->getKind ()))
1805+ return nullptr ;
1806+ return createWithChild (Node::Kind::ReflectionMetadataSuperclassDescriptor,
1807+ Ty->getChild (0 ));
1808+ }
1809+ case ' D' :
1810+ return createWithPoppedType (Node::Kind::TypeMetadataDemanglingCache);
17941811 case ' f' :
17951812 return createWithPoppedType (Node::Kind::FullTypeMetadata);
1796- case ' P' :
1797- return createWithPoppedType (Node::Kind::GenericTypeMetadataPattern);
1798- case ' a' :
1799- return createWithPoppedType (Node::Kind::TypeMetadataAccessFunction);
1813+ case ' F' :
1814+ return createWithChild (Node::Kind::ReflectionMetadataFieldDescriptor,
1815+ popNode (Node::Kind::Type));
18001816 case ' g' :
18011817 return createWithChild (Node::Kind::OpaqueTypeDescriptorAccessor,
18021818 popNode ());
18031819 case ' h' :
18041820 return createWithChild (Node::Kind::OpaqueTypeDescriptorAccessorImpl,
18051821 popNode ());
1822+ case ' i' :
1823+ return createWithPoppedType (Node::Kind::TypeMetadataInstantiationFunction);
1824+ case ' I' :
1825+ return createWithPoppedType (Node::Kind::TypeMetadataInstantiationCache);
18061826 case ' j' :
18071827 return createWithChild (Node::Kind::OpaqueTypeDescriptorAccessorKey,
18081828 popNode ());
18091829 case ' k' :
18101830 return createWithChild (Node::Kind::OpaqueTypeDescriptorAccessorVar,
18111831 popNode ());
1812- case ' I' :
1813- return createWithPoppedType (Node::Kind::TypeMetadataInstantiationCache);
1814- case ' i' :
1815- return createWithPoppedType (Node::Kind::TypeMetadataInstantiationFunction);
1816- case ' r' :
1817- return createWithPoppedType (Node::Kind::TypeMetadataCompletionFunction);
18181832 case ' l' :
18191833 return createWithPoppedType (
1820- Node::Kind::TypeMetadataSingletonInitializationCache);
1834+ Node::Kind::TypeMetadataSingletonInitializationCache);
18211835 case ' L' :
18221836 return createWithPoppedType (Node::Kind::TypeMetadataLazyCache);
18231837 case ' m' :
@@ -1828,35 +1842,23 @@ NodePointer Demangler::demangleMetatype() {
18281842 return createWithPoppedType (Node::Kind::ClassMetadataBaseOffset);
18291843 case ' p' :
18301844 return createWithChild (Node::Kind::ProtocolDescriptor, popProtocol ());
1845+ case ' P' :
1846+ return createWithPoppedType (Node::Kind::GenericTypeMetadataPattern);
18311847 case ' Q' :
18321848 return createWithChild (Node::Kind::OpaqueTypeDescriptor, popNode ());
1849+ case ' r' :
1850+ return createWithPoppedType (Node::Kind::TypeMetadataCompletionFunction);
1851+ case ' s' :
1852+ return createWithPoppedType (Node::Kind::ObjCResilientClassStub);
18331853 case ' S' :
18341854 return createWithChild (Node::Kind::ProtocolSelfConformanceDescriptor,
18351855 popProtocol ());
1856+ case ' t' :
1857+ return createWithPoppedType (Node::Kind::FullObjCResilientClassStub);
18361858 case ' u' :
18371859 return createWithPoppedType (Node::Kind::MethodLookupFunction);
18381860 case ' U' :
18391861 return createWithPoppedType (Node::Kind::ObjCMetadataUpdateFunction);
1840- case ' s' :
1841- return createWithPoppedType (Node::Kind::ObjCResilientClassStub);
1842- case ' t' :
1843- return createWithPoppedType (Node::Kind::FullObjCResilientClassStub);
1844- case ' B' :
1845- return createWithChild (Node::Kind::ReflectionMetadataBuiltinDescriptor,
1846- popNode (Node::Kind::Type));
1847- case ' F' :
1848- return createWithChild (Node::Kind::ReflectionMetadataFieldDescriptor,
1849- popNode (Node::Kind::Type));
1850- case ' A' :
1851- return createWithChild (Node::Kind::ReflectionMetadataAssocTypeDescriptor,
1852- popProtocolConformance ());
1853- case ' C' : {
1854- NodePointer Ty = popNode (Node::Kind::Type);
1855- if (!Ty || !isAnyGeneric (Ty->getChild (0 )->getKind ()))
1856- return nullptr ;
1857- return createWithChild (Node::Kind::ReflectionMetadataSuperclassDescriptor,
1858- Ty->getChild (0 ));
1859- }
18601862 case ' V' :
18611863 return createWithChild (Node::Kind::PropertyDescriptor,
18621864 popNode (isEntity));
0 commit comments