Skip to content

Commit d7cd65c

Browse files
committed
[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.
1 parent e010d7d commit d7cd65c

File tree

2 files changed

+5
-2
lines changed

2 files changed

+5
-2
lines changed

Diff for: lib/AST/Module.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -2124,7 +2124,7 @@ SourceFile::getImportedModules(SmallVectorImpl<ImportedModule> &modules,
21242124
else if (desc.options.contains(ImportFlags::ImplementationOnly) ||
21252125
(desc.accessLevel <= AccessLevel::Internal && moduleIsResilient))
21262126
requiredFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
2127-
else if (desc.accessLevel <= AccessLevel::Package && moduleIsResilient)
2127+
else if (desc.accessLevel <= AccessLevel::Package)
21282128
requiredFilter |= ModuleDecl::ImportFilterKind::PackageOnly;
21292129
else if (desc.options.contains(ImportFlags::SPIOnly))
21302130
requiredFilter |= ModuleDecl::ImportFilterKind::SPIOnly;

Diff for: lib/Serialization/ModuleFileSharedCore.cpp

+4-1
Original file line numberDiff line numberDiff line change
@@ -1694,6 +1694,8 @@ ModuleFileSharedCore::getTransitiveLoadingBehavior(
16941694
return ModuleLoadingBehavior::Required;
16951695
}
16961696

1697+
bool moduleIsResilient = getResilienceStrategy() ==
1698+
ResilienceStrategy::Resilient;
16971699
if (dependency.isImplementationOnly()) {
16981700
// Implementation-only dependencies are not usually loaded from
16991701
// transitive imports.
@@ -1712,7 +1714,8 @@ ModuleFileSharedCore::getTransitiveLoadingBehavior(
17121714
if (dependency.isPackageOnly()) {
17131715
// Package dependencies are usually loaded only for import from the same
17141716
// package.
1715-
if (!packageName.empty() && packageName == getModulePackageName()) {
1717+
if ((!packageName.empty() && packageName == getModulePackageName()) ||
1718+
!moduleIsResilient) {
17161719
return ModuleLoadingBehavior::Required;
17171720
} else if (debuggerMode) {
17181721
return ModuleLoadingBehavior::Optional;

0 commit comments

Comments
 (0)