Skip to content

Commit e2ba36f

Browse files
committed
Factor out ModuleDecl overload of import resolution
This resolves imports for the entire module.
1 parent 0234f7a commit e2ba36f

File tree

4 files changed

+19
-15
lines changed

4 files changed

+19
-15
lines changed

include/swift/Subsystems.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,9 @@ namespace swift {
117117
bool TokenizeInterpolatedString = true,
118118
ArrayRef<Token> SplitTokens = ArrayRef<Token>());
119119

120+
/// Perform import resolution for the module.
121+
void performImportResolution(ModuleDecl *M);
122+
120123
/// This walks the AST to resolve imports.
121124
void performImportResolution(SourceFile &SF);
122125

lib/Frontend/Frontend.cpp

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1552,19 +1552,8 @@ bool CompilerInstance::performParseAndResolveImportsOnly() {
15521552
}
15531553
}
15541554

1555-
// Resolve imports for all the source files.
1556-
for (auto *file : mainModule->getFiles()) {
1557-
if (auto *SF = dyn_cast<SourceFile>(file))
1558-
performImportResolution(*SF);
1559-
}
1560-
1561-
assert(llvm::all_of(mainModule->getFiles(), [](const FileUnit *File) -> bool {
1562-
auto *SF = dyn_cast<SourceFile>(File);
1563-
if (!SF)
1564-
return true;
1565-
return SF->ASTStage >= SourceFile::ImportsResolved;
1566-
}) && "some files have not yet had their imports resolved");
1567-
mainModule->setHasResolvedImports();
1555+
// Resolve imports for all the source files in the module.
1556+
performImportResolution(mainModule);
15681557

15691558
bindExtensions(*mainModule);
15701559
return Context->hadError();

lib/Sema/ImportResolution.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,19 @@ class ImportResolver final : public DeclVisitor<ImportResolver> {
266266
// MARK: performImportResolution
267267
//===----------------------------------------------------------------------===//
268268

269+
void swift::performImportResolution(ModuleDecl *M) {
270+
for (auto *file : M->getFiles()) {
271+
auto *SF = dyn_cast<SourceFile>(file);
272+
if (!SF)
273+
continue;
274+
275+
performImportResolution(*SF);
276+
assert(SF->ASTStage >= SourceFile::ImportsResolved &&
277+
"file has not had its imports resolved");
278+
}
279+
M->setHasResolvedImports();
280+
}
281+
269282
/// performImportResolution - This walks the AST to resolve imports.
270283
///
271284
/// Before we can type-check a source file, we need to make declarations

lib/Sema/SourceLoader.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,8 +142,7 @@ ModuleDecl *SourceLoader::loadModule(SourceLoc importLoc,
142142
new (Ctx) SourceFile(*importMod, SourceFileKind::Library, bufferID,
143143
SourceFile::getDefaultParsingOptions(Ctx.LangOpts));
144144
importMod->addFile(*importFile);
145-
performImportResolution(*importFile);
146-
importMod->setHasResolvedImports();
145+
performImportResolution(importMod);
147146
bindExtensions(*importMod);
148147
return importMod;
149148
}

0 commit comments

Comments
 (0)