mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
[Serialization] Move some package-only import logic from writer to reader
Let's centralize the logic deciding if we load a transitive dependency on the client side and have the producer write the truth in the swiftmodule.
This commit is contained in:
@@ -2124,7 +2124,7 @@ SourceFile::getImportedModules(SmallVectorImpl<ImportedModule> &modules,
|
|||||||
else if (desc.options.contains(ImportFlags::ImplementationOnly) ||
|
else if (desc.options.contains(ImportFlags::ImplementationOnly) ||
|
||||||
(desc.accessLevel <= AccessLevel::Internal && moduleIsResilient))
|
(desc.accessLevel <= AccessLevel::Internal && moduleIsResilient))
|
||||||
requiredFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
|
requiredFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
|
||||||
else if (desc.accessLevel <= AccessLevel::Package && moduleIsResilient)
|
else if (desc.accessLevel <= AccessLevel::Package)
|
||||||
requiredFilter |= ModuleDecl::ImportFilterKind::PackageOnly;
|
requiredFilter |= ModuleDecl::ImportFilterKind::PackageOnly;
|
||||||
else if (desc.options.contains(ImportFlags::SPIOnly))
|
else if (desc.options.contains(ImportFlags::SPIOnly))
|
||||||
requiredFilter |= ModuleDecl::ImportFilterKind::SPIOnly;
|
requiredFilter |= ModuleDecl::ImportFilterKind::SPIOnly;
|
||||||
|
|||||||
@@ -1694,6 +1694,8 @@ ModuleFileSharedCore::getTransitiveLoadingBehavior(
|
|||||||
return ModuleLoadingBehavior::Required;
|
return ModuleLoadingBehavior::Required;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool moduleIsResilient = getResilienceStrategy() ==
|
||||||
|
ResilienceStrategy::Resilient;
|
||||||
if (dependency.isImplementationOnly()) {
|
if (dependency.isImplementationOnly()) {
|
||||||
// Implementation-only dependencies are not usually loaded from
|
// Implementation-only dependencies are not usually loaded from
|
||||||
// transitive imports.
|
// transitive imports.
|
||||||
@@ -1712,7 +1714,8 @@ ModuleFileSharedCore::getTransitiveLoadingBehavior(
|
|||||||
if (dependency.isPackageOnly()) {
|
if (dependency.isPackageOnly()) {
|
||||||
// Package dependencies are usually loaded only for import from the same
|
// Package dependencies are usually loaded only for import from the same
|
||||||
// package.
|
// package.
|
||||||
if (!packageName.empty() && packageName == getModulePackageName()) {
|
if ((!packageName.empty() && packageName == getModulePackageName()) ||
|
||||||
|
!moduleIsResilient) {
|
||||||
return ModuleLoadingBehavior::Required;
|
return ModuleLoadingBehavior::Required;
|
||||||
} else if (debuggerMode) {
|
} else if (debuggerMode) {
|
||||||
return ModuleLoadingBehavior::Optional;
|
return ModuleLoadingBehavior::Optional;
|
||||||
|
|||||||
Reference in New Issue
Block a user