Skip to content

Commit d55c5bd

Browse files
committed
[NFC] Add type for ModuleDecl::getImplicitImports()
This doesn’t really change the design yet.
1 parent 8070e8a commit d55c5bd

File tree

9 files changed

+45
-21
lines changed

9 files changed

+45
-21
lines changed

include/swift/AST/ASTTypeIDZone.def

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ SWIFT_TYPEID(BodyInitKindAndExpr)
2222
SWIFT_TYPEID(CtorInitializerKind)
2323
SWIFT_TYPEID(FunctionBuilderBodyPreCheck)
2424
SWIFT_TYPEID(GenericSignature)
25-
SWIFT_TYPEID(ImplicitImport)
25+
SWIFT_TYPEID(ImplicitImportList)
2626
SWIFT_TYPEID(ImplicitMemberAction)
2727
SWIFT_TYPEID(ParamSpecifier)
2828
SWIFT_TYPEID(PropertyWrapperBackingPropertyInfo)

include/swift/AST/ASTTypeIDs.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ class GenericTypeParamType;
4242
class InfixOperatorDecl;
4343
class IterableDeclContext;
4444
class ModuleDecl;
45-
struct ImplicitImport;
45+
struct ImplicitImportList;
4646
class NamedPattern;
4747
class NominalTypeDecl;
4848
class OperatorDecl;

include/swift/AST/Import.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -565,6 +565,7 @@ enum class ImplicitStdlibKind {
565565
Stdlib
566566
};
567567

568+
/// Represents unprocessed options for implicit imports.
568569
struct ImplicitImportInfo {
569570
/// The implicit stdlib to import.
570571
ImplicitStdlibKind StdlibKind;
@@ -589,6 +590,20 @@ struct ImplicitImportInfo {
589590
ShouldImportUnderlyingModule(false) {}
590591
};
591592

593+
/// Contains names of and pointers to modules that must be implicitly imported.
594+
struct ImplicitImportList {
595+
ArrayRef<ImplicitImport> imports;
596+
597+
friend bool operator==(const ImplicitImportList &lhs,
598+
const ImplicitImportList &rhs) {
599+
return lhs.imports == rhs.imports;
600+
}
601+
};
602+
603+
/// A list of modules to implicitly import.
604+
void simple_display(llvm::raw_ostream &out,
605+
const ImplicitImportList &importList);
606+
592607
}
593608

594609
// MARK: - DenseMapInfo

