@@ -143,40 +143,31 @@ bool SerializedModuleLoader::maybeDiagnoseArchitectureMismatch(
143
143
return true ;
144
144
}
145
145
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;
159
149
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
+ };
162
160
163
161
bool
164
162
SerializedModuleLoaderBase::findModule (AccessPathElem moduleID,
165
163
std::unique_ptr<llvm::MemoryBuffer> *moduleBuffer,
166
164
std::unique_ptr<llvm::MemoryBuffer> *moduleDocBuffer,
167
165
bool &isFramework) {
168
166
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);
177
168
178
169
StringRef archName = Ctx.LangOpts .Target .getArchName ();
179
- auto archFileNames = getArchSpecificModuleFileNames (archName);
170
+ ModuleFilenamePair archFileNames (archName);
180
171
181
172
// FIXME: We used to use "major architecture" names for these files---the
182
173
// names checked in "#if arch(...)". Fall back to that name in the one case
@@ -186,8 +177,7 @@ SerializedModuleLoaderBase::findModule(AccessPathElem moduleID,
186
177
StringRef alternateArchName;
187
178
if (Ctx.LangOpts .Target .getArch () == llvm::Triple::ArchType::arm)
188
179
alternateArchName = " arm" ;
189
- auto alternateArchFileNames =
190
- getArchSpecificModuleFileNames (alternateArchName);
180
+ ModuleFilenamePair alternateArchFileNames (alternateArchName);
191
181
192
182
auto &fs = *Ctx.SourceMgr .getFileSystem ();
193
183
isFramework = false ;
@@ -197,21 +187,21 @@ SerializedModuleLoaderBase::findModule(AccessPathElem moduleID,
197
187
std::error_code result;
198
188
199
189
currPath = path;
200
- llvm::sys::path::append (currPath, moduleFilename .str ());
190
+ llvm::sys::path::append (currPath, fileNames. module .str ());
201
191
llvm::ErrorOr<llvm::vfs::Status> statResult = fs.status (currPath);
202
192
203
193
if (statResult && statResult->isDirectory ()) {
204
194
// A .swiftmodule directory contains architecture-specific files.
205
195
result = findModuleFilesInDirectory (moduleID, currPath,
206
- archFileNames.first ,
207
- archFileNames.second ,
196
+ archFileNames.module ,
197
+ archFileNames.moduleDoc ,
208
198
moduleBuffer, moduleDocBuffer);
209
199
210
200
if (result == std::errc::no_such_file_or_directory &&
211
201
!alternateArchName.empty ()) {
212
202
result = findModuleFilesInDirectory (moduleID, currPath,
213
- alternateArchFileNames.first ,
214
- alternateArchFileNames.second ,
203
+ alternateArchFileNames.module ,
204
+ alternateArchFileNames.moduleDoc ,
215
205
moduleBuffer, moduleDocBuffer);
216
206
}
217
207
@@ -226,8 +216,8 @@ SerializedModuleLoaderBase::findModule(AccessPathElem moduleID,
226
216
// We can't just return the error; the path we're looking for might not
227
217
// be "Foo.swiftmodule".
228
218
result = findModuleFilesInDirectory (moduleID, path,
229
- moduleFilename .str (),
230
- moduleDocFilename .str (),
219
+ fileNames. module .str (),
220
+ fileNames. moduleDoc .str (),
231
221
moduleBuffer, moduleDocBuffer);
232
222
}
233
223
if (!result)
@@ -250,17 +240,17 @@ SerializedModuleLoaderBase::findModule(AccessPathElem moduleID,
250
240
251
241
// Frameworks always use architecture-specific files within a .swiftmodule
252
242
// directory.
253
- llvm::sys::path::append (currPath, " Modules" , moduleFilename .str ());
243
+ llvm::sys::path::append (currPath, " Modules" , fileNames. module .str ());
254
244
auto err = findModuleFilesInDirectory (moduleID, currPath,
255
- archFileNames.first ,
256
- archFileNames.second ,
245
+ archFileNames.module ,
246
+ archFileNames.moduleDoc ,
257
247
moduleBuffer, moduleDocBuffer);
258
248
259
249
if (err == std::errc::no_such_file_or_directory &&
260
250
!alternateArchName.empty ()) {
261
251
err = findModuleFilesInDirectory (moduleID, currPath,
262
- alternateArchFileNames.first ,
263
- alternateArchFileNames.second ,
252
+ alternateArchFileNames.module ,
253
+ alternateArchFileNames.moduleDoc ,
264
254
moduleBuffer, moduleDocBuffer);
265
255
}
266
256
@@ -305,16 +295,16 @@ SerializedModuleLoaderBase::findModule(AccessPathElem moduleID,
305
295
if (Ctx.LangOpts .Target .isOSDarwin ()) {
306
296
// Apple platforms always use architecture-specific files within a
307
297
// .swiftmodule directory for the stdlib.
308
- llvm::sys::path::append (currPath, moduleFilename .str ());
298
+ llvm::sys::path::append (currPath, fileNames. module .str ());
309
299
return !findModuleFilesInDirectory (moduleID, currPath,
310
- archFileNames.first ,
311
- archFileNames.second ,
300
+ archFileNames.module ,
301
+ archFileNames.moduleDoc ,
312
302
moduleBuffer, moduleDocBuffer);
313
303
}
314
304
// Non-Apple platforms always use single-architecture swiftmodules.
315
305
return !findModuleFilesInDirectory (moduleID, currPath,
316
- moduleFilename .str (),
317
- moduleDocFilename .str (),
306
+ fileNames. module .str (),
307
+ fileNames. moduleDoc .str (),
318
308
moduleBuffer, moduleDocBuffer);
319
309
}
320
310
0 commit comments