Skip to content

Commit ef8ac60

Browse files
committed
Use the old mangling for generic ObjC runtime names, which are generated at runtime.
To be backward compatible to existing archives created by the NSKeyedArchiver for generic classes
1 parent 84b5379 commit ef8ac60

File tree

4 files changed

+23
-22
lines changed

4 files changed

+23
-22
lines changed

stdlib/public/runtime/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ set(swift_runtime_objc_sources
4949
SwiftObject.mm
5050
SwiftValue.mm
5151
Reflection.mm
52+
"${SWIFT_SOURCE_DIR}/lib/Demangling/OldRemangler.cpp"
5253
"${SWIFT_SOURCE_DIR}/lib/Demangling/Remangler.cpp")
5354

5455
set(swift_runtime_sources

stdlib/public/runtime/Metadata.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1532,7 +1532,7 @@ static void _swift_initGenericClassObjCName(ClassMetadata *theClass) {
15321532
auto globalNode = Dem.createNode(Demangle::Node::Kind::Global);
15331533
globalNode->addChild(typeNode, Dem);
15341534

1535-
auto string = Demangle::mangleNode(globalNode);
1535+
auto string = Demangle::mangleNodeOld(globalNode);
15361536

15371537
auto fullNameBuf = (char*)swift_slowAlloc(string.size() + 1, 0);
15381538
memcpy(fullNameBuf, string.c_str(), string.size() + 1);

test/Interpreter/SDK/archiving_generic_swift_class.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,10 +190,10 @@ func unarchive() {
190190
fatalError("unable to unarchive Foo<NSNumber>")
191191
}
192192

193-
// CHECK-LABEL: <_T04main3FooCySo8NSStringCGD: {{0x[0-9a-f]+}}> #0
193+
// CHECK-LABEL: <_TtGC4main3FooCSo8NSString_: {{0x[0-9a-f]+}}> #0
194194
// CHECK: one: one
195195
// CHECK: two: two
196-
// CHECK-LABEL: <_T04main3FooCySo8NSNumberCGD: {{0x[0-9a-f]+}}> #0
196+
// CHECK-LABEL: <_TtGC4main3FooCSo8NSNumber_: {{0x[0-9a-f]+}}> #0
197197
// CHECK: one: 1
198198
// CHECK: two: 2
199199
dump(strings)

test/stdlib/RuntimeObjC.swift

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -334,47 +334,47 @@ protocol ProtocolA {}
334334
protocol ProtocolB {}
335335

336336
Runtime.test("Generic class ObjC runtime names") {
337-
expectEqual("_T01a12GenericClassCySiGD",
337+
expectEqual("_TtGC1a12GenericClassSi_",
338338
NSStringFromClass(GenericClass<Int>.self))
339-
expectEqual("_T01a12GenericClassCyAA11PlainStructVGD",
339+
expectEqual("_TtGC1a12GenericClassVS_11PlainStruct_",
340340
NSStringFromClass(GenericClass<PlainStruct>.self))
341-
expectEqual("_T01a12GenericClassCyAA9PlainEnumOGD",
341+
expectEqual("_TtGC1a12GenericClassOS_9PlainEnum_",
342342
NSStringFromClass(GenericClass<PlainEnum>.self))
343-
expectEqual("_T01a12GenericClassCyAA11PlainStructV_AA0C4EnumOAEtGD",
343+
expectEqual("_TtGC1a12GenericClassTVS_11PlainStructOS_9PlainEnumS1___",
344344
NSStringFromClass(GenericClass<(PlainStruct, PlainEnum, PlainStruct)>.self))
345-
expectEqual("_T01a12GenericClassCyAA11PlainStructVmGD",
345+
expectEqual("_TtGC1a12GenericClassMVS_11PlainStruct_",
346346
NSStringFromClass(GenericClass<PlainStruct.Type>.self))
347-
expectEqual("_T01a12GenericClassCyAA11PlainStructVAEmcGD",
347+
expectEqual("_TtGC1a12GenericClassFMVS_11PlainStructS1__",
348348
NSStringFromClass(GenericClass<(PlainStruct.Type) -> PlainStruct>.self))
349349

350-
expectEqual("_T01a12GenericClassCyAA11PlainStructVAEmKcGD",
350+
expectEqual("_TtGC1a12GenericClassFzMVS_11PlainStructS1__",
351351
NSStringFromClass(GenericClass<(PlainStruct.Type) throws -> PlainStruct>.self))
352-
expectEqual("_T01a12GenericClassCySiAA11PlainStructV_AA0C4EnumOztcGD",
352+
expectEqual("_TtGC1a12GenericClassFTVS_11PlainStructROS_9PlainEnum_Si_",
353353
NSStringFromClass(GenericClass<(PlainStruct, inout PlainEnum) -> Int>.self))
354354

355-
expectEqual("_T01a12GenericClassCyAA9ProtocolA_pGD",
355+
expectEqual("_TtGC1a12GenericClassPS_9ProtocolA__",
356356
NSStringFromClass(GenericClass<ProtocolA>.self))
357-
expectEqual("_T01a12GenericClassCyAA9ProtocolA_AA0C1BpGD",
357+
expectEqual("_TtGC1a12GenericClassPS_9ProtocolAS_9ProtocolB__",
358358
NSStringFromClass(GenericClass<ProtocolA & ProtocolB>.self))
359-
expectEqual("_T01a12GenericClassCyAA9ProtocolA_AA0C1BpXpGD",
359+
expectEqual("_TtGC1a12GenericClassPMPS_9ProtocolAS_9ProtocolB__",
360360
NSStringFromClass(GenericClass<(ProtocolA & ProtocolB).Type>.self))
361-
expectEqual("_T01a12GenericClassCyAA9ProtocolA_AA0C1BpmGD",
361+
expectEqual("_TtGC1a12GenericClassMPS_9ProtocolAS_9ProtocolB__",
362362
NSStringFromClass(GenericClass<(ProtocolB & ProtocolA).Protocol>.self))
363363

364-
expectEqual("_T01a12GenericClassCySo7CFArrayCGD",
364+
expectEqual("_TtGC1a12GenericClassCSo7CFArray_",
365365
NSStringFromClass(GenericClass<CFArray>.self))
366-
expectEqual("_T01a12GenericClassCySo7DecimalVGD",
366+
expectEqual("_TtGC1a12GenericClassVSo7Decimal_",
367367
NSStringFromClass(GenericClass<Decimal>.self))
368-
expectEqual("_T01a12GenericClassCySo8NSObjectCGD",
368+
expectEqual("_TtGC1a12GenericClassCSo8NSObject_",
369369
NSStringFromClass(GenericClass<NSObject>.self))
370-
expectEqual("_T01a12GenericClassCySo8NSObjectCGD",
370+
expectEqual("_TtGC1a12GenericClassCSo8NSObject_",
371371
NSStringFromClass(GenericClass<NSObject>.self))
372-
expectEqual("_T01a12GenericClassCySo9NSCopying_pGD",
372+
expectEqual("_TtGC1a12GenericClassPSo9NSCopying__",
373373
NSStringFromClass(GenericClass<NSCopying>.self))
374-
expectEqual("_T01a12GenericClassCySo9NSCopying_AA9ProtocolAAA0D1BpGD",
374+
expectEqual("_TtGC1a12GenericClassPSo9NSCopyingS_9ProtocolAS_9ProtocolB__",
375375
NSStringFromClass(GenericClass<ProtocolB & NSCopying & ProtocolA>.self))
376376

377-
expectEqual("_T01a17MultiGenericClassCyAA0B6StructVySiGAA0B4EnumOyAHySiGGGD",
377+
expectEqual("_TtGC1a17MultiGenericClassGVS_13GenericStructSi_GOS_11GenericEnumGS2_Si___",
378378
NSStringFromClass(MultiGenericClass<GenericStruct<Int>,
379379
GenericEnum<GenericEnum<Int>>>.self))
380380
}

0 commit comments

Comments
 (0)