Skip to content

Commit 7a736f6

Browse files
committed
Refactor ModuleDependenciesStorageBase to self-identify with ModuleDependenciesKind
1 parent b85f547 commit 7a736f6

File tree

1 file changed

+37
-12
lines changed

1 file changed

+37
-12
lines changed

include/swift/AST/ModuleDependencies.h

Lines changed: 37 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,11 @@ enum class ModuleDependenciesKind : int8_t {
4343
/// This class is mostly an implementation detail for \c ModuleDependencies.
4444
class ModuleDependenciesStorageBase {
4545
public:
46-
const bool isSwiftModule;
46+
const ModuleDependenciesKind dependencyKind;
4747

48-
ModuleDependenciesStorageBase(bool isSwiftModule,
48+
ModuleDependenciesStorageBase(ModuleDependenciesKind dependencyKind,
4949
const std::string &compiledModulePath)
50-
: isSwiftModule(isSwiftModule),
50+
: dependencyKind(dependencyKind),
5151
compiledModulePath(compiledModulePath) { }
5252

5353
virtual ModuleDependenciesStorageBase *clone() const = 0;
@@ -103,7 +103,8 @@ class SwiftModuleDependenciesStorage : public ModuleDependenciesStorageBase {
103103
ArrayRef<StringRef> buildCommandLine,
104104
ArrayRef<StringRef> extraPCMArgs,
105105
StringRef contextHash
106-
) : ModuleDependenciesStorageBase(/*isSwiftModule=*/true, compiledModulePath),
106+
) : ModuleDependenciesStorageBase(ModuleDependenciesKind::Swift,
107+
compiledModulePath),
107108
swiftInterfaceFile(swiftInterfaceFile),
108109
compiledModuleCandidates(compiledModuleCandidates.begin(),
109110
compiledModuleCandidates.end()),
@@ -116,7 +117,7 @@ class SwiftModuleDependenciesStorage : public ModuleDependenciesStorageBase {
116117
}
117118

118119
static bool classof(const ModuleDependenciesStorageBase *base) {
119-
return base->isSwiftModule && !base->isExternalSwiftModuleStub;
120+
return base->dependencyKind == ModuleDependenciesKind::Swift;
120121
}
121122
};
122123

@@ -143,7 +144,7 @@ class ClangModuleDependenciesStorage : public ModuleDependenciesStorageBase {
143144
const std::string &contextHash,
144145
const std::vector<std::string> &nonPathCommandLine,
145146
const std::vector<std::string> &fileDependencies
146-
) : ModuleDependenciesStorageBase(/*isSwiftModule=*/false,
147+
) : ModuleDependenciesStorageBase(ModuleDependenciesKind::Clang,
147148
compiledModulePath),
148149
moduleMapFile(moduleMapFile),
149150
contextHash(contextHash),
@@ -155,7 +156,35 @@ class ClangModuleDependenciesStorage : public ModuleDependenciesStorageBase {
155156
}
156157

157158
static bool classof(const ModuleDependenciesStorageBase *base) {
158-
return !base->isSwiftModule;
159+
return base->dependencyKind == ModuleDependenciesKind::Clang;
160+
}
161+
};
162+
163+
/// Describes an external Swift module dependency module stub.
164+
///
165+
/// This class is mostly an implementation detail for \c ModuleDependencies.
166+
class ExternalSwiftModuleDependencyStorage : public ModuleDependenciesStorageBase {
167+
public:
168+
ExternalSwiftModuleDependencyStorage(const std::string &compiledModulePath,
169+
const std::string &moduleDocPath,
170+
const std::string &sourceInfoPath)
171+
: ModuleDependenciesStorageBase(ModuleDependenciesKind::SwiftExternal,
172+
compiledModulePath),
173+
moduleDocPath(moduleDocPath),
174+
sourceInfoPath(sourceInfoPath) {}
175+
176+
ModuleDependenciesStorageBase *clone() const override {
177+
return new ExternalSwiftModuleDependencyStorage(*this);
178+
}
179+
180+
/// The path to the .swiftModuleDoc file.
181+
const std::string moduleDocPath;
182+
183+
/// The path to the .swiftSourceInfo file.
184+
const std::string sourceInfoPath;
185+
186+
static bool classof(const ModuleDependenciesStorageBase *base) {
187+
return base->dependencyKind == ModuleDependenciesKind::SwiftExternal;
159188
}
160189
};
161190

@@ -254,11 +283,7 @@ class ModuleDependencies {
254283
bool isSwiftModule() const;
255284

256285
ModuleDependenciesKind getKind() const {
257-
if (isExternalSwiftModuleStub())
258-
return ModuleDependenciesKind::SwiftExternal;
259-
else
260-
return isSwiftModule() ? ModuleDependenciesKind::Swift
261-
: ModuleDependenciesKind::Clang;
286+
return storage->dependencyKind;
262287
}
263288
/// Retrieve the dependencies for a Swift module.
264289
const SwiftModuleDependenciesStorage *getAsSwiftModule() const;

0 commit comments

Comments
 (0)