diff --git a/include/swift/Serialization/SerializedModuleLoader.h b/include/swift/Serialization/SerializedModuleLoader.h index 5e1231640c8..184ae27e2ba 100644 --- a/include/swift/Serialization/SerializedModuleLoader.h +++ b/include/swift/Serialization/SerializedModuleLoader.h @@ -373,11 +373,14 @@ public: /// FIXME: make this an actual import *path* once submodules are designed. bool registerMemoryBuffer(StringRef importPath, std::unique_ptr input, - llvm::VersionTuple version) { - return MemoryBuffers - .insert({importPath, MemoryBufferInfo(std::move(input), version)}) - .second; - } + llvm::VersionTuple version); + + /// During the transtion to explicitly tracked module dependencies LLDB may + /// instruct this loader to forget one of the (now redundant) MemoryBuffers + /// because it found an explicit module file on disk. + /// + /// \return true if the importPath existed. + bool unregisterMemoryBuffer(StringRef importPath); void collectVisibleTopLevelModuleNames( SmallVectorImpl &names) const override {} diff --git a/lib/Serialization/SerializedModuleLoader.cpp b/lib/Serialization/SerializedModuleLoader.cpp index 31753a574d8..a49d08c04d1 100644 --- a/lib/Serialization/SerializedModuleLoader.cpp +++ b/lib/Serialization/SerializedModuleLoader.cpp @@ -1708,6 +1708,19 @@ MemoryBufferSerializedModuleLoader::loadModule(SourceLoc importLoc, return M; } +bool MemoryBufferSerializedModuleLoader::registerMemoryBuffer( + StringRef importPath, std::unique_ptr input, + llvm::VersionTuple version) { + return MemoryBuffers + .insert({importPath, MemoryBufferInfo(std::move(input), version)}) + .second; +} + +bool MemoryBufferSerializedModuleLoader::unregisterMemoryBuffer( + StringRef importPath) { + return MemoryBuffers.erase(importPath); +} + void SerializedModuleLoaderBase::loadExtensions(NominalTypeDecl *nominal, unsigned previousGeneration) { for (auto &modulePair : LoadedModuleFiles) {