Skip to content

Commit 652cdfc

Browse files
committed
[NFC] Clean up module name pairs
Create a helper type to represent the .swiftmodule/.swiftdoc filename pair and use it in SerializedModuleLoaderBase::findModule().
1 parent cf6addc commit 652cdfc

File tree

1 file changed

+33
-43
lines changed

1 file changed

+33
-43
lines changed

lib/Serialization/SerializedModuleLoader.cpp

Lines changed: 33 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -143,40 +143,31 @@ bool SerializedModuleLoader::maybeDiagnoseArchitectureMismatch(
143143
return true;
144144
}
145145

146-
static std::pair<llvm::SmallString<16>, llvm::SmallString<16>>
147-
getArchSpecificModuleFileNames(StringRef archName) {
148-
llvm::SmallString<16> archFile, archDocFile;
149-
150-
if (!archName.empty()) {
151-
archFile += archName;
152-
archFile += '.';
153-
archFile += file_types::getExtension(file_types::TY_SwiftModuleFile);
154-
155-
archDocFile += archName;
156-
archDocFile += '.';
157-
archDocFile += file_types::getExtension(file_types::TY_SwiftModuleDocFile);
158-
}
146+
struct ModuleFilenamePair {
147+
llvm::SmallString<64> module;
148+
llvm::SmallString<64> moduleDoc;
159149

160-
return {archFile, archDocFile};
161-
}
150+
ModuleFilenamePair(StringRef baseName)
151+
: module(baseName), moduleDoc(baseName)
152+
{
153+
module += '.';
154+
module += file_types::getExtension(file_types::TY_SwiftModuleFile);
155+
156+
moduleDoc += '.';
157+
moduleDoc += file_types::getExtension(file_types::TY_SwiftModuleDocFile);
158+
}
159+
};
162160

163161
bool
164162
SerializedModuleLoaderBase::findModule(AccessPathElem moduleID,
165163
std::unique_ptr<llvm::MemoryBuffer> *moduleBuffer,
166164
std::unique_ptr<llvm::MemoryBuffer> *moduleDocBuffer,
167165
bool &isFramework) {
168166
llvm::SmallString<64> moduleName(moduleID.first.str());
169-
llvm::SmallString<64> moduleFilename(moduleName);
170-
moduleFilename += '.';
171-
moduleFilename += file_types::getExtension(file_types::TY_SwiftModuleFile);
172-
173-
llvm::SmallString<64> moduleDocFilename(moduleID.first.str());
174-
moduleDocFilename += '.';
175-
moduleDocFilename +=
176-
file_types::getExtension(file_types::TY_SwiftModuleDocFile);
167+
ModuleFilenamePair fileNames(moduleName);
177168

178169
StringRef archName = Ctx.LangOpts.Target.getArchName();
179-
auto archFileNames = getArchSpecificModuleFileNames(archName);
170+
ModuleFilenamePair archFileNames(archName);
180171

181172
// FIXME: We used to use "major architecture" names for these files---the
182173
// names checked in "#if arch(...)". Fall back to that name in the one case
@@ -186,8 +177,7 @@ SerializedModuleLoaderBase::findModule(AccessPathElem moduleID,
186177
StringRef alternateArchName;
187178
if (Ctx.LangOpts.Target.getArch() == llvm::Triple::ArchType::arm)
188179
alternateArchName = "arm";
189-
auto alternateArchFileNames =
190-
getArchSpecificModuleFileNames(alternateArchName);
180+
ModuleFilenamePair alternateArchFileNames(alternateArchName);
191181

192182
auto &fs = *Ctx.SourceMgr.getFileSystem();
193183
isFramework = false;
@@ -197,21 +187,21 @@ SerializedModuleLoaderBase::findModule(AccessPathElem moduleID,
197187
std::error_code result;
198188

199189
currPath = path;
200-
llvm::sys::path::append(currPath, moduleFilename.str());
190+
llvm::sys::path::append(currPath, fileNames.module.str());
201191
llvm::ErrorOr<llvm::vfs::Status> statResult = fs.status(currPath);
202192

203193
if (statResult && statResult->isDirectory()) {
204194
// A .swiftmodule directory contains architecture-specific files.
205195
result = findModuleFilesInDirectory(moduleID, currPath,
206-
archFileNames.first,
207-
archFileNames.second,
196+
archFileNames.module,
197+
archFileNames.moduleDoc,
208198
moduleBuffer, moduleDocBuffer);
209199

210200
if (result == std::errc::no_such_file_or_directory &&
211201
!alternateArchName.empty()) {
212202
result = findModuleFilesInDirectory(moduleID, currPath,
213-
alternateArchFileNames.first,
214-
alternateArchFileNames.second,
203+
alternateArchFileNames.module,
204+
alternateArchFileNames.moduleDoc,
215205
moduleBuffer, moduleDocBuffer);
216206
}
217207

@@ -226,8 +216,8 @@ SerializedModuleLoaderBase::findModule(AccessPathElem moduleID,
226216
// We can't just return the error; the path we're looking for might not
227217
// be "Foo.swiftmodule".
228218
result = findModuleFilesInDirectory(moduleID, path,
229-
moduleFilename.str(),
230-
moduleDocFilename.str(),
219+
fileNames.module.str(),
220+
fileNames.moduleDoc.str(),
231221
moduleBuffer, moduleDocBuffer);
232222
}
233223
if (!result)
@@ -250,17 +240,17 @@ SerializedModuleLoaderBase::findModule(AccessPathElem moduleID,
250240

251241
// Frameworks always use architecture-specific files within a .swiftmodule
252242
// directory.
253-
llvm::sys::path::append(currPath, "Modules", moduleFilename.str());
243+
llvm::sys::path::append(currPath, "Modules", fileNames.module.str());
254244
auto err = findModuleFilesInDirectory(moduleID, currPath,
255-
archFileNames.first,
256-
archFileNames.second,
245+
archFileNames.module,
246+
archFileNames.moduleDoc,
257247
moduleBuffer, moduleDocBuffer);
258248

259249
if (err == std::errc::no_such_file_or_directory &&
260250
!alternateArchName.empty()) {
261251
err = findModuleFilesInDirectory(moduleID, currPath,
262-
alternateArchFileNames.first,
263-
alternateArchFileNames.second,
252+
alternateArchFileNames.module,
253+
alternateArchFileNames.moduleDoc,
264254
moduleBuffer, moduleDocBuffer);
265255
}
266256

@@ -305,16 +295,16 @@ SerializedModuleLoaderBase::findModule(AccessPathElem moduleID,
305295
if (Ctx.LangOpts.Target.isOSDarwin()) {
306296
// Apple platforms always use architecture-specific files within a
307297
// .swiftmodule directory for the stdlib.
308-
llvm::sys::path::append(currPath, moduleFilename.str());
298+
llvm::sys::path::append(currPath, fileNames.module.str());
309299
return !findModuleFilesInDirectory(moduleID, currPath,
310-
archFileNames.first,
311-
archFileNames.second,
300+
archFileNames.module,
301+
archFileNames.moduleDoc,
312302
moduleBuffer, moduleDocBuffer);
313303
}
314304
// Non-Apple platforms always use single-architecture swiftmodules.
315305
return !findModuleFilesInDirectory(moduleID, currPath,
316-
moduleFilename.str(),
317-
moduleDocFilename.str(),
306+
fileNames.module.str(),
307+
fileNames.moduleDoc.str(),
318308
moduleBuffer, moduleDocBuffer);
319309
}
320310

0 commit comments

Comments
 (0)