mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
[NFC] Clarify semantics of getImportedModules.
The lack of clarity manifested as unexpected behavior when using getImportedModules to create the module import graph. The new behavior makes SPI-ness and Shadowing-ness behave similarly in terms of filtering. We also check if a filter is well-formed to avoid accidental empty import lists.
This commit is contained in:
@@ -1163,6 +1163,13 @@ void SourceFile::lookupPrecedenceGroupDirect(
|
||||
|
||||
void ModuleDecl::getImportedModules(SmallVectorImpl<ImportedModule> &modules,
|
||||
ModuleDecl::ImportFilter filter) const {
|
||||
assert(filter.containsAny(ImportFilter({
|
||||
ModuleDecl::ImportFilterKind::Exported,
|
||||
ModuleDecl::ImportFilterKind::Default,
|
||||
ModuleDecl::ImportFilterKind::ImplementationOnly}))
|
||||
&& "filter should have at least one of Exported|Private|ImplementationOnly"
|
||||
);
|
||||
|
||||
FORWARD(getImportedModules, (modules, filter));
|
||||
}
|
||||
|
||||
@@ -1187,11 +1194,12 @@ SourceFile::getImportedModules(SmallVectorImpl<ModuleDecl::ImportedModule> &modu
|
||||
requiredFilter |= ModuleDecl::ImportFilterKind::Exported;
|
||||
else if (desc.importOptions.contains(ImportFlags::ImplementationOnly))
|
||||
requiredFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
|
||||
else if (desc.importOptions.contains(ImportFlags::SPIAccessControl))
|
||||
requiredFilter |= ModuleDecl::ImportFilterKind::SPIAccessControl;
|
||||
else
|
||||
requiredFilter |= ModuleDecl::ImportFilterKind::Default;
|
||||
|
||||
if (desc.importOptions.contains(ImportFlags::SPIAccessControl))
|
||||
requiredFilter |= ModuleDecl::ImportFilterKind::SPIAccessControl;
|
||||
|
||||
if (!separatelyImportedOverlays.lookup(desc.module.importedModule).empty())
|
||||
requiredFilter |= ModuleDecl::ImportFilterKind::ShadowedByCrossImportOverlay;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user