Skip to content

Commit 9f9450b

Browse files
committed
Expose a ImportPrivateDependencies LangOpt for LLDB (NFC).
This patch allows controlling the automatic import of private dependencies separately from the DebuggerSupport option, which currently also triggers this behavior. With explicit modules + precise compiler invocations LLDB is moving towards no longer needing this behavior. rdar://133088201
1 parent 7cf82b7 commit 9f9450b

File tree

5 files changed

+14
-13
lines changed

5 files changed

+14
-13
lines changed

include/swift/Basic/LangOptions.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,9 @@ namespace swift {
267267
/// Enable features useful for running in the debugger.
268268
bool DebuggerSupport = false;
269269

270+
/// When set, the module loader will try to import private dependencies.
271+
bool ImportPrivateDependencies = false;
272+
270273
/// Enable the MemoryBufferSerializedModuleImporter.
271274
/// Only used by lldb-moduleimport-test.
272275
bool EnableMemoryBufferImporter = false;

lib/Serialization/ModuleFile.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -308,11 +308,9 @@ ModuleFile::getTransitiveLoadingBehavior(const Dependency &dependency,
308308
// as a partial module.
309309
auto isPartialModule = mod->isMainModule();
310310

311-
return Core->getTransitiveLoadingBehavior(dependency.Core,
312-
ctx.LangOpts.DebuggerSupport,
313-
isPartialModule,
314-
ctx.LangOpts.PackageName,
315-
forTestable);
311+
return Core->getTransitiveLoadingBehavior(
312+
dependency.Core, ctx.LangOpts.ImportPrivateDependencies, isPartialModule,
313+
ctx.LangOpts.PackageName, forTestable);
316314
}
317315

318316
bool ModuleFile::mayHaveDiagnosticsPointingAtBuffer() const {

lib/Serialization/ModuleFileSharedCore.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1789,7 +1789,7 @@ std::string ModuleFileSharedCore::resolveModuleDefiningFilePath(const StringRef
17891789
ModuleLoadingBehavior
17901790
ModuleFileSharedCore::getTransitiveLoadingBehavior(
17911791
const Dependency &dependency,
1792-
bool debuggerMode,
1792+
bool importPrivateDependencies,
17931793
bool isPartialModule,
17941794
StringRef packageName,
17951795
bool forTestable) const {
@@ -1805,7 +1805,7 @@ ModuleFileSharedCore::getTransitiveLoadingBehavior(
18051805
if (dependency.isImplementationOnly()) {
18061806
// Implementation-only dependencies are not usually loaded from
18071807
// transitive imports.
1808-
if (debuggerMode || forTestable) {
1808+
if (importPrivateDependencies || forTestable) {
18091809
// In the debugger, try to load the module if possible.
18101810
// Same in the case of a testable import, try to load the dependency
18111811
// but don't fail if it's missing as this could be source breaking.
@@ -1823,7 +1823,7 @@ ModuleFileSharedCore::getTransitiveLoadingBehavior(
18231823
// on testable imports.
18241824
if (forTestable || !moduleIsResilient) {
18251825
return ModuleLoadingBehavior::Required;
1826-
} else if (debuggerMode) {
1826+
} else if (importPrivateDependencies) {
18271827
return ModuleLoadingBehavior::Optional;
18281828
} else {
18291829
return ModuleLoadingBehavior::Ignored;
@@ -1837,7 +1837,7 @@ ModuleFileSharedCore::getTransitiveLoadingBehavior(
18371837
forTestable ||
18381838
!moduleIsResilient) {
18391839
return ModuleLoadingBehavior::Required;
1840-
} else if (debuggerMode) {
1840+
} else if (importPrivateDependencies) {
18411841
return ModuleLoadingBehavior::Optional;
18421842
} else {
18431843
return ModuleLoadingBehavior::Ignored;

lib/Serialization/ModuleFileSharedCore.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -624,8 +624,8 @@ class ModuleFileSharedCore {
624624

625625
/// How should \p dependency be loaded for a transitive import via \c this?
626626
///
627-
/// If \p debuggerMode, more transitive dependencies should try to be loaded
628-
/// as they can be useful in debugging.
627+
/// If \p importPrivateDependencies, more transitive dependencies
628+
/// should try to be loaded as they can be useful in debugging.
629629
///
630630
/// If \p isPartialModule, transitive dependencies should be loaded as we're
631631
/// in merge-module mode.
@@ -639,7 +639,7 @@ class ModuleFileSharedCore {
639639
/// those non-public dependencies.
640640
ModuleLoadingBehavior
641641
getTransitiveLoadingBehavior(const Dependency &dependency,
642-
bool debuggerMode,
642+
bool importPrivateDependencies,
643643
bool isPartialModule,
644644
StringRef packageName,
645645
bool forTestable) const;

lib/Serialization/SerializedModuleLoader.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -411,7 +411,7 @@ SerializedModuleLoaderBase::getImportsOfModule(
411411
ModuleLoadingBehavior dependencyTransitiveBehavior =
412412
loadedModuleFile.getTransitiveLoadingBehavior(
413413
dependency,
414-
/*debuggerMode*/ false,
414+
/*importPrivateDependencies*/ false,
415415
/*isPartialModule*/ false, packageName, isTestableImport);
416416
if (dependencyTransitiveBehavior > transitiveBehavior)
417417
continue;

0 commit comments

Comments
 (0)