42
42
#include " swift/AST/PropertyWrappers.h"
43
43
#include " swift/AST/ProtocolConformance.h"
44
44
#include " swift/AST/RawComment.h"
45
- #include " swift/AST/SearchPathOptions.h"
46
45
#include " swift/AST/SILLayout.h"
46
+ #include " swift/AST/SearchPathOptions.h"
47
47
#include " swift/AST/SemanticAttrs.h"
48
48
#include " swift/AST/SourceFile.h"
49
49
#include " swift/AST/SubstitutionMap.h"
65
65
#include " llvm/IR/LLVMContext.h"
66
66
#include " llvm/Support/Allocator.h"
67
67
#include " llvm/Support/Compiler.h"
68
+ #include " llvm/Support/FormatVariadic.h"
68
69
#include < algorithm>
69
70
#include < memory>
70
71
@@ -578,13 +579,13 @@ void ASTContext::operator delete(void *Data) throw() {
578
579
AlignedFree (Data);
579
580
}
580
581
581
- ASTContext *ASTContext::get (LangOptions &langOpts,
582
- TypeCheckerOptions &typecheckOpts , SILOptions &silOpts,
583
- SearchPathOptions &SearchPathOpts,
584
- ClangImporterOptions &ClangImporterOpts ,
585
- symbolgraphgen::SymbolGraphOptions &SymbolGraphOpts ,
586
- SourceManager &SourceMgr, DiagnosticEngine &Diags ) {
587
- // If more than two data structures are concatenated , then the aggregate
582
+ ASTContext *ASTContext::get (
583
+ LangOptions &langOpts, TypeCheckerOptions &typeckOpts , SILOptions &silOpts,
584
+ SearchPathOptions &SearchPathOpts, ClangImporterOptions &ClangImporterOpts ,
585
+ symbolgraphgen::SymbolGraphOptions &SymbolGraphOpts ,
586
+ SourceManager &SourceMgr, DiagnosticEngine &Diags ,
587
+ std::function< bool (llvm::StringRef, bool )> PreModuleImportCallback ) {
588
+ // If more than two data structures are concatentated , then the aggregate
588
589
// size math needs to become more complicated due to per-struct alignment
589
590
// constraints.
590
591
auto align = std::max (alignof (ASTContext), alignof (Implementation));
@@ -594,19 +595,21 @@ ASTContext *ASTContext::get(LangOptions &langOpts,
594
595
impl = reinterpret_cast <void *>(
595
596
llvm::alignAddr (impl, llvm::Align (alignof (Implementation))));
596
597
new (impl) Implementation ();
597
- return new (mem)
598
- ASTContext (langOpts, typecheckOpts, silOpts, SearchPathOpts ,
599
- ClangImporterOpts, SymbolGraphOpts, SourceMgr, Diags);
598
+ return new (mem) ASTContext (langOpts, typeckOpts, silOpts, SearchPathOpts,
599
+ ClangImporterOpts, SymbolGraphOpts, SourceMgr ,
600
+ Diags, PreModuleImportCallback );
600
601
}
601
602
602
- ASTContext::ASTContext (LangOptions &langOpts, TypeCheckerOptions &typecheckOpts,
603
- SILOptions &silOpts, SearchPathOptions &SearchPathOpts,
604
- ClangImporterOptions &ClangImporterOpts,
605
- symbolgraphgen::SymbolGraphOptions &SymbolGraphOpts,
606
- SourceManager &SourceMgr, DiagnosticEngine &Diags)
603
+ ASTContext::ASTContext (
604
+ LangOptions &langOpts, TypeCheckerOptions &typeckOpts, SILOptions &silOpts,
605
+ SearchPathOptions &SearchPathOpts, ClangImporterOptions &ClangImporterOpts,
606
+ symbolgraphgen::SymbolGraphOptions &SymbolGraphOpts,
607
+ SourceManager &SourceMgr, DiagnosticEngine &Diags,
608
+ std::function<bool (llvm::StringRef, bool )> PreModuleImportCallback)
607
609
: LangOpts(langOpts), TypeCheckerOpts(typecheckOpts), SILOpts(silOpts),
608
610
SearchPathOpts (SearchPathOpts), ClangImporterOpts(ClangImporterOpts),
609
611
SymbolGraphOpts(SymbolGraphOpts), SourceMgr(SourceMgr), Diags(Diags),
612
+ PreModuleImportCallback(PreModuleImportCallback),
610
613
evaluator(Diags, langOpts), TheBuiltinModule(createBuiltinModule(*this )),
611
614
StdlibModuleName(getIdentifier(STDLIB_NAME)),
612
615
SwiftShimsModuleName(getIdentifier(SWIFT_SHIMS_NAME)),
@@ -622,18 +625,18 @@ ASTContext::ASTContext(LangOptions &langOpts, TypeCheckerOptions &typecheckOpts,
622
625
The##SHORT_ID##Type(new (*this , AllocationArena::Permanent) \
623
626
ID##Type(*this )),
624
627
#include " swift/AST/TypeNodes.def"
625
- TheIEEE32Type (new (*this , AllocationArena::Permanent)
626
- BuiltinFloatType(BuiltinFloatType::IEEE32,*this )),
627
- TheIEEE64Type(new (*this , AllocationArena::Permanent)
628
- BuiltinFloatType(BuiltinFloatType::IEEE64,*this )),
629
- TheIEEE16Type(new (*this , AllocationArena::Permanent)
630
- BuiltinFloatType(BuiltinFloatType::IEEE16,*this )),
631
- TheIEEE80Type(new (*this , AllocationArena::Permanent)
632
- BuiltinFloatType(BuiltinFloatType::IEEE80,*this )),
633
- TheIEEE128Type(new (*this , AllocationArena::Permanent)
634
- BuiltinFloatType(BuiltinFloatType::IEEE128, *this )),
635
- ThePPC128Type(new (*this , AllocationArena::Permanent)
636
- BuiltinFloatType(BuiltinFloatType::PPC128, *this )) {
628
+ TheIEEE32Type (new (*this , AllocationArena::Permanent)
629
+ BuiltinFloatType(BuiltinFloatType::IEEE32, *this )),
630
+ TheIEEE64Type(new (*this , AllocationArena::Permanent)
631
+ BuiltinFloatType(BuiltinFloatType::IEEE64, *this )),
632
+ TheIEEE16Type(new (*this , AllocationArena::Permanent)
633
+ BuiltinFloatType(BuiltinFloatType::IEEE16, *this )),
634
+ TheIEEE80Type(new (*this , AllocationArena::Permanent)
635
+ BuiltinFloatType(BuiltinFloatType::IEEE80, *this )),
636
+ TheIEEE128Type(new (*this , AllocationArena::Permanent)
637
+ BuiltinFloatType(BuiltinFloatType::IEEE128, *this )),
638
+ ThePPC128Type(new (*this , AllocationArena::Permanent)
639
+ BuiltinFloatType(BuiltinFloatType::PPC128, *this )) {
637
640
638
641
// Initialize all of the known identifiers.
639
642
#define IDENTIFIER_WITH_NAME (Name, IdStr ) Id_##Name = getIdentifier(IdStr);
@@ -2211,6 +2214,8 @@ ASTContext::getModule(ImportPath::Module ModulePath) {
2211
2214
return M;
2212
2215
2213
2216
auto moduleID = ModulePath[0 ];
2217
+ if (PreModuleImportCallback)
2218
+ PreModuleImportCallback (moduleID.Item .str (), false /* =IsOverlay*/ );
2214
2219
for (auto &importer : getImpl ().ModuleLoaders ) {
2215
2220
if (ModuleDecl *M = importer->loadModule (moduleID.Loc , ModulePath)) {
2216
2221
if (LangOpts.EnableModuleLoadingRemarks ) {
@@ -2235,12 +2240,17 @@ ModuleDecl *ASTContext::getOverlayModule(const FileUnit *FU) {
2235
2240
return Existing;
2236
2241
}
2237
2242
2243
+ if (PreModuleImportCallback) {
2244
+ SmallString<16 > path;
2245
+ ModPath.getString (path);
2246
+ if (!path.empty ())
2247
+ PreModuleImportCallback (path.str (), /* IsOverlay=*/ true );
2248
+ }
2238
2249
for (auto &importer : getImpl ().ModuleLoaders ) {
2239
2250
if (importer.get () == getClangModuleLoader ())
2240
2251
continue ;
2241
- if (ModuleDecl *M = importer->loadModule (SourceLoc (), ModPath)) {
2252
+ if (ModuleDecl *M = importer->loadModule (SourceLoc (), ModPath))
2242
2253
return M;
2243
- }
2244
2254
}
2245
2255
2246
2256
return nullptr ;
0 commit comments