@@ -1235,47 +1235,6 @@ GenericEnvironment *ModuleFile::getGenericEnvironment(
1235
1235
;
1236
1236
}
1237
1237
1238
- bool ModuleFile::readMembers (SmallVectorImpl<Decl *> &Members) {
1239
- using namespace decls_block ;
1240
-
1241
- auto entry = DeclTypeCursor.advance ();
1242
- if (entry.Kind != llvm::BitstreamEntry::Record)
1243
- return true ;
1244
-
1245
- SmallVector<uint64_t , 16 > memberIDBuffer;
1246
-
1247
- unsigned kind = DeclTypeCursor.readRecord (entry.ID , memberIDBuffer);
1248
- assert (kind == MEMBERS);
1249
- (void )kind;
1250
-
1251
- ArrayRef<uint64_t > rawMemberIDs;
1252
- decls_block::MembersLayout::readRecord (memberIDBuffer, rawMemberIDs);
1253
-
1254
- if (rawMemberIDs.empty ())
1255
- return false ;
1256
-
1257
- Members.reserve (rawMemberIDs.size ());
1258
- for (DeclID rawID : rawMemberIDs) {
1259
- Expected<Decl *> D = getDeclChecked (rawID);
1260
- if (!D) {
1261
- if (!getContext ().LangOpts .EnableDeserializationRecovery )
1262
- fatal (D.takeError ());
1263
-
1264
- // Silently drop the member if it had an override-related problem.
1265
- llvm::handleAllErrors (D.takeError (),
1266
- [](const OverrideError &) { /* expected */ },
1267
- [this ](std::unique_ptr<llvm::ErrorInfoBase> unhandled) {
1268
- fatal (std::move (unhandled));
1269
- });
1270
- continue ;
1271
- }
1272
- assert (D.get () && " unchecked error deserializing next member" );
1273
- Members.push_back (D.get ());
1274
- }
1275
-
1276
- return false ;
1277
- }
1278
-
1279
1238
bool ModuleFile::readDefaultWitnessTable (ProtocolDecl *proto) {
1280
1239
using namespace decls_block ;
1281
1240
@@ -2834,7 +2793,7 @@ ModuleFile::getDeclChecked(DeclID DID, Optional<DeclContext *> ForcedContext) {
2834
2793
if (!overridden) {
2835
2794
llvm::handleAllErrors (overridden.takeError (),
2836
2795
[](const XRefError &) { /* expected */ },
2837
- [this ](std::unique_ptr<llvm::ErrorInfoBase> unhandled){
2796
+ [this ](std::unique_ptr<llvm::ErrorInfoBase> unhandled) {
2838
2797
fatal (std::move (unhandled));
2839
2798
});
2840
2799
return llvm::make_error<OverrideError>(name);
@@ -4432,28 +4391,61 @@ Expected<Type> ModuleFile::getTypeChecked(TypeID TID) {
4432
4391
return typeOrOffset;
4433
4392
}
4434
4393
4435
- void ModuleFile::loadAllMembers (Decl *D , uint64_t contextData) {
4436
- PrettyStackTraceDecl trace (" loading members for" , D );
4394
+ void ModuleFile::loadAllMembers (Decl *container , uint64_t contextData) {
4395
+ PrettyStackTraceDecl trace (" loading members for" , container );
4437
4396
++NumMemberListsLoaded;
4438
4397
4398
+ IterableDeclContext *IDC;
4399
+ if (auto *nominal = dyn_cast<NominalTypeDecl>(container))
4400
+ IDC = nominal;
4401
+ else
4402
+ IDC = cast<ExtensionDecl>(container);
4403
+
4439
4404
BCOffsetRAII restoreOffset (DeclTypeCursor);
4440
4405
DeclTypeCursor.JumpToBit (contextData);
4406
+ auto entry = DeclTypeCursor.advance ();
4407
+ if (entry.Kind != llvm::BitstreamEntry::Record) {
4408
+ error ();
4409
+ return ;
4410
+ }
4411
+
4412
+ SmallVector<uint64_t , 16 > memberIDBuffer;
4413
+
4414
+ unsigned kind = DeclTypeCursor.readRecord (entry.ID , memberIDBuffer);
4415
+ assert (kind == decls_block::MEMBERS);
4416
+ (void )kind;
4417
+
4418
+ ArrayRef<uint64_t > rawMemberIDs;
4419
+ decls_block::MembersLayout::readRecord (memberIDBuffer, rawMemberIDs);
4420
+
4421
+ if (rawMemberIDs.empty ())
4422
+ return ;
4423
+
4441
4424
SmallVector<Decl *, 16 > members;
4442
- bool Err = readMembers (members);
4443
- assert (!Err && " unable to read members" );
4444
- (void )Err;
4425
+ members.reserve (rawMemberIDs.size ());
4426
+ for (DeclID rawID : rawMemberIDs) {
4427
+ Expected<Decl *> next = getDeclChecked (rawID);
4428
+ if (!next) {
4429
+ if (!getContext ().LangOpts .EnableDeserializationRecovery )
4430
+ fatal (next.takeError ());
4445
4431
4446
- IterableDeclContext *IDC;
4447
- if (auto *nominal = dyn_cast<NominalTypeDecl>(D))
4448
- IDC = nominal;
4449
- else
4450
- IDC = cast<ExtensionDecl>(D);
4432
+ // Silently drop the member if it had an override-related problem.
4433
+ llvm::handleAllErrors (next.takeError (),
4434
+ [](const OverrideError &) { /* expected */ },
4435
+ [this ](std::unique_ptr<llvm::ErrorInfoBase> unhandled) {
4436
+ fatal (std::move (unhandled));
4437
+ });
4438
+ continue ;
4439
+ }
4440
+ assert (next.get () && " unchecked error deserializing next member" );
4441
+ members.push_back (next.get ());
4442
+ }
4451
4443
4452
4444
for (auto member : members)
4453
4445
IDC->addMember (member);
4454
4446
4455
- if (auto *proto = dyn_cast<ProtocolDecl>(D )) {
4456
- PrettyStackTraceDecl trace (" reading default witness table for" , D );
4447
+ if (auto *proto = dyn_cast<ProtocolDecl>(container )) {
4448
+ PrettyStackTraceDecl trace (" reading default witness table for" , proto );
4457
4449
bool Err = readDefaultWitnessTable (proto);
4458
4450
assert (!Err && " unable to read default witness table" );
4459
4451
(void )Err;
0 commit comments