@@ -3099,22 +3099,20 @@ class Serializer::DeclSerializer : public DeclVisitor<DeclSerializer> {
3099
3099
// / XRef errors and such.
3100
3100
// /
3101
3101
// / \p decl should be either an \c ExtensionDecl or a \c ValueDecl.
3102
- static bool declIsDeserializationSafe (const Decl *decl) {
3102
+ static bool isDeserializationSafe (const Decl *decl) {
3103
3103
if (auto ext = dyn_cast<ExtensionDecl>(decl)) {
3104
3104
// Consider extensions as safe as their extended type.
3105
3105
auto nominalType = ext->getExtendedNominal ();
3106
3106
if (!nominalType ||
3107
- !declIsDeserializationSafe (nominalType))
3107
+ !isDeserializationSafe (nominalType))
3108
3108
return false ;
3109
3109
3110
3110
// We can mark the extension unsafe only if it has no public members.
3111
3111
auto members = ext->getMembers ();
3112
- int membersCount = 0 ;
3113
3112
auto hasSafeMembers = std::any_of (members.begin (), members.end (),
3114
- [&membersCount](const Decl *D) -> bool {
3115
- membersCount ++;
3113
+ [](const Decl *D) -> bool {
3116
3114
if (auto VD = dyn_cast<ValueDecl>(D))
3117
- return declIsDeserializationSafe (VD);
3115
+ return isDeserializationSafe (VD);
3118
3116
return true ;
3119
3117
});
3120
3118
if (hasSafeMembers)
@@ -3126,12 +3124,12 @@ class Serializer::DeclSerializer : public DeclVisitor<DeclSerializer> {
3126
3124
ConformanceLookupKind::OnlyExplicit);
3127
3125
bool hasSafeConformances = std::any_of (protocols.begin (),
3128
3126
protocols.end (),
3129
- declIsDeserializationSafe );
3127
+ isDeserializationSafe );
3130
3128
if (hasSafeConformances)
3131
3129
return true ;
3132
3130
3133
3131
// Truly empty extensions are safe, it may happen in swiftinterfaces.
3134
- if (membersCount == 0 && protocols.size () == 0 )
3132
+ if (members. empty () && protocols.size () == 0 )
3135
3133
return true ;
3136
3134
3137
3135
return false ;
@@ -3152,7 +3150,7 @@ class Serializer::DeclSerializer : public DeclVisitor<DeclSerializer> {
3152
3150
3153
3151
if (auto accessor = dyn_cast<AccessorDecl>(value))
3154
3152
// Accessors are as safe as their storage.
3155
- if (declIsDeserializationSafe (accessor->getStorage ()))
3153
+ if (isDeserializationSafe (accessor->getStorage ()))
3156
3154
return true ;
3157
3155
3158
3156
// Frozen fields are always safe.
@@ -3168,7 +3166,7 @@ class Serializer::DeclSerializer : public DeclVisitor<DeclSerializer> {
3168
3166
3169
3167
// Property wrappers storage is as safe as the wrapped property.
3170
3168
if (VarDecl *wrapped = var->getOriginalWrappedProperty ())
3171
- if (declIsDeserializationSafe (wrapped))
3169
+ if (isDeserializationSafe (wrapped))
3172
3170
return true ;
3173
3171
}
3174
3172
@@ -3178,7 +3176,7 @@ class Serializer::DeclSerializer : public DeclVisitor<DeclSerializer> {
3178
3176
// / Write a \c DeserializationSafetyLayout record only when \p decl is unsafe
3179
3177
// / to deserialize.
3180
3178
// /
3181
- // / \sa declIsDeserializationSafe
3179
+ // / \sa isDeserializationSafe
3182
3180
void writeDeserializationSafety (const Decl *decl) {
3183
3181
using namespace decls_block ;
3184
3182
@@ -3217,7 +3215,7 @@ class Serializer::DeclSerializer : public DeclVisitor<DeclSerializer> {
3217
3215
// Don't look at decls inside functions and
3218
3216
// check the ValueDecls themselves.
3219
3217
auto declIsSafe = DC->isLocalContext () ||
3220
- declIsDeserializationSafe (decl);
3218
+ isDeserializationSafe (decl);
3221
3219
#ifdef NDEBUG
3222
3220
// In release builds, bail right away if the decl is safe.
3223
3221
// In debug builds, wait to bail after the debug prints and asserts.
@@ -3246,6 +3244,7 @@ class Serializer::DeclSerializer : public DeclVisitor<DeclSerializer> {
3246
3244
);
3247
3245
3248
3246
#ifndef NDEBUG
3247
+ // Bail out here in debug builds, release builds would bailed out earlier.
3249
3248
if (declIsSafe)
3250
3249
return ;
3251
3250
#endif
0 commit comments