Skip to content

Commit a86e39d

Browse files
committed
Reflection: Don't emit associated type records for conformances without associated types
This saves a bit of space. We don't care about conformances per se in remote reflection, only what the associated types are.
1 parent 803a6b0 commit a86e39d

File tree

3 files changed

+7
-37
lines changed

3 files changed

+7
-37
lines changed

lib/IRGen/GenReflection.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -240,13 +240,18 @@ class AssociatedTypeMetadataBuilder : public ReflectionMetadataBuilder {
240240
return false;
241241
};
242242

243+
Conformance->forEachTypeWitness(/*resolver*/ nullptr, collectTypeWitness);
244+
245+
// If there are no associated types, don't bother emitting any
246+
// metadata.
247+
if (AssociatedTypes.empty())
248+
return;
249+
243250
addTypeRef(ModuleContext, ConformingType);
244251

245252
auto ProtoTy = Conformance->getProtocol()->getDeclaredType();
246253
addTypeRef(ModuleContext, ProtoTy->getCanonicalType());
247254

248-
Conformance->forEachTypeWitness(/*resolver*/ nullptr, collectTypeWitness);
249-
250255
addConstantInt32(AssociatedTypes.size());
251256
addConstantInt32(AssociatedTypeRecordSize);
252257

test/Reflection/typeref_decoding.swift

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -582,15 +582,10 @@
582582

583583
// CHECK: ASSOCIATED TYPES:
584584
// CHECK: =================
585-
// CHECK: - TypesToReflect.Box : Swift.AnyObject
586-
// CHECK: - TypesToReflect.C : Swift.AnyObject
587-
// CHECK: - TypesToReflect.C1 : Swift.AnyObject
588585
// CHECK: - TypesToReflect.C1 : TypesToReflect.ClassBoundP
589586
// CHECK: typealias Inner = A
590587
// CHECK: (generic_type_parameter depth=0 index=0)
591588

592-
// CHECK: - TypesToReflect.C2 : Swift.AnyObject
593-
// CHECK: - TypesToReflect.C3 : Swift.AnyObject
594589
// CHECK: - TypesToReflect.C4 : TypesToReflect.P1
595590
// CHECK: typealias Inner = A
596591
// CHECK: (generic_type_parameter depth=0 index=0)

test/Reflection/typeref_decoding_objc.swift

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -22,21 +22,6 @@
2222

2323
// CHECK-32: ASSOCIATED TYPES:
2424
// CHECK-32: =================
25-
// CHECK-32: - TypesToReflect.OC : Swift.AnyObject
26-
// CHECK-32: - TypesToReflect.OC : __ObjC.NSObjectProtocol
27-
// CHECK-32: - TypesToReflect.OC : Swift.Equatable
28-
// CHECK-32: - TypesToReflect.OC : Swift.Hashable
29-
// CHECK-32: - TypesToReflect.OC : Swift.CVarArg
30-
// CHECK-32: - TypesToReflect.OC : Swift.CustomStringConvertible
31-
// CHECK-32: - TypesToReflect.OC : Swift.CustomDebugStringConvertible
32-
// CHECK-32: - TypesToReflect.GenericOC : Swift.AnyObject
33-
// CHECK-32: - TypesToReflect.GenericOC : __ObjC.NSObjectProtocol
34-
// CHECK-32: - TypesToReflect.GenericOC : Swift.Equatable
35-
// CHECK-32: - TypesToReflect.GenericOC : Swift.Hashable
36-
// CHECK-32: - TypesToReflect.GenericOC : Swift.CVarArg
37-
// CHECK-32: - TypesToReflect.GenericOC : Swift.CustomStringConvertible
38-
// CHECK-32: - TypesToReflect.GenericOC : Swift.CustomDebugStringConvertible
39-
// CHECK-32: - TypesToReflect.HasObjCClasses : Swift.AnyObject
4025

4126
// CHECK-32: BUILTIN TYPES:
4227
// CHECK-32: ==============
@@ -108,21 +93,6 @@
10893

10994
// CHECK-64: ASSOCIATED TYPES:
11095
// CHECK-64: =================
111-
// CHECK-64: - TypesToReflect.OC : Swift.AnyObject
112-
// CHECK-64: - TypesToReflect.OC : __ObjC.NSObjectProtocol
113-
// CHECK-64: - TypesToReflect.OC : Swift.Equatable
114-
// CHECK-64: - TypesToReflect.OC : Swift.Hashable
115-
// CHECK-64: - TypesToReflect.OC : Swift.CVarArg
116-
// CHECK-64: - TypesToReflect.OC : Swift.CustomStringConvertible
117-
// CHECK-64: - TypesToReflect.OC : Swift.CustomDebugStringConvertible
118-
// CHECK-64: - TypesToReflect.GenericOC : Swift.AnyObject
119-
// CHECK-64: - TypesToReflect.GenericOC : __ObjC.NSObjectProtocol
120-
// CHECK-64: - TypesToReflect.GenericOC : Swift.Equatable
121-
// CHECK-64: - TypesToReflect.GenericOC : Swift.Hashable
122-
// CHECK-64: - TypesToReflect.GenericOC : Swift.CVarArg
123-
// CHECK-64: - TypesToReflect.GenericOC : Swift.CustomStringConvertible
124-
// CHECK-64: - TypesToReflect.GenericOC : Swift.CustomDebugStringConvertible
125-
// CHECK-64: - TypesToReflect.HasObjCClasses : Swift.AnyObject
12696

12797
// CHECK-64: BUILTIN TYPES:
12898
// CHECK-64: ==============

0 commit comments

Comments
 (0)