[AST] check modules before recursing for display decls

This commit is contained in:
Victoria Mitchell
2022-01-14 16:28:04 -07:00
parent ec6c3fb3d7
commit aeaf6b22db
5 changed files with 27 additions and 4 deletions

View File

@@ -780,15 +780,23 @@ void SourceFile::lookupObjCMethods(
results.append(known->second.begin(), known->second.end());
}
bool ModuleDecl::shouldCollectDisplayDecls() const {
for (const FileUnit *file : Files) {
if (!file->shouldCollectDisplayDecls())
return false;
}
return true;
}
static void collectParsedExportedImports(const ModuleDecl *M, SmallPtrSetImpl<ModuleDecl *> &Imports) {
for (const FileUnit *file : M->getFiles()) {
if (const SourceFile *source = dyn_cast<SourceFile>(file)) {
if (source->hasImports()) {
for (auto import : source->getImports()) {
if (import.options.contains(ImportFlags::Exported)) {
if (!Imports.contains(import.module.importedModule)) {
Imports.insert(import.module.importedModule);
}
if (import.options.contains(ImportFlags::Exported) &&
!Imports.contains(import.module.importedModule) &&
import.module.importedModule->shouldCollectDisplayDecls()) {
Imports.insert(import.module.importedModule);
}
}
}