@@ -19,6 +19,16 @@ namespace swift {
19
19
// / for the purpose of determining dependencies, but does not attempt to
20
20
// / load the module files.
21
21
class ModuleDependencyScanner : public SerializedModuleLoaderBase {
22
+ public:
23
+ enum ScannerKind {
24
+ MDS_plain,
25
+ MDS_placeholder
26
+ };
27
+
28
+ private:
29
+ // / The kind of scanner this is (LLVM-style RTTI)
30
+ const ScannerKind kind;
31
+
22
32
// / The module we're scanning dependencies of.
23
33
Identifier moduleName;
24
34
@@ -36,10 +46,11 @@ namespace swift {
36
46
ModuleDependencyScanner (
37
47
ASTContext &ctx, ModuleLoadingMode LoadMode, Identifier moduleName,
38
48
InterfaceSubContextDelegate &astDelegate,
39
- ModuleDependenciesKind dependencyKind = ModuleDependenciesKind::Swift)
49
+ ModuleDependenciesKind dependencyKind = ModuleDependenciesKind::Swift,
50
+ ScannerKind kind = MDS_plain)
40
51
: SerializedModuleLoaderBase(ctx, nullptr , LoadMode,
41
52
/* IgnoreSwiftSourceInfoFile=*/ true ),
42
- moduleName (moduleName), astDelegate(astDelegate),
53
+ kind (kind), moduleName(moduleName), astDelegate(astDelegate),
43
54
dependencyKind(dependencyKind) {}
44
55
45
56
std::error_code findModuleFilesInDirectory (
@@ -55,6 +66,11 @@ namespace swift {
55
66
SmallVectorImpl<Identifier> &names) const override {
56
67
llvm_unreachable (" Not used" );
57
68
}
69
+
70
+ ScannerKind getKind () const { return kind; }
71
+ static bool classof (const ModuleDependencyScanner *MDS) {
72
+ return MDS->getKind () == MDS_plain;
73
+ }
58
74
};
59
75
60
76
// / A ModuleLoader that loads placeholder dependency module stubs specified in
@@ -90,7 +106,8 @@ namespace swift {
90
106
StringRef PlaceholderDependencyModuleMap,
91
107
InterfaceSubContextDelegate &astDelegate)
92
108
: ModuleDependencyScanner(ctx, LoadMode, moduleName, astDelegate,
93
- ModuleDependenciesKind::SwiftPlaceholder) {
109
+ ModuleDependenciesKind::SwiftPlaceholder,
110
+ MDS_placeholder) {
94
111
95
112
// FIXME: Find a better place for this map to live, to avoid
96
113
// doing the parsing on every module.
@@ -106,5 +123,9 @@ namespace swift {
106
123
std::unique_ptr<llvm::MemoryBuffer> *ModuleDocBuffer,
107
124
std::unique_ptr<llvm::MemoryBuffer> *ModuleSourceInfoBuffer,
108
125
bool IsFramework) override ;
126
+
127
+ static bool classof (const ModuleDependencyScanner *MDS) {
128
+ return MDS->getKind () == MDS_placeholder;
129
+ }
109
130
};
110
131
}
0 commit comments