Skip to content

Commit 5bb69bd

Browse files
committed
Mangling: be more tolerant about missing Type nodes in the new re-mangler.
The runtime library sometimes does not generate type nodes when building a class name.
1 parent ee1aa04 commit 5bb69bd

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

lib/Basic/Remangler.cpp

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,12 @@ class Remangler {
191191
return Child;
192192
}
193193

194+
Node *skipType(Node *node) {
195+
if (node->getKind() == Node::Kind::Type)
196+
return getSingleChild(node);
197+
return node;
198+
}
199+
194200
Node *getChildOfType(Node *node) {
195201
assert(node->getKind() == Node::Kind::Type);
196202
return getSingleChild(node);
@@ -242,8 +248,7 @@ class Remangler {
242248
}
243249

244250
void manglePureProtocol(Node *Proto) {
245-
if (Proto->getKind() == Node::Kind::Type)
246-
Proto = getSingleChild(Proto, Node::Kind::Protocol);
251+
Proto = skipType(Proto);
247252
mangleChildNodes(Proto);
248253
}
249254

@@ -461,14 +466,13 @@ void Remangler::mangleArchetype(Node *node) {
461466
}
462467

463468
void Remangler::mangleArgumentTuple(Node *node) {
464-
Node *Ty = getSingleChild(node, Node::Kind::Type);
465-
Node *Child = getSingleChild(Ty);
469+
Node *Child = skipType(getSingleChild(node));
466470
if (Child->getKind() == Node::Kind::NonVariadicTuple &&
467471
Child->getNumChildren() == 0) {
468472
Buffer << 'y';
469473
return;
470474
}
471-
mangleSingleChildNode(Ty);
475+
mangle(Child);
472476
}
473477

474478
void Remangler::mangleAssociatedType(Node *node) {
@@ -1359,7 +1363,7 @@ void Remangler::mangleProtocolConformance(Node *node) {
13591363
}
13601364

13611365
void Remangler::mangleProtocolDescriptor(Node *node) {
1362-
manglePureProtocol(getSingleChild(node, Node::Kind::Type));
1366+
manglePureProtocol(getSingleChild(node));
13631367
Buffer << "Mp";
13641368
}
13651369

0 commit comments

Comments
 (0)