@@ -1002,8 +1002,6 @@ class Demangler {
1002
1002
return NodeFactory::create (Node::Kind::Module, MANGLING_MODULE_OBJC);
1003
1003
if (Mangled.nextIf (' C' ))
1004
1004
return NodeFactory::create (Node::Kind::Module, MANGLING_MODULE_C);
1005
- if (Mangled.nextIf (' s' ))
1006
- return NodeFactory::create (Node::Kind::Module, STDLIB_NAME);
1007
1005
if (Mangled.nextIf (' a' ))
1008
1006
return createSwiftType (Node::Kind::Structure, " Array" );
1009
1007
if (Mangled.nextIf (' b' ))
@@ -1016,10 +1014,18 @@ class Demangler {
1016
1014
return createSwiftType (Node::Kind::Structure, " Float" );
1017
1015
if (Mangled.nextIf (' i' ))
1018
1016
return createSwiftType (Node::Kind::Structure, " Int" );
1017
+ if (Mangled.nextIf (' P' ))
1018
+ return createSwiftType (Node::Kind::Structure, " UnsafePointer" );
1019
+ if (Mangled.nextIf (' p' ))
1020
+ return createSwiftType (Node::Kind::Structure, " UnsafeMutablePointer" );
1019
1021
if (Mangled.nextIf (' q' ))
1020
1022
return createSwiftType (Node::Kind::Enum, " Optional" );
1021
1023
if (Mangled.nextIf (' Q' ))
1022
1024
return createSwiftType (Node::Kind::Enum, " ImplicitlyUnwrappedOptional" );
1025
+ if (Mangled.nextIf (' R' ))
1026
+ return createSwiftType (Node::Kind::Structure, " UnsafeBufferPointer" );
1027
+ if (Mangled.nextIf (' r' ))
1028
+ return createSwiftType (Node::Kind::Structure, " UnsafeMutableBufferPointer" );
1023
1029
if (Mangled.nextIf (' S' ))
1024
1030
return createSwiftType (Node::Kind::Structure, " String" );
1025
1031
if (Mangled.nextIf (' u' ))
@@ -1033,6 +1039,9 @@ class Demangler {
1033
1039
}
1034
1040
1035
1041
NodePointer demangleModule () {
1042
+ if (Mangled.nextIf (' s' )) {
1043
+ return NodeFactory::create (Node::Kind::Module, STDLIB_NAME);
1044
+ }
1036
1045
if (Mangled.nextIf (' S' )) {
1037
1046
NodePointer module = demangleSubstitutionIndex ();
1038
1047
if (!module)
@@ -1095,6 +1104,19 @@ class Demangler {
1095
1104
return proto;
1096
1105
}
1097
1106
1107
+ if (Mangled.nextIf (' s' )) {
1108
+ NodePointer stdlib = NodeFactory::create (Node::Kind::Module, STDLIB_NAME);
1109
+
1110
+ NodePointer name = demangleDeclName ();
1111
+ if (!name) return nullptr ;
1112
+
1113
+ auto proto = NodeFactory::create (Node::Kind::Protocol);
1114
+ proto->addChild (std::move (stdlib));
1115
+ proto->addChild (std::move (name));
1116
+ Substitutions.push_back (proto);
1117
+ return proto;
1118
+ }
1119
+
1098
1120
return demangleDeclarationName (Node::Kind::Protocol);
1099
1121
}
1100
1122
@@ -1148,6 +1170,8 @@ class Demangler {
1148
1170
}
1149
1171
if (Mangled.nextIf (' S' ))
1150
1172
return demangleSubstitutionIndex ();
1173
+ if (Mangled.nextIf (' s' ))
1174
+ return NodeFactory::create (Node::Kind::Module, STDLIB_NAME);
1151
1175
if (isStartOfEntity (Mangled.peek ()))
1152
1176
return demangleEntity ();
1153
1177
return demangleModule ();
@@ -1198,7 +1222,7 @@ class Demangler {
1198
1222
entityBasicKind = Node::Kind::Variable;
1199
1223
} else if (Mangled.nextIf (' I' )) {
1200
1224
entityBasicKind = Node::Kind::Initializer;
1201
- } else if (Mangled.nextIf (' s ' )) {
1225
+ } else if (Mangled.nextIf (' i ' )) {
1202
1226
entityBasicKind = Node::Kind::Subscript;
1203
1227
} else {
1204
1228
return demangleNominalType ();
@@ -1356,7 +1380,7 @@ class Demangler {
1356
1380
if (!Mangled)
1357
1381
return nullptr ;
1358
1382
char c = Mangled.peek ();
1359
- if (c != ' _' && c != ' S'
1383
+ if (c != ' _' && c != ' S' && c != ' s '
1360
1384
&& (nodeKind == Node::Kind::AssociatedType || c != ' U' )
1361
1385
&& !isStartOfIdentifier (c))
1362
1386
break ;
@@ -1589,6 +1613,10 @@ class Demangler {
1589
1613
else
1590
1614
return makeAssociatedType (sub);
1591
1615
}
1616
+ if (Mangled.nextIf (' s' )) {
1617
+ NodePointer stdlib = NodeFactory::create (Node::Kind::Module, STDLIB_NAME);
1618
+ return makeAssociatedType (stdlib);
1619
+ }
1592
1620
if (Mangled.nextIf (' d' )) {
1593
1621
Node::IndexType depth, index ;
1594
1622
if (!demangleIndex (depth))
0 commit comments