@@ -302,6 +302,9 @@ class ImplicitSerializedModuleLoader : public SerializedModuleLoaderBase {
302302class MemoryBufferSerializedModuleLoader : public SerializedModuleLoaderBase {
303303
304304 struct MemoryBufferInfo {
305+ MemoryBufferInfo (std::unique_ptr<llvm::MemoryBuffer> &&buffer,
306+ llvm::VersionTuple userVersion)
307+ : buffer(std::move(buffer)), userVersion(userVersion) {}
305308 std::unique_ptr<llvm::MemoryBuffer> buffer;
306309 llvm::VersionTuple userVersion;
307310 };
@@ -350,11 +353,16 @@ class MemoryBufferSerializedModuleLoader : public SerializedModuleLoaderBase {
350353 // / discovered in the __swift_ast section of a Mach-O file (or the .swift_ast
351354 // / section of an ELF file) to the search path.
352355 // /
356+ // / If a module is inserted twice, the first one wins, and the return value is
357+ // / false.
358+ // /
353359 // / FIXME: make this an actual import *path* once submodules are designed.
354- void registerMemoryBuffer (StringRef importPath,
360+ bool registerMemoryBuffer (StringRef importPath,
355361 std::unique_ptr<llvm::MemoryBuffer> input,
356362 llvm::VersionTuple version) {
357- MemoryBuffers[importPath] = {std::move (input), version};
363+ return MemoryBuffers
364+ .insert ({importPath, MemoryBufferInfo (std::move (input), version)})
365+ .second ;
358366 }
359367
360368 void collectVisibleTopLevelModuleNames (
0 commit comments