@@ -155,6 +155,7 @@ bool ModuleDependenciesCacheDeserializer::readGraph(SwiftDependencyScanningServi
155
155
std::string currentModuleName;
156
156
unsigned currentContextHashID;
157
157
llvm::Optional<std::vector<std::string>> currentModuleImports;
158
+ llvm::Optional<std::vector<std::string>> currentOptionalModuleImports;
158
159
llvm::Optional<std::vector<ModuleDependencyID>> currentModuleDependencyIDs;
159
160
160
161
auto getContextHash = [&]() {
@@ -212,19 +213,24 @@ bool ModuleDependenciesCacheDeserializer::readGraph(SwiftDependencyScanningServi
212
213
case MODULE_NODE: {
213
214
hasCurrentModule = true ;
214
215
unsigned moduleNameID, contextHashID,
215
- moduleImportsArrayID, moduleDependencyIDArrayID;
216
+ moduleImportsArrayID, optionalModuleImportsArrayID,
217
+ moduleDependencyIDArrayID;
216
218
ModuleInfoLayout::readRecord (Scratch, moduleNameID, contextHashID,
217
219
moduleImportsArrayID,
220
+ optionalModuleImportsArrayID,
218
221
moduleDependencyIDArrayID);
219
222
auto moduleName = getIdentifier (moduleNameID);
220
223
if (!moduleName)
221
224
llvm::report_fatal_error (" Bad module name" );
222
225
currentModuleName = *moduleName;
223
226
currentContextHashID = contextHashID;
224
227
currentModuleImports = getStringArray (moduleImportsArrayID);
228
+ currentOptionalModuleImports = getStringArray (optionalModuleImportsArrayID);
225
229
currentModuleDependencyIDs = getModuleDependencyIDArray (moduleDependencyIDArrayID);
226
230
if (!currentModuleImports)
227
231
llvm::report_fatal_error (" Bad direct dependencies: no imports" );
232
+ if (!currentOptionalModuleImports)
233
+ llvm::report_fatal_error (" Bad direct dependencies: no optional imports" );
228
234
if (!currentModuleDependencyIDs)
229
235
llvm::report_fatal_error (" Bad direct dependencies: no qualified dependencies" );
230
236
break ;
@@ -296,6 +302,9 @@ bool ModuleDependenciesCacheDeserializer::readGraph(SwiftDependencyScanningServi
296
302
// Add imports of this module
297
303
for (const auto &moduleName : *currentModuleImports)
298
304
moduleDep.addModuleImport (moduleName);
305
+ // Add optional imports of this module
306
+ for (const auto &moduleName : *currentOptionalModuleImports)
307
+ moduleDep.addOptionalModuleImport (moduleName);
299
308
300
309
// Add qualified dependencies of this module
301
310
moduleDep.resolveDirectDependencies (*currentModuleDependencyIDs);
@@ -404,6 +413,9 @@ bool ModuleDependenciesCacheDeserializer::readGraph(SwiftDependencyScanningServi
404
413
// Add dependencies of this module
405
414
for (const auto &moduleName : *currentModuleImports)
406
415
moduleDep.addModuleImport (moduleName);
416
+ // Add optional imports of this module
417
+ for (const auto &moduleName : *currentOptionalModuleImports)
418
+ moduleDep.addOptionalModuleImport (moduleName);
407
419
408
420
// Add bridging header file path
409
421
if (bridgingHeaderFileID != 0 ) {
@@ -488,8 +500,8 @@ bool ModuleDependenciesCacheDeserializer::readGraph(SwiftDependencyScanningServi
488
500
// Form the dependencies storage object
489
501
auto moduleDep = ModuleDependencyInfo::forSwiftBinaryModule (
490
502
*compiledModulePath, *moduleDocPath, *moduleSourceInfoPath,
491
- *currentModuleImports, *headerImports, isFramework ,
492
- *moduleCacheKey);
503
+ *currentModuleImports, *currentOptionalModuleImports ,
504
+ *headerImports, isFramework, * moduleCacheKey);
493
505
494
506
cache.recordDependency (currentModuleName, std::move (moduleDep),
495
507
getContextHash ());
@@ -523,6 +535,9 @@ bool ModuleDependenciesCacheDeserializer::readGraph(SwiftDependencyScanningServi
523
535
// Add dependencies of this module
524
536
for (const auto &moduleName : *currentModuleImports)
525
537
moduleDep.addModuleImport (moduleName);
538
+ // Add optional imports of this module
539
+ for (const auto &moduleName : *currentOptionalModuleImports)
540
+ moduleDep.addOptionalModuleImport (moduleName);
526
541
527
542
cache.recordDependency (currentModuleName, std::move (moduleDep),
528
543
getContextHash ());
@@ -581,6 +596,9 @@ bool ModuleDependenciesCacheDeserializer::readGraph(SwiftDependencyScanningServi
581
596
// Add dependencies of this module
582
597
for (const auto &moduleName : *currentModuleImports)
583
598
moduleDep.addModuleImport (moduleName);
599
+ // Add optional imports of this module
600
+ for (const auto &moduleName : *currentOptionalModuleImports)
601
+ moduleDep.addOptionalModuleImport (moduleName);
584
602
585
603
cache.recordDependency (currentModuleName, std::move (moduleDep),
586
604
getContextHash ());
@@ -707,6 +725,7 @@ bool swift::dependencies::module_dependency_cache_serialization::
707
725
enum ModuleIdentifierArrayKind : uint8_t {
708
726
Empty = 0 ,
709
727
DependencyImports,
728
+ OptionalDependencyImports,
710
729
DependencyHeaders,
711
730
QualifiedModuleDependencyIDs,
712
731
CompiledModuleCandidates,
@@ -904,6 +923,7 @@ void ModuleDependenciesCacheSerializer::writeModuleInfo(
904
923
Out, ScratchRecord, AbbrCodes[ModuleInfoLayout::Code],
905
924
getIdentifier (moduleID.first ), contextHashStrID,
906
925
getArrayID (moduleID, ModuleIdentifierArrayKind::DependencyImports),
926
+ getArrayID (moduleID, ModuleIdentifierArrayKind::OptionalDependencyImports),
907
927
getArrayID (moduleID, ModuleIdentifierArrayKind::QualifiedModuleDependencyIDs));
908
928
909
929
switch (dependencyInfo.getKind ()) {
@@ -1112,6 +1132,8 @@ void ModuleDependenciesCacheSerializer::collectStringsAndArrays(
1112
1132
// Add the module's dependencies
1113
1133
addStringArray (moduleID, ModuleIdentifierArrayKind::DependencyImports,
1114
1134
dependencyInfo->getModuleImports ());
1135
+ addStringArray (moduleID, ModuleIdentifierArrayKind::OptionalDependencyImports,
1136
+ dependencyInfo->getOptionalModuleImports ());
1115
1137
addDependencyIDArray (
1116
1138
moduleID, ModuleIdentifierArrayKind::QualifiedModuleDependencyIDs,
1117
1139
dependencyInfo->getDirectModuleDependencies ());
0 commit comments