include/swift/AST/Module.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ namespace swift {
5656
class FuncDecl;
5757
class InfixOperatorDecl;
5858
class LinkLibrary;
59-
struct ImplicitImport;
6059
class ModuleLoader;
6160
class NominalTypeDecl;
6261
class EnumElementDecl;
@@ -278,7 +277,7 @@ class ModuleDecl : public DeclContext, public TypeDecl {
278277

279278
/// Retrieve a list of modules that each file of this module implicitly
280279
/// imports.
281-
ArrayRef<ImplicitImport> getImplicitImports() const;
280+
ImplicitImportList getImplicitImports() const;
282281

283282
ArrayRef<FileUnit *> getFiles() {
284283
assert(!Files.empty() || failedToLoad());

include/swift/AST/TypeCheckRequests.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2498,16 +2498,15 @@ class SimpleDidSetRequest
24982498
/// of a given module.
24992499
class ModuleImplicitImportsRequest
25002500
: public SimpleRequest<ModuleImplicitImportsRequest,
2501-
ArrayRef<ImplicitImport>(ModuleDecl *),
2501+
ImplicitImportList(ModuleDecl *),
25022502
RequestFlags::Cached> {
25032503
public:
25042504
using SimpleRequest::SimpleRequest;
25052505

25062506
private:
25072507
friend SimpleRequest;
25082508

2509-
ArrayRef<ImplicitImport>
2510-
evaluate(Evaluator &evaluator, ModuleDecl *module) const;
2509+
ImplicitImportList evaluate(Evaluator &evaluator, ModuleDecl *module) const;
25112510

25122511
public:
25132512
// Cached.

include/swift/AST/TypeCheckerTypeIDZone.def

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ SWIFT_REQUEST(TypeChecker, ValidatePrecedenceGroupRequest,
148148
SWIFT_REQUEST(TypeChecker, MangleLocalTypeDeclRequest,
149149
std::string(const TypeDecl *), Cached, NoLocationInfo)
150150
SWIFT_REQUEST(TypeChecker, ModuleImplicitImportsRequest,
151-
ArrayRef<ImplicitImport>(ModuleDecl *), Cached, NoLocationInfo)
151+
ImplicitImportList(ModuleDecl *), Cached, NoLocationInfo)
152152
SWIFT_REQUEST(TypeChecker, NamingPatternRequest,
153153
NamedPattern *(VarDecl *), SeparatelyCached, NoLocationInfo)
154154
SWIFT_REQUEST(TypeChecker, OpaqueReadOwnershipRequest,

lib/AST/Module.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -487,14 +487,13 @@ ModuleDecl::ModuleDecl(Identifier name, ASTContext &ctx,
487487
Bits.ModuleDecl.HasIncrementalInfo = 0;
488488
}
489489

490-
ArrayRef<ImplicitImport> ModuleDecl::getImplicitImports() const {
490+
ImplicitImportList ModuleDecl::getImplicitImports() const {
491491
auto &evaluator = getASTContext().evaluator;
492492
auto *mutableThis = const_cast<ModuleDecl *>(this);
493493
return evaluateOrDefault(evaluator, ModuleImplicitImportsRequest{mutableThis},
494494
{});
495495
}
496496

497-
498497
void ModuleDecl::addFile(FileUnit &newFile) {
499498
// If this is a LoadedFile, make sure it loaded without error.
500499
assert(!(isa<LoadedFile>(newFile) &&

lib/AST/TypeCheckRequests.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1397,6 +1397,14 @@ void swift::simple_display(llvm::raw_ostream &out,
13971397
simple_display(out, import.Module);
13981398
}
13991399

1400+
void swift::simple_display(llvm::raw_ostream &out,
1401+
const ImplicitImportList &importList) {
1402+
llvm::interleaveComma(importList.imports, out,
1403+
[&](const auto &import) {
1404+
simple_display(out, import);
1405+
});
1406+
}
1407+
14001408
//----------------------------------------------------------------------------//
14011409
// ResolveTypeRequest computation.
14021410
//----------------------------------------------------------------------------//

lib/Sema/ImportResolution.cpp

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -174,15 +174,7 @@ class ImportResolver final : public DeclVisitor<ImportResolver> {
174174
addImplicitImports();
175175
}
176176

177-
void addImplicitImports() {
178-
// TODO: Support cross-module imports.
179-
for (auto &import : SF.getParentModule()->getImplicitImports()) {
180-
assert(!(SF.Kind == SourceFileKind::SIL &&
181-
import.Module->isStdlibModule()));
182-
ImportedModule importedMod{ImportPath::Access(), import.Module};
183-
boundImports.emplace_back(importedMod, import.Options);
184-
}
185-
}
177+
void addImplicitImports();
186178

187179
/// Retrieve the finalized imports.
188180
ArrayRef<AttributedImport<ImportedModule>> getFinishedImports() const {
@@ -400,7 +392,7 @@ UnboundImport::getTopLevelModule(ModuleDecl *M, SourceFile &SF) {
400392
// MARK: Implicit imports
401393
//===----------------------------------------------------------------------===//
402394

403-
ArrayRef<ImplicitImport>
395+
ImplicitImportList
404396
ModuleImplicitImportsRequest::evaluate(Evaluator &evaluator,
405397
ModuleDecl *module) const {
406398
SmallVector<ImplicitImport, 4> imports;
@@ -468,7 +460,19 @@ ModuleImplicitImportsRequest::evaluate(Evaluator &evaluator,
468460
}
469461
}
470462

471-
return ctx.AllocateCopy(imports);
463+
return { ctx.AllocateCopy(imports) };
464+
}
465+
466+
void ImportResolver::addImplicitImports() {
467+
auto implicitImports = SF.getParentModule()->getImplicitImports();
468+
469+
// TODO: Support cross-module imports.
470+
for (auto &import : implicitImports.imports) {
471+
assert(!(SF.Kind == SourceFileKind::SIL &&
472+
import.Module->isStdlibModule()));
473+
ImportedModule importedMod{ImportPath::Access(), import.Module};
474+
boundImports.emplace_back(importedMod, import.Options);
475+
}
472476
}
473477

474478
//===----------------------------------------------------------------------===//

0 commit comments

Comments
 (0)