Skip to content

Commit 4696f27

Browse files
authored
Merge pull request #7699 from eeckstein/protocol-mangling
2 parents 502cf01 + 13134ec commit 4696f27

File tree

6 files changed

+14
-31
lines changed

6 files changed

+14
-31
lines changed

lib/IRGen/GenDecl.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1073,7 +1073,6 @@ SILLinkage LinkEntity::getLinkage(IRGenModule &IGM,
10731073
switch (getKind()) {
10741074
// Most type metadata depend on the formal linkage of their type.
10751075
case Kind::ValueWitnessTable:
1076-
case Kind::TypeMangling:
10771076
return getSILLinkage(getTypeLinkage(getType()), forDefinition);
10781077

10791078
case Kind::TypeMetadata:
@@ -1210,7 +1209,6 @@ bool LinkEntity::isAvailableExternally(IRGenModule &IGM) const {
12101209
return ::isAvailableExternally(IGM, getProtocolConformance()->getDeclContext());
12111210

12121211
case Kind::ObjCClassRef:
1213-
case Kind::TypeMangling:
12141212
case Kind::ValueWitness:
12151213
case Kind::WitnessTableOffset:
12161214
case Kind::TypeMetadataAccessFunction:

lib/IRGen/GenMeta.cpp

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5641,13 +5641,12 @@ namespace {
56415641
// Include the _Tt prefix. Since Swift protocol descriptors are laid
56425642
// out to look like ObjC Protocol* objects, the name has to clearly be
56435643
// a Swift mangled name.
5644-
SmallString<32> mangling;
5645-
mangling += "_Tt";
5646-
5647-
auto name = LinkEntity::forTypeMangling(
5648-
Protocol->getDeclaredType()->getCanonicalType());
5649-
name.mangle(mangling);
5650-
auto global = IGM.getAddrOfGlobalString(mangling);
5644+
5645+
IRGenMangler mangler;
5646+
std::string Name =
5647+
mangler.mangleForProtocolDescriptor(Protocol->getDeclaredType());
5648+
5649+
auto global = IGM.getAddrOfGlobalString(Name);
56515650
addWord(global);
56525651
}
56535652

lib/IRGen/IRGenMangler.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,13 @@ class IRGenMangler : public NewMangling::ASTMangler {
166166
return mangleTypeWithoutPrefix(type);
167167
}
168168

169+
std::string mangleForProtocolDescriptor(ProtocolType *Proto) {
170+
beginMangling();
171+
appendType(Proto->getCanonicalType());
172+
appendOperator("D");
173+
return finalize();
174+
}
175+
169176
std::string mangleTypeForReflection(Type Ty, ModuleDecl *Module,
170177
bool isSingleFieldOfBox);
171178

lib/IRGen/Linking.cpp

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -99,12 +99,6 @@ std::string LinkEntity::mangleOld() const {
9999
mangler.mangleType(getType(), 0);
100100
return mangler.finalize();
101101

102-
// global ::= 't' type
103-
// Abstract type manglings just follow <type>.
104-
case Kind::TypeMangling:
105-
mangler.mangleType(getType(), 0);
106-
return mangler.finalize();
107-
108102
// global ::= 'Ma' type // type metadata access function
109103
case Kind::TypeMetadataAccessFunction:
110104
mangler.append("_TMa");
@@ -339,11 +333,6 @@ std::string LinkEntity::mangleNew() const {
339333
case Kind::ValueWitnessTable:
340334
return mangler.mangleValueWitnessTable(getType());
341335

342-
// global ::= 't' type
343-
// Abstract type manglings just follow <type>.
344-
case Kind::TypeMangling:
345-
return mangler.mangleTypeForMetadata(getType());
346-
347336
// global ::= 'Ma' type // type metadata access function
348337
case Kind::TypeMetadataAccessFunction:
349338
return mangler.mangleTypeMetadataAccessFunction(getType());

lib/IRGen/Linking.h

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -206,10 +206,6 @@ class LinkEntity {
206206
/// The pointer is a canonical TypeBase*.
207207
ForeignTypeMetadataCandidate,
208208

209-
/// A type which is being mangled just for its string.
210-
/// The pointer is a canonical TypeBase*.
211-
TypeMangling,
212-
213209
/// A reflection metadata descriptor for a builtin or imported type.
214210
ReflectionBuiltinDescriptor,
215211

@@ -420,12 +416,6 @@ class LinkEntity {
420416
return entity;
421417
}
422418

423-
static LinkEntity forTypeMangling(CanType type) {
424-
LinkEntity entity;
425-
entity.setForType(Kind::TypeMangling, type);
426-
return entity;
427-
}
428-
429419
static LinkEntity forSILFunction(SILFunction *F)
430420
{
431421
LinkEntity entity;

test/stdlib/RuntimeObjC.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -680,7 +680,7 @@ Reflection.test("MetatypeMirror") {
680680
expectEqual(expectedObjCProtocolConcrete, output)
681681

682682
let compositionConcreteMetatype = (SomeNativeProto & SomeObjCProto).self
683-
let expectedComposition = "- a.SomeObjCProto & a.SomeNativeProto #0\n"
683+
let expectedComposition = "- a.SomeNativeProto & a.SomeObjCProto #0\n"
684684
output = ""
685685
dump(compositionConcreteMetatype, to: &output)
686686
expectEqual(expectedComposition, output)

0 commit comments

Comments
 (0)