20
20
21
21
namespace swift {
22
22
class ModuleFile ;
23
+ namespace file_types {
24
+ enum ID : uint8_t ;
25
+ }
23
26
24
27
// / Spceifies how to load modules when both a module interface and serialized
25
28
// / AST are present, or whether to disallow one format or the other altogether.
@@ -30,6 +33,24 @@ enum class ModuleLoadingMode {
30
33
OnlySerialized
31
34
};
32
35
36
+ // / Helper type used to pass and compute the sets of related filenames used by
37
+ // / \c SerializedModuleLoader subclasses.
38
+ struct SerializedModuleBaseName {
39
+ // / The base filename, wtihout any extension.
40
+ SmallString<256 > baseName;
41
+
42
+ // / Creates a \c SerializedModuleBaseName.
43
+ SerializedModuleBaseName (StringRef baseName) : baseName(baseName) { }
44
+
45
+ // / Creates a \c SerializedModuleBaseName by contextualizing an existing one
46
+ // / with a \c parentDir.
47
+ SerializedModuleBaseName (StringRef parentDir,
48
+ const SerializedModuleBaseName &name);
49
+
50
+ // / Gets the filename with a particular extension appended to it.
51
+ std::string getName (file_types::ID fileTy) const ;
52
+ };
53
+
33
54
// / Common functionality shared between \c SerializedModuleLoader,
34
55
// / \c ModuleInterfaceLoader and \c MemoryBufferSerializedModuleLoader.
35
56
class SerializedModuleLoaderBase : public ModuleLoader {
@@ -71,43 +92,40 @@ class SerializedModuleLoaderBase : public ModuleLoader {
71
92
// / modules and will defer to the remaining module loaders to look up this
72
93
// / module.
73
94
virtual std::error_code findModuleFilesInDirectory (
74
- AccessPathElem ModuleID, StringRef DirPath, StringRef ModuleFilename,
75
- StringRef ModuleDocFilename,
76
- StringRef ModuleSourceInfoFilename,
95
+ AccessPathElem ModuleID,
96
+ const SerializedModuleBaseName &BaseName,
77
97
SmallVectorImpl<char > *ModuleInterfacePath,
78
98
std::unique_ptr<llvm::MemoryBuffer> *ModuleBuffer,
79
99
std::unique_ptr<llvm::MemoryBuffer> *ModuleDocBuffer,
80
100
std::unique_ptr<llvm::MemoryBuffer> *ModuleSourceInfoBuffer) = 0;
81
101
82
102
std::error_code
83
- openModuleFiles (AccessPathElem ModuleID,
84
- StringRef ModulePath, StringRef ModuleDocPath,
85
- StringRef ModuleSourceInfoName,
86
- std::unique_ptr<llvm::MemoryBuffer> *ModuleBuffer,
87
- std::unique_ptr<llvm::MemoryBuffer> *ModuleDocBuffer,
88
- std::unique_ptr<llvm::MemoryBuffer> *ModuleSourceInfoBuffer);
103
+ openModuleFile (
104
+ AccessPathElem ModuleID,
105
+ const SerializedModuleBaseName &BaseName,
106
+ std::unique_ptr<llvm::MemoryBuffer> *ModuleBuffer);
89
107
90
108
std::error_code
91
- openModuleDocFile (AccessPathElem ModuleID,
92
- StringRef ModuleDocPath,
93
- std::unique_ptr<llvm::MemoryBuffer> *ModuleDocBuffer);
109
+ openModuleDocFileIfPresent (
110
+ AccessPathElem ModuleID,
111
+ const SerializedModuleBaseName &BaseName,
112
+ std::unique_ptr<llvm::MemoryBuffer> *ModuleDocBuffer);
94
113
95
- void
114
+ std::error_code
96
115
openModuleSourceInfoFileIfPresent (
97
116
AccessPathElem ModuleID,
98
- StringRef ModulePath,
99
- StringRef ModuleSourceInfoFileName,
117
+ const SerializedModuleBaseName &BaseName,
100
118
std::unique_ptr<llvm::MemoryBuffer> *ModuleSourceInfoBuffer);
101
119
102
120
// / If the module loader subclass knows that all options have been tried for
103
121
// / loading an architecture-specific file out of a swiftmodule bundle, try
104
122
// / to list the architectures that \e are present.
105
123
// /
106
124
// / \returns true if an error diagnostic was emitted
107
- virtual bool maybeDiagnoseTargetMismatch (SourceLoc sourceLocation,
108
- StringRef moduleName ,
109
- StringRef archName ,
110
- StringRef directoryPath ) {
125
+ virtual bool maybeDiagnoseTargetMismatch (
126
+ SourceLoc sourceLocation ,
127
+ StringRef moduleName ,
128
+ const SerializedModuleBaseName &BaseName ) {
111
129
return false ;
112
130
}
113
131
@@ -178,18 +196,17 @@ class SerializedModuleLoader : public SerializedModuleLoaderBase {
178
196
{}
179
197
180
198
std::error_code findModuleFilesInDirectory (
181
- AccessPathElem ModuleID, StringRef DirPath, StringRef ModuleFilename,
182
- StringRef ModuleDocFilename,
183
- StringRef ModuleSourceInfoFilename,
199
+ AccessPathElem ModuleID,
200
+ const SerializedModuleBaseName &BaseName,
184
201
SmallVectorImpl<char > *ModuleInterfacePath,
185
202
std::unique_ptr<llvm::MemoryBuffer> *ModuleBuffer,
186
203
std::unique_ptr<llvm::MemoryBuffer> *ModuleDocBuffer,
187
204
std::unique_ptr<llvm::MemoryBuffer> *ModuleSourceInfoBuffer) override ;
188
205
189
- bool maybeDiagnoseTargetMismatch (SourceLoc sourceLocation,
190
- StringRef moduleName ,
191
- StringRef archName ,
192
- StringRef directoryPath ) override ;
206
+ bool maybeDiagnoseTargetMismatch (
207
+ SourceLoc sourceLocation ,
208
+ StringRef moduleName ,
209
+ const SerializedModuleBaseName &BaseName ) override ;
193
210
194
211
public:
195
212
virtual ~SerializedModuleLoader ();
@@ -224,18 +241,17 @@ class MemoryBufferSerializedModuleLoader : public SerializedModuleLoaderBase {
224
241
IgnoreSwiftSourceInfo) {}
225
242
226
243
std::error_code findModuleFilesInDirectory (
227
- AccessPathElem ModuleID, StringRef DirPath, StringRef ModuleFilename,
228
- StringRef ModuleDocFilename,
229
- StringRef ModuleSourceInfoFilename,
244
+ AccessPathElem ModuleID,
245
+ const SerializedModuleBaseName &BaseName,
230
246
SmallVectorImpl<char > *ModuleInterfacePath,
231
247
std::unique_ptr<llvm::MemoryBuffer> *ModuleBuffer,
232
248
std::unique_ptr<llvm::MemoryBuffer> *ModuleDocBuffer,
233
249
std::unique_ptr<llvm::MemoryBuffer> *ModuleSourceInfoBuffer) override ;
234
250
235
- bool maybeDiagnoseTargetMismatch (SourceLoc sourceLocation,
236
- StringRef moduleName ,
237
- StringRef archName ,
238
- StringRef directoryPath ) override ;
251
+ bool maybeDiagnoseTargetMismatch (
252
+ SourceLoc sourceLocation ,
253
+ StringRef moduleName ,
254
+ const SerializedModuleBaseName &BaseName ) override ;
239
255
240
256
public:
241
257
virtual ~MemoryBufferSerializedModuleLoader ();
0 commit comments