@@ -155,6 +155,7 @@ bool ModuleDependenciesCacheDeserializer::readGraph(SwiftDependencyScanningServi
155155 std::string currentModuleName;
156156 unsigned currentContextHashID;
157157 llvm::Optional<std::vector<std::string>> currentModuleImports;
158+ llvm::Optional<std::vector<std::string>> currentOptionalModuleImports;
158159 llvm::Optional<std::vector<ModuleDependencyID>> currentModuleDependencyIDs;
159160
160161 auto getContextHash = [&]() {
@@ -212,19 +213,24 @@ bool ModuleDependenciesCacheDeserializer::readGraph(SwiftDependencyScanningServi
212213 case MODULE_NODE: {
213214 hasCurrentModule = true ;
214215 unsigned moduleNameID, contextHashID,
215- moduleImportsArrayID, moduleDependencyIDArrayID;
216+ moduleImportsArrayID, optionalModuleImportsArrayID,
217+ moduleDependencyIDArrayID;
216218 ModuleInfoLayout::readRecord (Scratch, moduleNameID, contextHashID,
217219 moduleImportsArrayID,
220+ optionalModuleImportsArrayID,
218221 moduleDependencyIDArrayID);
219222 auto moduleName = getIdentifier (moduleNameID);
220223 if (!moduleName)
221224 llvm::report_fatal_error (" Bad module name" );
222225 currentModuleName = *moduleName;
223226 currentContextHashID = contextHashID;
224227 currentModuleImports = getStringArray (moduleImportsArrayID);
228+ currentOptionalModuleImports = getStringArray (optionalModuleImportsArrayID);
225229 currentModuleDependencyIDs = getModuleDependencyIDArray (moduleDependencyIDArrayID);
226230 if (!currentModuleImports)
227231 llvm::report_fatal_error (" Bad direct dependencies: no imports" );
232+ if (!currentOptionalModuleImports)
233+ llvm::report_fatal_error (" Bad direct dependencies: no optional imports" );
228234 if (!currentModuleDependencyIDs)
229235 llvm::report_fatal_error (" Bad direct dependencies: no qualified dependencies" );
230236 break ;
@@ -296,6 +302,9 @@ bool ModuleDependenciesCacheDeserializer::readGraph(SwiftDependencyScanningServi
296302 // Add imports of this module
297303 for (const auto &moduleName : *currentModuleImports)
298304 moduleDep.addModuleImport (moduleName);
305+ // Add optional imports of this module
306+ for (const auto &moduleName : *currentOptionalModuleImports)
307+ moduleDep.addOptionalModuleImport (moduleName);
299308
300309 // Add qualified dependencies of this module
301310 moduleDep.resolveDirectDependencies (*currentModuleDependencyIDs);
@@ -404,6 +413,9 @@ bool ModuleDependenciesCacheDeserializer::readGraph(SwiftDependencyScanningServi
404413 // Add dependencies of this module
405414 for (const auto &moduleName : *currentModuleImports)
406415 moduleDep.addModuleImport (moduleName);
416+ // Add optional imports of this module
417+ for (const auto &moduleName : *currentOptionalModuleImports)
418+ moduleDep.addOptionalModuleImport (moduleName);
407419
408420 // Add bridging header file path
409421 if (bridgingHeaderFileID != 0 ) {
@@ -488,8 +500,8 @@ bool ModuleDependenciesCacheDeserializer::readGraph(SwiftDependencyScanningServi
488500 // Form the dependencies storage object
489501 auto moduleDep = ModuleDependencyInfo::forSwiftBinaryModule (
490502 *compiledModulePath, *moduleDocPath, *moduleSourceInfoPath,
491- *currentModuleImports, *headerImports, isFramework ,
492- *moduleCacheKey);
503+ *currentModuleImports, *currentOptionalModuleImports ,
504+ *headerImports, isFramework, * moduleCacheKey);
493505
494506 cache.recordDependency (currentModuleName, std::move (moduleDep),
495507 getContextHash ());
@@ -523,6 +535,9 @@ bool ModuleDependenciesCacheDeserializer::readGraph(SwiftDependencyScanningServi
523535 // Add dependencies of this module
524536 for (const auto &moduleName : *currentModuleImports)
525537 moduleDep.addModuleImport (moduleName);
538+ // Add optional imports of this module
539+ for (const auto &moduleName : *currentOptionalModuleImports)
540+ moduleDep.addOptionalModuleImport (moduleName);
526541
527542 cache.recordDependency (currentModuleName, std::move (moduleDep),
528543 getContextHash ());
@@ -581,6 +596,9 @@ bool ModuleDependenciesCacheDeserializer::readGraph(SwiftDependencyScanningServi
581596 // Add dependencies of this module
582597 for (const auto &moduleName : *currentModuleImports)
583598 moduleDep.addModuleImport (moduleName);
599+ // Add optional imports of this module
600+ for (const auto &moduleName : *currentOptionalModuleImports)
601+ moduleDep.addOptionalModuleImport (moduleName);
584602
585603 cache.recordDependency (currentModuleName, std::move (moduleDep),
586604 getContextHash ());
@@ -707,6 +725,7 @@ bool swift::dependencies::module_dependency_cache_serialization::
707725enum ModuleIdentifierArrayKind : uint8_t {
708726 Empty = 0 ,
709727 DependencyImports,
728+ OptionalDependencyImports,
710729 DependencyHeaders,
711730 QualifiedModuleDependencyIDs,
712731 CompiledModuleCandidates,
@@ -904,6 +923,7 @@ void ModuleDependenciesCacheSerializer::writeModuleInfo(
904923 Out, ScratchRecord, AbbrCodes[ModuleInfoLayout::Code],
905924 getIdentifier (moduleID.first ), contextHashStrID,
906925 getArrayID (moduleID, ModuleIdentifierArrayKind::DependencyImports),
926+ getArrayID (moduleID, ModuleIdentifierArrayKind::OptionalDependencyImports),
907927 getArrayID (moduleID, ModuleIdentifierArrayKind::QualifiedModuleDependencyIDs));
908928
909929 switch (dependencyInfo.getKind ()) {
@@ -1112,6 +1132,8 @@ void ModuleDependenciesCacheSerializer::collectStringsAndArrays(
11121132 // Add the module's dependencies
11131133 addStringArray (moduleID, ModuleIdentifierArrayKind::DependencyImports,
11141134 dependencyInfo->getModuleImports ());
1135+ addStringArray (moduleID, ModuleIdentifierArrayKind::OptionalDependencyImports,
1136+ dependencyInfo->getOptionalModuleImports ());
11151137 addDependencyIDArray (
11161138 moduleID, ModuleIdentifierArrayKind::QualifiedModuleDependencyIDs,
11171139 dependencyInfo->getDirectModuleDependencies ());
0 commit comments