@@ -137,6 +137,10 @@ struct CommonSwiftTextualModuleDependencyDetails {
137
137
138
138
// / (Clang) modules on which the bridging header depends.
139
139
std::vector<std::string> bridgingModuleDependencies;
140
+
141
+ // / Dependencies comprised of Swift overlay modules of direct and
142
+ // / transitive Clang dependencies.
143
+ std::vector<ModuleDependencyID> swiftOverlayDependencies;
140
144
};
141
145
142
146
// / Describes the dependencies of a Swift module described by an Swift interface file.
@@ -450,12 +454,26 @@ class ModuleDependencyInfo {
450
454
}
451
455
452
456
// / Resolve a dependency's set of `imports` with qualified Module IDs
453
- void resolveDependencies (const std::vector <ModuleDependencyID> & dependencyIDs) {
457
+ void resolveDependencies (const ArrayRef <ModuleDependencyID> dependencyIDs) {
454
458
assert (!storage->resolved && " Resolving an already-resolved dependency" );
455
459
storage->resolved = true ;
456
460
storage->resolvedModuleDependencies .assign (dependencyIDs.begin (), dependencyIDs.end ());
457
461
}
458
462
463
+ // / Set this module's set of Swift Overlay dependencies
464
+ void setOverlayDependencies (const ArrayRef<ModuleDependencyID> dependencyIDs) {
465
+ assert (isSwiftSourceModule () || isSwiftInterfaceModule ());
466
+ CommonSwiftTextualModuleDependencyDetails *textualModuleDetails;
467
+ if (auto sourceDetailsStorage = dyn_cast<SwiftSourceModuleDependenciesStorage>(storage.get ())) {
468
+ textualModuleDetails = &sourceDetailsStorage->textualModuleDetails ;
469
+ } else if (auto interfaceDetailsStorage = dyn_cast<SwiftInterfaceModuleDependenciesStorage>(storage.get ())) {
470
+ textualModuleDetails = &interfaceDetailsStorage->textualModuleDetails ;
471
+ } else {
472
+ llvm_unreachable (" Unknown kind of dependency module info." );
473
+ }
474
+ textualModuleDetails->swiftOverlayDependencies .assign (dependencyIDs.begin (), dependencyIDs.end ());
475
+ }
476
+
459
477
void updateCommandLine (const std::vector<std::string> &newCommandLine) {
460
478
assert (isSwiftInterfaceModule () && " Can only update command line on Swift interface dependency" );
461
479
cast<SwiftInterfaceModuleDependenciesStorage>(storage.get ())->updateCommandLine (newCommandLine);
@@ -773,7 +791,12 @@ class ModuleDependenciesCache {
773
791
// / Resolve a dependency module's set of imports
774
792
// / to a kind-qualified set of module IDs.
775
793
void resolveDependencyImports (ModuleDependencyID moduleID,
776
- const std::vector<ModuleDependencyID> &dependencyIDs);
794
+ const ArrayRef<ModuleDependencyID> dependencyIDs);
795
+
796
+ // / Resolve a dependency module's set of Swift module dependencies
797
+ // / that are Swift overlays of Clang module dependencies.
798
+ void setSwiftOverlayDependencues (ModuleDependencyID moduleID,
799
+ const ArrayRef<ModuleDependencyID> dependencyIDs);
777
800
778
801
StringRef getMainModuleName () const {
779
802
return mainScanModuleName;
0 commit comments