@@ -218,9 +218,6 @@ bool ModuleDependenciesCacheDeserializer::readGraph(
218218
219219 bool hasCurrentModule = false ;
220220 std::string currentModuleName;
221- std::vector<ScannerImportStatementInfo> currentModuleImports;
222- std::vector<ScannerImportStatementInfo> currentOptionalModuleImports;
223-
224221 std::vector<ModuleDependencyID> importedSwiftDependenciesIDs;
225222 std::vector<ModuleDependencyID> importedClangDependenciesIDs;
226223 std::vector<ModuleDependencyID> crossImportOverlayDependenciesIDs;
@@ -235,18 +232,8 @@ bool ModuleDependenciesCacheDeserializer::readGraph(
235232 std::vector<std::string> auxiliaryFiles;
236233
237234 auto addCommonDependencyInfo =
238- [¤tModuleImports, ¤tOptionalModuleImports,
239- &importedClangDependenciesIDs, &auxiliaryFiles,
235+ [&importedClangDependenciesIDs, &auxiliaryFiles,
240236 ¯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-
250237 // Add qualified dependencies of this module
251238 moduleDep.setImportedClangDependencies (importedClangDependenciesIDs);
252239
@@ -297,7 +284,7 @@ bool ModuleDependenciesCacheDeserializer::readGraph(
297284 llvm::report_fatal_error (" Bad bridging module dependencies" );
298285 llvm::StringSet<> alreadyAdded;
299286 std::vector<ModuleDependencyID> bridgingModuleDepIDs;
300- for (const auto &mod : bridgingModuleDeps. value () )
287+ for (const auto &mod : * bridgingModuleDeps)
301288 bridgingModuleDepIDs.push_back (
302289 ModuleDependencyID{mod, ModuleDependencyKind::Clang});
303290 moduleDep.setHeaderClangDependencies (bridgingModuleDepIDs);
@@ -364,7 +351,7 @@ bool ModuleDependenciesCacheDeserializer::readGraph(
364351 llvm::report_fatal_error (" Bad link library identifier" );
365352
366353 LinkLibraries.emplace_back (
367- libraryIdentifier. value () ,
354+ * libraryIdentifier,
368355 isFramework ? LibraryKind::Framework
369356 : LibraryKind::Library,
370357 isStatic, shouldForceLoad);
@@ -395,8 +382,8 @@ bool ModuleDependenciesCacheDeserializer::readGraph(
395382 llvm::report_fatal_error (" Bad macro dependency: no executable path" );
396383
397384 MacroDependencies.push_back (
398- {macroModuleName. value () ,
399- MacroPluginDependency{libraryPath. value (), executablePath. value () }});
385+ {* macroModuleName,
386+ MacroPluginDependency{* libraryPath, * executablePath}});
400387 break ;
401388 }
402389
@@ -422,10 +409,14 @@ bool ModuleDependenciesCacheDeserializer::readGraph(
422409 if (!bufferIdentifier)
423410 llvm::report_fatal_error (
424411 " 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)));
429420 break ;
430421 }
431422
@@ -470,18 +461,16 @@ bool ModuleDependenciesCacheDeserializer::readGraph(
470461 getImportStatementInfoArray (moduleImportsArrayID);
471462 if (!optionalImportStatementInfos)
472463 llvm::report_fatal_error (" Bad direct Swift dependencies: no imports" );
473- importStatements = optionalImportStatementInfos. value () ;
464+ importStatements = * optionalImportStatementInfos;
474465
475466 auto optionalOptionalImportStatementInfos =
476467 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;
481470
482471 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)
485474 auxiliaryFiles.push_back (af);
486475
487476 auto optionalImportedSwiftDependenciesIDs =
@@ -490,30 +479,30 @@ bool ModuleDependenciesCacheDeserializer::readGraph(
490479 llvm::report_fatal_error (
491480 " Bad direct Swift dependencies: no qualified dependencies" );
492481 importedSwiftDependenciesIDs =
493- optionalImportedSwiftDependenciesIDs. value () ;
482+ * optionalImportedSwiftDependenciesIDs;
494483
495484 auto optionalImportedClangDependenciesIDs =
496485 getModuleDependencyIDArray (importedClangDependenciesIDsArrayID);
497486 if (!optionalImportedClangDependenciesIDs)
498487 llvm::report_fatal_error (
499488 " Bad direct Clang dependencies: no qualified dependencies" );
500489 importedClangDependenciesIDs =
501- optionalImportedClangDependenciesIDs. value () ;
490+ * optionalImportedClangDependenciesIDs;
502491
503492 auto optionalCrossImportOverlayDependenciesIDs =
504493 getModuleDependencyIDArray (crossImportOverlayDependenciesIDsArrayID);
505494 if (!optionalCrossImportOverlayDependenciesIDs)
506495 llvm::report_fatal_error (
507496 " Bad Cross-Import Overlay dependencies: no qualified dependencies" );
508497 crossImportOverlayDependenciesIDs =
509- optionalCrossImportOverlayDependenciesIDs. value () ;
498+ * optionalCrossImportOverlayDependenciesIDs;
510499
511500 auto optionalSwiftOverlayDependenciesIDs =
512501 getModuleDependencyIDArray (swiftOverlayDependenciesIDsArrayID);
513502 if (!optionalSwiftOverlayDependenciesIDs)
514503 llvm::report_fatal_error (
515504 " Bad Swift Overlay dependencies: no qualified dependencies" );
516- swiftOverlayDependenciesIDs = optionalSwiftOverlayDependenciesIDs. value () ;
505+ swiftOverlayDependenciesIDs = * optionalSwiftOverlayDependenciesIDs;
517506
518507 auto optionalLinkLibraries = getLinkLibraryArray (linkLibraryArrayID);
519508 if (!optionalLinkLibraries)
@@ -587,7 +576,7 @@ bool ModuleDependenciesCacheDeserializer::readGraph(
587576
588577 // Form the dependencies storage object
589578 auto moduleDep = ModuleDependencyInfo::forSwiftInterfaceModule (
590- optionalSwiftInterfaceFile. value () , compiledCandidatesRefs,
579+ * optionalSwiftInterfaceFile, compiledCandidatesRefs,
591580 buildCommandRefs, importStatements, optionalImportStatements,
592581 linkLibraries, isFramework, isStatic, *rootFileSystemID,
593582 *moduleCacheKey, *userModuleVersion);
@@ -711,7 +700,7 @@ bool ModuleDependenciesCacheDeserializer::readGraph(
711700 // Form the dependencies storage object
712701 auto moduleDep = ModuleDependencyInfo::forSwiftBinaryModule (
713702 *compiledModulePath, *moduleDocPath, *moduleSourceInfoPath,
714- currentModuleImports, currentOptionalModuleImports , linkLibraries,
703+ importStatements, optionalImportStatements , linkLibraries,
715704 *headerImport, *definingInterfacePath, isFramework, isStatic,
716705 *moduleCacheKey, *userModuleVersion);
717706
@@ -984,7 +973,7 @@ ModuleDependenciesCacheDeserializer::getOptionalImportStatementInfoArray(
984973std::optional<std::vector<ModuleDependencyID>>
985974ModuleDependenciesCacheDeserializer::getModuleDependencyIDArray (unsigned n) {
986975 auto encodedIdentifierStringArray = getStringArray (n);
987- if (encodedIdentifierStringArray. has_value () ) {
976+ if (encodedIdentifierStringArray) {
988977 static const std::string textualPrefix (" swiftTextual" );
989978 static const std::string binaryPrefix (" swiftBinary" );
990979 static const std::string placeholderPrefix (" swiftPlaceholder" );
@@ -1288,8 +1277,8 @@ void ModuleDependenciesCacheSerializer::writeLinkLibraries(
12881277 for (const auto &entry : modMap) {
12891278 ModuleDependencyID moduleID = {entry.getKey ().str (), kind};
12901279 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;
12931282 unsigned numLLs = writeLinkLibraryInfos (*dependencyInfo);
12941283 moduleLLArrayMap.insert ({moduleID, std::make_pair (lastLLIndex, numLLs)});
12951284 lastLLIndex += numLLs;
@@ -1343,8 +1332,8 @@ void ModuleDependenciesCacheSerializer::writeMacroDependencies(
13431332 for (const auto &entry : modMap) {
13441333 ModuleDependencyID moduleID = {entry.getKey ().str (), kind};
13451334 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;
13481337 unsigned numMDs = writeMacroDependencies (*dependencyInfo);
13491338 moduleMacroDepArrayMap.insert (
13501339 {moduleID, std::make_pair (lastMDIndex, numMDs)});
@@ -1399,11 +1388,11 @@ void ModuleDependenciesCacheSerializer::writeImportStatementInfos(
13991388 for (auto kind = ModuleDependencyKind::FirstKind;
14001389 kind != ModuleDependencyKind::LastKind; ++kind) {
14011390 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};
14041393 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;
14071396
14081397 auto numImportInfos =
14091398 writeImportStatementInfos (*dependencyInfo, /* optional */ false );
@@ -1414,22 +1403,28 @@ void ModuleDependenciesCacheSerializer::writeImportStatementInfos(
14141403 auto numOptionalImportInfos =
14151404 writeImportStatementInfos (*dependencyInfo, /* optional */ true );
14161405 optionalImportInfoArrayMap.insert (
1417- {moduleID, std::make_pair (lastImportInfoIndex, numImportInfos )});
1406+ {moduleID, std::make_pair (lastImportInfoIndex, numOptionalImportInfos )});
14181407 lastImportInfoIndex += numOptionalImportInfos;
14191408 }
14201409 }
14211410
14221411 unsigned lastImportInfoArrayIndex = 1 ;
1412+ unsigned lastOptionalImportInfoArrayIndex = 1 ;
14231413 for (auto kind = ModuleDependencyKind::FirstKind;
14241414 kind != ModuleDependencyKind::LastKind; ++kind) {
14251415 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};
14281418 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+ }
14331428 }
14341429 }
14351430}
@@ -1440,22 +1435,31 @@ unsigned ModuleDependenciesCacheSerializer::writeImportStatementInfos(
14401435 size_t count = 0 ;
14411436 auto emitImportStatementInfo = [this , &count](const auto &importInfo,
14421437 bool isOptional) {
1443- for ( auto &importLoc : importInfo.importLocations ) {
1438+ if ( importInfo.importLocations . empty () ) {
14441439 ImportStatementLayout::emitRecord (
14451440 Out, ScratchRecord, AbbrCodes[ImportStatementLayout::Code],
14461441 getIdentifier (importInfo.importIdentifier ),
1447- getIdentifier (importLoc.bufferIdentifier ), importLoc.lineNumber ,
1448- importLoc.columnNumber , isOptional, importInfo.isExported );
1442+ 0 , 0 , 0 , isOptional, importInfo.isExported );
14491443 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+ }
14501453 }
14511454 };
14521455
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+ }
14591463 return count;
14601464}
14611465
@@ -1500,8 +1504,8 @@ void ModuleDependenciesCacheSerializer::writeModuleInfo(
15001504 getIdentifier (swiftTextDeps->swiftInterfaceFile );
15011505 unsigned bridgingHeaderFileId =
15021506 swiftTextDeps->textualModuleDetails .bridgingHeaderFile
1503- ? getIdentifier (swiftTextDeps->textualModuleDetails
1504- .bridgingHeaderFile . value ( ))
1507+ ? getIdentifier (*( swiftTextDeps->textualModuleDetails
1508+ .bridgingHeaderFile ))
15051509 : 0 ;
15061510 SwiftInterfaceModuleDetailsLayout::emitRecord (
15071511 Out, ScratchRecord, AbbrCodes[SwiftInterfaceModuleDetailsLayout::Code],
@@ -1529,8 +1533,8 @@ void ModuleDependenciesCacheSerializer::writeModuleInfo(
15291533 assert (swiftSourceDeps);
15301534 unsigned bridgingHeaderFileId =
15311535 swiftSourceDeps->textualModuleDetails .bridgingHeaderFile
1532- ? getIdentifier (swiftSourceDeps->textualModuleDetails
1533- .bridgingHeaderFile . value ( ))
1536+ ? getIdentifier (*( swiftSourceDeps->textualModuleDetails
1537+ .bridgingHeaderFile ))
15341538 : 0 ;
15351539 SwiftSourceModuleDetailsLayout::emitRecord (
15361540 Out, ScratchRecord, AbbrCodes[SwiftSourceModuleDetailsLayout::Code],
@@ -1732,20 +1736,14 @@ void ModuleDependenciesCacheSerializer::collectStringsAndArrays(
17321736 for (auto kind = ModuleDependencyKind::FirstKind;
17331737 kind != ModuleDependencyKind::LastKind; ++kind) {
17341738 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};
17371741 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;
17401744 // Add the module's name
17411745 addIdentifier (moduleID.ModuleName );
17421746
1743- // Map import infos to their respective module identifiers
1744- auto importInfoArrayToIdentifier =
1745- [](const auto &importInfo) -> std::string {
1746- return importInfo.importIdentifier ;
1747- };
1748-
17491747 for (const auto &ll : dependencyInfo->getLinkLibraries ())
17501748 addIdentifier (ll.getName ().str ());
17511749
@@ -1754,22 +1752,18 @@ void ModuleDependenciesCacheSerializer::collectStringsAndArrays(
17541752 addIdentifier (md.second .LibraryPath );
17551753 addIdentifier (md.second .ExecutablePath );
17561754 }
1755+
1756+ for (const auto &ii : dependencyInfo->getModuleImports ()) {
1757+ addIdentifier (ii.importIdentifier );
1758+ for (const auto &il : ii.importLocations )
1759+ addIdentifier (il.bufferIdentifier );
1760+ }
17571761
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+ }
17731767
17741768 addDependencyIDArray (
17751769 moduleID, ModuleIdentifierArrayKind::ImportedSwiftDependenciesIDs,
@@ -1806,9 +1800,9 @@ void ModuleDependenciesCacheSerializer::collectStringsAndArrays(
18061800 addStringArray (moduleID, ModuleIdentifierArrayKind::BuildCommandLine,
18071801 swiftTextDeps->textualModuleDetails .buildCommandLine );
18081802 addIdentifier (swiftTextDeps->contextHash );
1809- if (swiftTextDeps->textualModuleDetails .bridgingHeaderFile . has_value () )
1803+ if (swiftTextDeps->textualModuleDetails .bridgingHeaderFile )
18101804 addIdentifier (
1811- swiftTextDeps->textualModuleDetails .bridgingHeaderFile . value ( ));
1805+ *( swiftTextDeps->textualModuleDetails .bridgingHeaderFile ));
18121806 addStringArray (moduleID, ModuleIdentifierArrayKind::SourceFiles,
18131807 std::vector<std::string>());
18141808 addStringArray (moduleID, ModuleIdentifierArrayKind::BridgingSourceFiles,
@@ -1855,10 +1849,9 @@ void ModuleDependenciesCacheSerializer::collectStringsAndArrays(
18551849 case swift::ModuleDependencyKind::SwiftSource: {
18561850 auto swiftSourceDeps = dependencyInfo->getAsSwiftSourceModule ();
18571851 assert (swiftSourceDeps);
1858- if (swiftSourceDeps->textualModuleDetails .bridgingHeaderFile
1859- .has_value ())
1852+ if (swiftSourceDeps->textualModuleDetails .bridgingHeaderFile )
18601853 addIdentifier (
1861- swiftSourceDeps->textualModuleDetails .bridgingHeaderFile . value ( ));
1854+ *( swiftSourceDeps->textualModuleDetails .bridgingHeaderFile ));
18621855 addStringArray (moduleID, ModuleIdentifierArrayKind::SourceFiles,
18631856 swiftSourceDeps->sourceFiles );
18641857 addStringArray (
0 commit comments