@@ -19,6 +19,16 @@ namespace swift {
1919 // / for the purpose of determining dependencies, but does not attempt to
2020 // / load the module files.
2121 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+
2232 // / The module we're scanning dependencies of.
2333 Identifier moduleName;
2434
@@ -36,10 +46,11 @@ namespace swift {
3646 ModuleDependencyScanner (
3747 ASTContext &ctx, ModuleLoadingMode LoadMode, Identifier moduleName,
3848 InterfaceSubContextDelegate &astDelegate,
39- ModuleDependenciesKind dependencyKind = ModuleDependenciesKind::Swift)
49+ ModuleDependenciesKind dependencyKind = ModuleDependenciesKind::Swift,
50+ ScannerKind kind = MDS_plain)
4051 : SerializedModuleLoaderBase(ctx, nullptr , LoadMode,
4152 /* IgnoreSwiftSourceInfoFile=*/ true ),
42- moduleName (moduleName), astDelegate(astDelegate),
53+ kind (kind), moduleName(moduleName), astDelegate(astDelegate),
4354 dependencyKind(dependencyKind) {}
4455
4556 std::error_code findModuleFilesInDirectory (
@@ -55,6 +66,11 @@ namespace swift {
5566 SmallVectorImpl<Identifier> &names) const override {
5667 llvm_unreachable (" Not used" );
5768 }
69+
70+ ScannerKind getKind () const { return kind; }
71+ static bool classof (const ModuleDependencyScanner *MDS) {
72+ return MDS->getKind () == MDS_plain;
73+ }
5874 };
5975
6076 // / A ModuleLoader that loads placeholder dependency module stubs specified in
@@ -90,7 +106,8 @@ namespace swift {
90106 StringRef PlaceholderDependencyModuleMap,
91107 InterfaceSubContextDelegate &astDelegate)
92108 : ModuleDependencyScanner(ctx, LoadMode, moduleName, astDelegate,
93- ModuleDependenciesKind::SwiftPlaceholder) {
109+ ModuleDependenciesKind::SwiftPlaceholder,
110+ MDS_placeholder) {
94111
95112 // FIXME: Find a better place for this map to live, to avoid
96113 // doing the parsing on every module.
@@ -106,5 +123,9 @@ namespace swift {
106123 std::unique_ptr<llvm::MemoryBuffer> *ModuleDocBuffer,
107124 std::unique_ptr<llvm::MemoryBuffer> *ModuleSourceInfoBuffer,
108125 bool IsFramework) override ;
126+
127+ static bool classof (const ModuleDependencyScanner *MDS) {
128+ return MDS->getKind () == MDS_placeholder;
129+ }
109130 };
110131}
0 commit comments