@@ -218,9 +218,6 @@ bool ModuleDependenciesCacheDeserializer::readGraph(
218
218
219
219
bool hasCurrentModule = false ;
220
220
std::string currentModuleName;
221
- std::vector<ScannerImportStatementInfo> currentModuleImports;
222
- std::vector<ScannerImportStatementInfo> currentOptionalModuleImports;
223
-
224
221
std::vector<ModuleDependencyID> importedSwiftDependenciesIDs;
225
222
std::vector<ModuleDependencyID> importedClangDependenciesIDs;
226
223
std::vector<ModuleDependencyID> crossImportOverlayDependenciesIDs;
@@ -235,18 +232,8 @@ bool ModuleDependenciesCacheDeserializer::readGraph(
235
232
std::vector<std::string> auxiliaryFiles;
236
233
237
234
auto addCommonDependencyInfo =
238
- [¤tModuleImports, ¤tOptionalModuleImports,
239
- &importedClangDependenciesIDs, &auxiliaryFiles,
235
+ [&importedClangDependenciesIDs, &auxiliaryFiles,
240
236
¯oDependencies](ModuleDependencyInfo &moduleDep) {
241
- // Add imports of this module
242
- for (const auto &moduleName : currentModuleImports)
243
- moduleDep.addModuleImport (moduleName.importIdentifier ,
244
- moduleName.isExported );
245
- // Add optional imports of this module
246
- for (const auto &moduleName : currentOptionalModuleImports)
247
- moduleDep.addOptionalModuleImport (moduleName.importIdentifier ,
248
- moduleName.isExported );
249
-
250
237
// Add qualified dependencies of this module
251
238
moduleDep.setImportedClangDependencies (importedClangDependenciesIDs);
252
239
@@ -297,7 +284,7 @@ bool ModuleDependenciesCacheDeserializer::readGraph(
297
284
llvm::report_fatal_error (" Bad bridging module dependencies" );
298
285
llvm::StringSet<> alreadyAdded;
299
286
std::vector<ModuleDependencyID> bridgingModuleDepIDs;
300
- for (const auto &mod : bridgingModuleDeps. value () )
287
+ for (const auto &mod : * bridgingModuleDeps)
301
288
bridgingModuleDepIDs.push_back (
302
289
ModuleDependencyID{mod, ModuleDependencyKind::Clang});
303
290
moduleDep.setHeaderClangDependencies (bridgingModuleDepIDs);
@@ -364,7 +351,7 @@ bool ModuleDependenciesCacheDeserializer::readGraph(
364
351
llvm::report_fatal_error (" Bad link library identifier" );
365
352
366
353
LinkLibraries.emplace_back (
367
- libraryIdentifier. value () ,
354
+ * libraryIdentifier,
368
355
isFramework ? LibraryKind::Framework
369
356
: LibraryKind::Library,
370
357
isStatic, shouldForceLoad);
@@ -395,8 +382,8 @@ bool ModuleDependenciesCacheDeserializer::readGraph(
395
382
llvm::report_fatal_error (" Bad macro dependency: no executable path" );
396
383
397
384
MacroDependencies.push_back (
398
- {macroModuleName. value () ,
399
- MacroPluginDependency{libraryPath. value (), executablePath. value () }});
385
+ {* macroModuleName,
386
+ MacroPluginDependency{* libraryPath, * executablePath}});
400
387
break ;
401
388
}
402
389
@@ -422,10 +409,14 @@ bool ModuleDependenciesCacheDeserializer::readGraph(
422
409
if (!bufferIdentifier)
423
410
llvm::report_fatal_error (
424
411
" Bad import statement info: no buffer identifier" );
425
- ImportStatements.push_back (ScannerImportStatementInfo (
426
- importIdentifier.value (), isExported,
427
- ScannerImportStatementInfo::ImportDiagnosticLocationInfo (
428
- bufferIdentifier.value (), lineNumber, columnNumber)));
412
+ if (bufferIdentifier->empty ())
413
+ ImportStatements.push_back (ScannerImportStatementInfo (
414
+ *importIdentifier, isExported));
415
+ else
416
+ ImportStatements.push_back (ScannerImportStatementInfo (
417
+ *importIdentifier, isExported,
418
+ ScannerImportStatementInfo::ImportDiagnosticLocationInfo (
419
+ *bufferIdentifier, lineNumber, columnNumber)));
429
420
break ;
430
421
}
431
422
@@ -470,18 +461,16 @@ bool ModuleDependenciesCacheDeserializer::readGraph(
470
461
getImportStatementInfoArray (moduleImportsArrayID);
471
462
if (!optionalImportStatementInfos)
472
463
llvm::report_fatal_error (" Bad direct Swift dependencies: no imports" );
473
- importStatements = optionalImportStatementInfos. value () ;
464
+ importStatements = * optionalImportStatementInfos;
474
465
475
466
auto optionalOptionalImportStatementInfos =
476
467
getOptionalImportStatementInfoArray (optionalImportsArrayID);
477
- if (!optionalOptionalImportStatementInfos)
478
- llvm::report_fatal_error (
479
- " Bad direct Swift dependencies: no optional imports" );
480
- optionalImportStatements = optionalOptionalImportStatementInfos.value ();
468
+ if (optionalOptionalImportStatementInfos)
469
+ optionalImportStatements = *optionalOptionalImportStatementInfos;
481
470
482
471
auto optionalAuxiliaryFiles = getStringArray (AuxiliaryFilesArrayID);
483
- if (optionalAuxiliaryFiles. has_value () )
484
- for (const auto &af : optionalAuxiliaryFiles. value () )
472
+ if (optionalAuxiliaryFiles)
473
+ for (const auto &af : * optionalAuxiliaryFiles)
485
474
auxiliaryFiles.push_back (af);
486
475
487
476
auto optionalImportedSwiftDependenciesIDs =
@@ -490,30 +479,30 @@ bool ModuleDependenciesCacheDeserializer::readGraph(
490
479
llvm::report_fatal_error (
491
480
" Bad direct Swift dependencies: no qualified dependencies" );
492
481
importedSwiftDependenciesIDs =
493
- optionalImportedSwiftDependenciesIDs. value () ;
482
+ * optionalImportedSwiftDependenciesIDs;
494
483
495
484
auto optionalImportedClangDependenciesIDs =
496
485
getModuleDependencyIDArray (importedClangDependenciesIDsArrayID);
497
486
if (!optionalImportedClangDependenciesIDs)
498
487
llvm::report_fatal_error (
499
488
" Bad direct Clang dependencies: no qualified dependencies" );
500
489
importedClangDependenciesIDs =
501
- optionalImportedClangDependenciesIDs. value () ;
490
+ * optionalImportedClangDependenciesIDs;
502
491
503
492
auto optionalCrossImportOverlayDependenciesIDs =
504
493
getModuleDependencyIDArray (crossImportOverlayDependenciesIDsArrayID);
505
494
if (!optionalCrossImportOverlayDependenciesIDs)
506
495
llvm::report_fatal_error (
507
496
" Bad Cross-Import Overlay dependencies: no qualified dependencies" );
508
497
crossImportOverlayDependenciesIDs =
509
- optionalCrossImportOverlayDependenciesIDs. value () ;
498
+ * optionalCrossImportOverlayDependenciesIDs;
510
499
511
500
auto optionalSwiftOverlayDependenciesIDs =
512
501
getModuleDependencyIDArray (swiftOverlayDependenciesIDsArrayID);
513
502
if (!optionalSwiftOverlayDependenciesIDs)
514
503
llvm::report_fatal_error (
515
504
" Bad Swift Overlay dependencies: no qualified dependencies" );
516
- swiftOverlayDependenciesIDs = optionalSwiftOverlayDependenciesIDs. value () ;
505
+ swiftOverlayDependenciesIDs = * optionalSwiftOverlayDependenciesIDs;
517
506
518
507
auto optionalLinkLibraries = getLinkLibraryArray (linkLibraryArrayID);
519
508
if (!optionalLinkLibraries)
@@ -587,7 +576,7 @@ bool ModuleDependenciesCacheDeserializer::readGraph(
587
576
588
577
// Form the dependencies storage object
589
578
auto moduleDep = ModuleDependencyInfo::forSwiftInterfaceModule (
590
- optionalSwiftInterfaceFile. value () , compiledCandidatesRefs,
579
+ * optionalSwiftInterfaceFile, compiledCandidatesRefs,
591
580
buildCommandRefs, importStatements, optionalImportStatements,
592
581
linkLibraries, isFramework, isStatic, *rootFileSystemID,
593
582
*moduleCacheKey, *userModuleVersion);
@@ -711,7 +700,7 @@ bool ModuleDependenciesCacheDeserializer::readGraph(
711
700
// Form the dependencies storage object
712
701
auto moduleDep = ModuleDependencyInfo::forSwiftBinaryModule (
713
702
*compiledModulePath, *moduleDocPath, *moduleSourceInfoPath,
714
- currentModuleImports, currentOptionalModuleImports , linkLibraries,
703
+ importStatements, optionalImportStatements , linkLibraries,
715
704
*headerImport, *definingInterfacePath, isFramework, isStatic,
716
705
*moduleCacheKey, *userModuleVersion);
717
706
@@ -984,7 +973,7 @@ ModuleDependenciesCacheDeserializer::getOptionalImportStatementInfoArray(
984
973
std::optional<std::vector<ModuleDependencyID>>
985
974
ModuleDependenciesCacheDeserializer::getModuleDependencyIDArray (unsigned n) {
986
975
auto encodedIdentifierStringArray = getStringArray (n);
987
- if (encodedIdentifierStringArray. has_value () ) {
976
+ if (encodedIdentifierStringArray) {
988
977
static const std::string textualPrefix (" swiftTextual" );
989
978
static const std::string binaryPrefix (" swiftBinary" );
990
979
static const std::string placeholderPrefix (" swiftPlaceholder" );
@@ -1288,8 +1277,8 @@ void ModuleDependenciesCacheSerializer::writeLinkLibraries(
1288
1277
for (const auto &entry : modMap) {
1289
1278
ModuleDependencyID moduleID = {entry.getKey ().str (), kind};
1290
1279
auto optionalDependencyInfo = cache.findDependency (moduleID);
1291
- assert (optionalDependencyInfo. has_value () && " Expected dependency info." );
1292
- auto dependencyInfo = optionalDependencyInfo. value () ;
1280
+ assert (optionalDependencyInfo && " Expected dependency info." );
1281
+ auto dependencyInfo = * optionalDependencyInfo;
1293
1282
unsigned numLLs = writeLinkLibraryInfos (*dependencyInfo);
1294
1283
moduleLLArrayMap.insert ({moduleID, std::make_pair (lastLLIndex, numLLs)});
1295
1284
lastLLIndex += numLLs;
@@ -1343,8 +1332,8 @@ void ModuleDependenciesCacheSerializer::writeMacroDependencies(
1343
1332
for (const auto &entry : modMap) {
1344
1333
ModuleDependencyID moduleID = {entry.getKey ().str (), kind};
1345
1334
auto optionalDependencyInfo = cache.findDependency (moduleID);
1346
- assert (optionalDependencyInfo. has_value () && " Expected dependency info." );
1347
- auto dependencyInfo = optionalDependencyInfo. value () ;
1335
+ assert (optionalDependencyInfo && " Expected dependency info." );
1336
+ auto dependencyInfo = * optionalDependencyInfo;
1348
1337
unsigned numMDs = writeMacroDependencies (*dependencyInfo);
1349
1338
moduleMacroDepArrayMap.insert (
1350
1339
{moduleID, std::make_pair (lastMDIndex, numMDs)});
@@ -1399,11 +1388,11 @@ void ModuleDependenciesCacheSerializer::writeImportStatementInfos(
1399
1388
for (auto kind = ModuleDependencyKind::FirstKind;
1400
1389
kind != ModuleDependencyKind::LastKind; ++kind) {
1401
1390
auto modMap = cache.getDependenciesMap (kind);
1402
- for (const auto &entry : modMap) {
1403
- ModuleDependencyID moduleID = {entry.getKey (). str (), kind};
1391
+ for (const auto &entry : modMap. keys () ) {
1392
+ ModuleDependencyID moduleID = {entry.str (), kind};
1404
1393
auto optionalDependencyInfo = cache.findDependency (moduleID);
1405
- assert (optionalDependencyInfo. has_value () && " Expected dependency info." );
1406
- auto dependencyInfo = optionalDependencyInfo. value () ;
1394
+ assert (optionalDependencyInfo && " Expected dependency info." );
1395
+ auto dependencyInfo = * optionalDependencyInfo;
1407
1396
1408
1397
auto numImportInfos =
1409
1398
writeImportStatementInfos (*dependencyInfo, /* optional */ false );
@@ -1414,22 +1403,28 @@ void ModuleDependenciesCacheSerializer::writeImportStatementInfos(
1414
1403
auto numOptionalImportInfos =
1415
1404
writeImportStatementInfos (*dependencyInfo, /* optional */ true );
1416
1405
optionalImportInfoArrayMap.insert (
1417
- {moduleID, std::make_pair (lastImportInfoIndex, numImportInfos )});
1406
+ {moduleID, std::make_pair (lastImportInfoIndex, numOptionalImportInfos )});
1418
1407
lastImportInfoIndex += numOptionalImportInfos;
1419
1408
}
1420
1409
}
1421
1410
1422
1411
unsigned lastImportInfoArrayIndex = 1 ;
1412
+ unsigned lastOptionalImportInfoArrayIndex = 1 ;
1423
1413
for (auto kind = ModuleDependencyKind::FirstKind;
1424
1414
kind != ModuleDependencyKind::LastKind; ++kind) {
1425
1415
auto modMap = cache.getDependenciesMap (kind);
1426
- for (const auto &entry : modMap) {
1427
- ModuleDependencyID moduleID = {entry.getKey (). str (), kind};
1416
+ for (const auto &entry : modMap. keys () ) {
1417
+ ModuleDependencyID moduleID = {entry.str (), kind};
1428
1418
auto entries = importInfoArrayMap.at (moduleID);
1429
- if (entries.second == 0 )
1430
- continue ;
1431
- writeImportStatementInfosArray (entries.first , entries.second );
1432
- ImportInfosArrayIDsMap.insert ({moduleID, lastImportInfoArrayIndex++});
1419
+ if (entries.second != 0 ) {
1420
+ writeImportStatementInfosArray (entries.first , entries.second );
1421
+ ImportInfosArrayIDsMap.insert ({moduleID, lastImportInfoArrayIndex++});
1422
+ }
1423
+ auto optionalEntries = optionalImportInfoArrayMap.at (moduleID);
1424
+ if (optionalEntries.second != 0 ) {
1425
+ writeImportStatementInfosArray (optionalEntries.first , optionalEntries.second );
1426
+ OptionalImportInfosArrayIDsMap.insert ({moduleID, lastOptionalImportInfoArrayIndex++});
1427
+ }
1433
1428
}
1434
1429
}
1435
1430
}
@@ -1440,22 +1435,31 @@ unsigned ModuleDependenciesCacheSerializer::writeImportStatementInfos(
1440
1435
size_t count = 0 ;
1441
1436
auto emitImportStatementInfo = [this , &count](const auto &importInfo,
1442
1437
bool isOptional) {
1443
- for ( auto &importLoc : importInfo.importLocations ) {
1438
+ if ( importInfo.importLocations . empty () ) {
1444
1439
ImportStatementLayout::emitRecord (
1445
1440
Out, ScratchRecord, AbbrCodes[ImportStatementLayout::Code],
1446
1441
getIdentifier (importInfo.importIdentifier ),
1447
- getIdentifier (importLoc.bufferIdentifier ), importLoc.lineNumber ,
1448
- importLoc.columnNumber , isOptional, importInfo.isExported );
1442
+ 0 , 0 , 0 , isOptional, importInfo.isExported );
1449
1443
count++;
1444
+ } else {
1445
+ for (auto &importLoc : importInfo.importLocations ) {
1446
+ ImportStatementLayout::emitRecord (
1447
+ Out, ScratchRecord, AbbrCodes[ImportStatementLayout::Code],
1448
+ getIdentifier (importInfo.importIdentifier ),
1449
+ getIdentifier (importLoc.bufferIdentifier ), importLoc.lineNumber ,
1450
+ importLoc.columnNumber , isOptional, importInfo.isExported );
1451
+ count++;
1452
+ }
1450
1453
}
1451
1454
};
1452
1455
1453
- for (auto &importInfo : dependencyInfo.getModuleImports ())
1454
- emitImportStatementInfo (importInfo, false );
1455
-
1456
- for (auto &importInfo : dependencyInfo.getOptionalModuleImports ())
1457
- emitImportStatementInfo (importInfo, true );
1458
-
1456
+ if (!optional) {
1457
+ for (auto &importInfo : dependencyInfo.getModuleImports ())
1458
+ emitImportStatementInfo (importInfo, false );
1459
+ } else {
1460
+ for (auto &importInfo : dependencyInfo.getOptionalModuleImports ())
1461
+ emitImportStatementInfo (importInfo, true );
1462
+ }
1459
1463
return count;
1460
1464
}
1461
1465
@@ -1500,8 +1504,8 @@ void ModuleDependenciesCacheSerializer::writeModuleInfo(
1500
1504
getIdentifier (swiftTextDeps->swiftInterfaceFile );
1501
1505
unsigned bridgingHeaderFileId =
1502
1506
swiftTextDeps->textualModuleDetails .bridgingHeaderFile
1503
- ? getIdentifier (swiftTextDeps->textualModuleDetails
1504
- .bridgingHeaderFile . value ( ))
1507
+ ? getIdentifier (*( swiftTextDeps->textualModuleDetails
1508
+ .bridgingHeaderFile ))
1505
1509
: 0 ;
1506
1510
SwiftInterfaceModuleDetailsLayout::emitRecord (
1507
1511
Out, ScratchRecord, AbbrCodes[SwiftInterfaceModuleDetailsLayout::Code],
@@ -1529,8 +1533,8 @@ void ModuleDependenciesCacheSerializer::writeModuleInfo(
1529
1533
assert (swiftSourceDeps);
1530
1534
unsigned bridgingHeaderFileId =
1531
1535
swiftSourceDeps->textualModuleDetails .bridgingHeaderFile
1532
- ? getIdentifier (swiftSourceDeps->textualModuleDetails
1533
- .bridgingHeaderFile . value ( ))
1536
+ ? getIdentifier (*( swiftSourceDeps->textualModuleDetails
1537
+ .bridgingHeaderFile ))
1534
1538
: 0 ;
1535
1539
SwiftSourceModuleDetailsLayout::emitRecord (
1536
1540
Out, ScratchRecord, AbbrCodes[SwiftSourceModuleDetailsLayout::Code],
@@ -1732,20 +1736,14 @@ void ModuleDependenciesCacheSerializer::collectStringsAndArrays(
1732
1736
for (auto kind = ModuleDependencyKind::FirstKind;
1733
1737
kind != ModuleDependencyKind::LastKind; ++kind) {
1734
1738
auto modMap = cache.getDependenciesMap (kind);
1735
- for (const auto &entry : modMap) {
1736
- ModuleDependencyID moduleID = {entry.getKey (). str (), kind};
1739
+ for (const auto &entry : modMap. keys () ) {
1740
+ ModuleDependencyID moduleID = {entry.str (), kind};
1737
1741
auto optionalDependencyInfo = cache.findDependency (moduleID);
1738
- assert (optionalDependencyInfo. has_value () && " Expected dependency info." );
1739
- auto dependencyInfo = optionalDependencyInfo. value () ;
1742
+ assert (optionalDependencyInfo && " Expected dependency info." );
1743
+ auto dependencyInfo = * optionalDependencyInfo;
1740
1744
// Add the module's name
1741
1745
addIdentifier (moduleID.ModuleName );
1742
1746
1743
- // Map import infos to their respective module identifiers
1744
- auto importInfoArrayToIdentifier =
1745
- [](const auto &importInfo) -> std::string {
1746
- return importInfo.importIdentifier ;
1747
- };
1748
-
1749
1747
for (const auto &ll : dependencyInfo->getLinkLibraries ())
1750
1748
addIdentifier (ll.getName ().str ());
1751
1749
@@ -1754,22 +1752,18 @@ void ModuleDependenciesCacheSerializer::collectStringsAndArrays(
1754
1752
addIdentifier (md.second .LibraryPath );
1755
1753
addIdentifier (md.second .ExecutablePath );
1756
1754
}
1755
+
1756
+ for (const auto &ii : dependencyInfo->getModuleImports ()) {
1757
+ addIdentifier (ii.importIdentifier );
1758
+ for (const auto &il : ii.importLocations )
1759
+ addIdentifier (il.bufferIdentifier );
1760
+ }
1757
1761
1758
- // Add the module's imports
1759
- std::vector<std::string> importIdentifiers;
1760
- llvm::transform (dependencyInfo->getModuleImports (),
1761
- std::back_inserter (importIdentifiers),
1762
- importInfoArrayToIdentifier);
1763
- std::vector<std::string> optionalImportIdentifiers;
1764
- llvm::transform (dependencyInfo->getOptionalModuleImports (),
1765
- std::back_inserter (optionalImportIdentifiers),
1766
- importInfoArrayToIdentifier);
1767
-
1768
- addStringArray (moduleID, ModuleIdentifierArrayKind::DependencyImports,
1769
- importIdentifiers);
1770
- addStringArray (moduleID,
1771
- ModuleIdentifierArrayKind::OptionalDependencyImports,
1772
- optionalImportIdentifiers);
1762
+ for (const auto &oii : dependencyInfo->getOptionalModuleImports ()) {
1763
+ addIdentifier (oii.importIdentifier );
1764
+ for (const auto &oil : oii.importLocations )
1765
+ addIdentifier (oil.bufferIdentifier );
1766
+ }
1773
1767
1774
1768
addDependencyIDArray (
1775
1769
moduleID, ModuleIdentifierArrayKind::ImportedSwiftDependenciesIDs,
@@ -1806,9 +1800,9 @@ void ModuleDependenciesCacheSerializer::collectStringsAndArrays(
1806
1800
addStringArray (moduleID, ModuleIdentifierArrayKind::BuildCommandLine,
1807
1801
swiftTextDeps->textualModuleDetails .buildCommandLine );
1808
1802
addIdentifier (swiftTextDeps->contextHash );
1809
- if (swiftTextDeps->textualModuleDetails .bridgingHeaderFile . has_value () )
1803
+ if (swiftTextDeps->textualModuleDetails .bridgingHeaderFile )
1810
1804
addIdentifier (
1811
- swiftTextDeps->textualModuleDetails .bridgingHeaderFile . value ( ));
1805
+ *( swiftTextDeps->textualModuleDetails .bridgingHeaderFile ));
1812
1806
addStringArray (moduleID, ModuleIdentifierArrayKind::SourceFiles,
1813
1807
std::vector<std::string>());
1814
1808
addStringArray (moduleID, ModuleIdentifierArrayKind::BridgingSourceFiles,
@@ -1855,10 +1849,9 @@ void ModuleDependenciesCacheSerializer::collectStringsAndArrays(
1855
1849
case swift::ModuleDependencyKind::SwiftSource: {
1856
1850
auto swiftSourceDeps = dependencyInfo->getAsSwiftSourceModule ();
1857
1851
assert (swiftSourceDeps);
1858
- if (swiftSourceDeps->textualModuleDetails .bridgingHeaderFile
1859
- .has_value ())
1852
+ if (swiftSourceDeps->textualModuleDetails .bridgingHeaderFile )
1860
1853
addIdentifier (
1861
- swiftSourceDeps->textualModuleDetails .bridgingHeaderFile . value ( ));
1854
+ *( swiftSourceDeps->textualModuleDetails .bridgingHeaderFile ));
1862
1855
addStringArray (moduleID, ModuleIdentifierArrayKind::SourceFiles,
1863
1856
swiftSourceDeps->sourceFiles );
1864
1857
addStringArray (
0 commit comments