@@ -3258,6 +3258,18 @@ class Serializer::DeclSerializer : public DeclVisitor<DeclSerializer> {
3258
3258
}
3259
3259
}
3260
3260
3261
+ size_t addConformances (const IterableDeclContext *declContext,
3262
+ ConformanceLookupKind lookupKind,
3263
+ SmallVectorImpl<TypeID> &data) {
3264
+ size_t count = 0 ;
3265
+ for (auto conformance : declContext->getLocalConformances (lookupKind)) {
3266
+ data.push_back (S.addConformanceRef (conformance));
3267
+ count++;
3268
+ }
3269
+
3270
+ return count;
3271
+ }
3272
+
3261
3273
public:
3262
3274
// / Determine if \p decl is safe to deserialize when it's public
3263
3275
// / or otherwise needed by the client in normal builds, this should usually
@@ -3787,8 +3799,8 @@ class Serializer::DeclSerializer : public DeclVisitor<DeclSerializer> {
3787
3799
// / Add all of the inherited entries to the result vector.
3788
3800
// /
3789
3801
// / \returns the number of entries added.
3790
- unsigned addInherited (ArrayRef<InheritedEntry> inheritedEntries,
3791
- SmallVectorImpl<TypeID> &result) {
3802
+ size_t addInherited (ArrayRef<InheritedEntry> inheritedEntries,
3803
+ SmallVectorImpl<TypeID> &result) {
3792
3804
for (const auto &inherited : inheritedEntries) {
3793
3805
assert (!inherited.getType () || !inherited.getType ()->hasArchetype ());
3794
3806
TypeID typeRef = S.addTypeRef (inherited.getType ());
@@ -3821,13 +3833,9 @@ class Serializer::DeclSerializer : public DeclVisitor<DeclSerializer> {
3821
3833
// simpler user model to just always desugar extension types.
3822
3834
extendedType = extendedType->getCanonicalType ();
3823
3835
3824
- auto conformances = extension->getLocalConformances (
3825
- ConformanceLookupKind::All);
3826
-
3827
3836
SmallVector<TypeID, 8 > data;
3828
- for (auto conformance : conformances)
3829
- data.push_back (S.addConformanceRef (conformance));
3830
-
3837
+ size_t numConformances =
3838
+ addConformances (extension, ConformanceLookupKind::All, data);
3831
3839
size_t numInherited = addInherited (
3832
3840
extension->getInherited (), data);
3833
3841
@@ -3850,7 +3858,7 @@ class Serializer::DeclSerializer : public DeclVisitor<DeclSerializer> {
3850
3858
extension->isImplicit (),
3851
3859
S.addGenericSignatureRef (
3852
3860
extension->getGenericSignature ()),
3853
- conformances. size () ,
3861
+ numConformances ,
3854
3862
numInherited,
3855
3863
data);
3856
3864
@@ -4054,14 +4062,10 @@ class Serializer::DeclSerializer : public DeclVisitor<DeclSerializer> {
4054
4062
4055
4063
auto contextID = S.addDeclContextRef (theStruct->getDeclContext ());
4056
4064
4057
- auto conformances = theStruct->getLocalConformances (
4058
- ConformanceLookupKind::All);
4059
-
4060
4065
SmallVector<TypeID, 4 > data;
4061
- for (auto conformance : conformances)
4062
- data.push_back (S.addConformanceRef (conformance));
4063
-
4064
- unsigned numInherited = addInherited (theStruct->getInherited (), data);
4066
+ size_t numConformances =
4067
+ addConformances (theStruct, ConformanceLookupKind::All, data);
4068
+ size_t numInherited = addInherited (theStruct->getInherited (), data);
4065
4069
4066
4070
llvm::SmallSetVector<Type, 4 > dependencyTypes;
4067
4071
for (Requirement req : theStruct->getGenericRequirements ()) {
@@ -4083,7 +4087,7 @@ class Serializer::DeclSerializer : public DeclVisitor<DeclSerializer> {
4083
4087
S.addGenericSignatureRef (
4084
4088
theStruct->getGenericSignature ()),
4085
4089
rawAccessLevel,
4086
- conformances. size () ,
4090
+ numConformances ,
4087
4091
numInherited,
4088
4092
data);
4089
4093
@@ -4098,14 +4102,10 @@ class Serializer::DeclSerializer : public DeclVisitor<DeclSerializer> {
4098
4102
4099
4103
auto contextID = S.addDeclContextRef (theEnum->getDeclContext ());
4100
4104
4101
- auto conformances = theEnum->getLocalConformances (
4102
- ConformanceLookupKind::All);
4103
-
4104
4105
SmallVector<TypeID, 4 > data;
4105
- for (auto conformance : conformances)
4106
- data.push_back (S.addConformanceRef (conformance));
4107
-
4108
- unsigned numInherited = addInherited (theEnum->getInherited (), data);
4106
+ size_t numConformances =
4107
+ addConformances (theEnum, ConformanceLookupKind::All, data);
4108
+ size_t numInherited = addInherited (theEnum->getInherited (), data);
4109
4109
4110
4110
llvm::SmallSetVector<Type, 4 > dependencyTypes;
4111
4111
for (const EnumElementDecl *nextElt : theEnum->getAllElements ()) {
@@ -4140,7 +4140,7 @@ class Serializer::DeclSerializer : public DeclVisitor<DeclSerializer> {
4140
4140
theEnum->getGenericSignature ()),
4141
4141
S.addTypeRef (theEnum->getRawType ()),
4142
4142
rawAccessLevel,
4143
- conformances. size () ,
4143
+ numConformances ,
4144
4144
numInherited,
4145
4145
data);
4146
4146
@@ -4155,14 +4155,10 @@ class Serializer::DeclSerializer : public DeclVisitor<DeclSerializer> {
4155
4155
4156
4156
auto contextID = S.addDeclContextRef (theClass->getDeclContext ());
4157
4157
4158
- auto conformances = theClass->getLocalConformances (
4159
- ConformanceLookupKind::NonInherited);
4160
-
4161
4158
SmallVector<TypeID, 4 > data;
4162
- for (auto conformance : conformances)
4163
- data.push_back (S.addConformanceRef (conformance));
4164
-
4165
- unsigned numInherited = addInherited (theClass->getInherited (), data);
4159
+ size_t numConformances =
4160
+ addConformances (theClass, ConformanceLookupKind::NonInherited, data);
4161
+ size_t numInherited = addInherited (theClass->getInherited (), data);
4166
4162
4167
4163
llvm::SmallSetVector<Type, 4 > dependencyTypes;
4168
4164
if (theClass->hasSuperclass ()) {
@@ -4199,7 +4195,7 @@ class Serializer::DeclSerializer : public DeclVisitor<DeclSerializer> {
4199
4195
theClass->getGenericSignature ()),
4200
4196
S.addTypeRef (theClass->getSuperclass ()),
4201
4197
rawAccessLevel,
4202
- conformances. size () ,
4198
+ numConformances ,
4203
4199
numInherited,
4204
4200
data);
4205
4201
0 commit comments