Skip to content

Commit 6c18340

Browse files
committed
[Runtime] Remove demangleObjCTypeName and use the old demangler instead.
Archiving expects to be able to instantiate generic classes by name. This previously worked if you had instantiated the specialization in question, because the ObjC runtime would be able to look it up. Now, if the name hasn't been created, Swift has to look it up. demangleObjCTypeName doesn't do generics, so this failed. rdar://problem/57674583
1 parent 1da1825 commit 6c18340

File tree

2 files changed

+1
-44
lines changed

2 files changed

+1
-44
lines changed

include/swift/Demangling/Demangler.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -563,7 +563,6 @@ class Demangler : public NodeFactory {
563563
NodePointer demangleGenericType();
564564
NodePointer demangleValueWitness();
565565

566-
NodePointer demangleObjCTypeName();
567566
NodePointer demangleTypeMangling();
568567
NodePointer demangleSymbolicReference(unsigned char rawKind,
569568
const void *at);

lib/Demangling/Demangler.cpp

Lines changed: 1 addition & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -529,7 +529,7 @@ NodePointer Demangler::demangleSymbol(StringRef MangledName,
529529
// Demangle old-style class and protocol names, which are still used in the
530530
// ObjC metadata.
531531
if (nextIf("_Tt"))
532-
return demangleObjCTypeName();
532+
return demangleOldSymbolAsNode(Text, *this);
533533

534534
unsigned PrefixLength = getManglingPrefixLength(MangledName);
535535
if (PrefixLength == 0)
@@ -3193,45 +3193,3 @@ NodePointer Demangler::demangleValueWitness() {
31933193
addChild(VW, createNode(Node::Kind::Index, unsigned(Kind)));
31943194
return addChild(VW, popNode(Node::Kind::Type));
31953195
}
3196-
3197-
NodePointer Demangler::demangleObjCTypeName() {
3198-
NodePointer Ty = createNode(Node::Kind::Type);
3199-
NodePointer Global = addChild(createNode(Node::Kind::Global),
3200-
addChild(createNode(Node::Kind::TypeMangling), Ty));
3201-
NodePointer Nominal = nullptr;
3202-
bool isProto = false;
3203-
if (nextIf('C')) {
3204-
Nominal = createNode(Node::Kind::Class);
3205-
addChild(Ty, Nominal);
3206-
} else if (nextIf('P')) {
3207-
isProto = true;
3208-
Nominal = createNode(Node::Kind::Protocol);
3209-
addChild(Ty, addChild(createNode(Node::Kind::ProtocolList),
3210-
addChild(createNode(Node::Kind::TypeList),
3211-
addChild(createNode(Node::Kind::Type), Nominal))));
3212-
} else {
3213-
return nullptr;
3214-
}
3215-
3216-
if (nextIf('s')) {
3217-
Nominal->addChild(createNode(Node::Kind::Module, "Swift"), *this);
3218-
} else {
3219-
NodePointer Module = demangleIdentifier();
3220-
if (!Module)
3221-
return nullptr;
3222-
Nominal->addChild(changeKind(Module, Node::Kind::Module), *this);
3223-
}
3224-
3225-
NodePointer Ident = demangleIdentifier();
3226-
if (!Ident)
3227-
return nullptr;
3228-
Nominal->addChild(Ident, *this);
3229-
3230-
if (isProto && !nextIf('_'))
3231-
return nullptr;
3232-
3233-
if (Pos < Text.size())
3234-
return nullptr;
3235-
3236-
return Global;
3237-
}

0 commit comments

Comments
 (0)