|
17 | 17 |
|
18 | 18 | #include "swift/Frontend/Frontend.h" |
19 | 19 | #include "swift/AST/ASTContext.h" |
| 20 | +#include "swift/AST/AvailabilityDomain.h" |
20 | 21 | #include "swift/AST/DiagnosticsFrontend.h" |
21 | 22 | #include "swift/AST/DiagnosticsSema.h" |
22 | 23 | #include "swift/AST/FileSystem.h" |
|
29 | 30 | #include "swift/Basic/Platform.h" |
30 | 31 | #include "swift/Basic/SourceManager.h" |
31 | 32 | #include "swift/Basic/Statistic.h" |
| 33 | +#include "swift/DependencyScan/ModuleDependencyScanner.h" |
32 | 34 | #include "swift/Frontend/CachingUtils.h" |
33 | 35 | #include "swift/Frontend/CompileJobCacheKey.h" |
34 | 36 | #include "swift/Frontend/ModuleInterfaceLoader.h" |
35 | 37 | #include "swift/Parse/Lexer.h" |
36 | 38 | #include "swift/SIL/SILModule.h" |
37 | 39 | #include "swift/SILOptimizer/PassManager/Passes.h" |
38 | 40 | #include "swift/SILOptimizer/Utils/Generics.h" |
| 41 | +#include "swift/Serialization/ScanningLoaders.h" |
39 | 42 | #include "swift/Serialization/SerializationOptions.h" |
40 | 43 | #include "swift/Serialization/SerializedModuleLoader.h" |
41 | | -#include "swift/Serialization/ScanningLoaders.h" |
42 | | -#include "swift/DependencyScan/ModuleDependencyScanner.h" |
43 | 44 | #include "swift/Strings.h" |
44 | 45 | #include "swift/Subsystems.h" |
45 | 46 | #include "clang/AST/ASTContext.h" |
46 | 47 | #include "llvm/ADT/Hashing.h" |
47 | 48 | #include "llvm/ADT/IntrusiveRefCntPtr.h" |
48 | 49 | #include "llvm/ADT/SmallVector.h" |
49 | | -#include "llvm/TargetParser/Triple.h" |
50 | 50 | #include "llvm/CAS/ActionCache.h" |
51 | 51 | #include "llvm/CAS/BuiltinUnifiedCASDatabases.h" |
52 | 52 | #include "llvm/CAS/CASFileSystem.h" |
|
55 | 55 | #include "llvm/Support/MemoryBuffer.h" |
56 | 56 | #include "llvm/Support/Path.h" |
57 | 57 | #include "llvm/Support/Process.h" |
58 | | -#include "llvm/Support/VirtualOutputBackends.h" |
59 | 58 | #include "llvm/Support/ThreadPool.h" |
| 59 | +#include "llvm/Support/VirtualOutputBackends.h" |
| 60 | +#include "llvm/TargetParser/Triple.h" |
60 | 61 | #include <llvm/ADT/StringExtras.h> |
61 | 62 |
|
62 | 63 | using namespace swift; |
@@ -1392,6 +1393,28 @@ bool CompilerInstance::createFilesForMainModule( |
1392 | 1393 | return false; |
1393 | 1394 | } |
1394 | 1395 |
|
| 1396 | +static void configureAvailabilityDomains(const ASTContext &ctx, |
| 1397 | + const FrontendOptions &opts, |
| 1398 | + ModuleDecl *mainModule) { |
| 1399 | + llvm::SmallDenseMap<Identifier, CustomAvailabilityDomain *> domainMap; |
| 1400 | + auto createAndInsertDomain = [&](const std::string &name, |
| 1401 | + CustomAvailabilityDomain::Kind kind) { |
| 1402 | + auto *domain = CustomAvailabilityDomain::create( |
| 1403 | + ctx, name, mainModule, CustomAvailabilityDomain::Kind::Enabled); |
| 1404 | + bool inserted = domainMap.insert({domain->getName(), domain}).second; |
| 1405 | + ASSERT(inserted); // Domains must be unique. |
| 1406 | + }; |
| 1407 | + |
| 1408 | + for (auto enabled : opts.AvailabilityDomains.EnabledDomains) |
| 1409 | + createAndInsertDomain(enabled, CustomAvailabilityDomain::Kind::Enabled); |
| 1410 | + for (auto disabled : opts.AvailabilityDomains.DisabledDomains) |
| 1411 | + createAndInsertDomain(disabled, CustomAvailabilityDomain::Kind::Disabled); |
| 1412 | + for (auto dynamic : opts.AvailabilityDomains.DynamicDomains) |
| 1413 | + createAndInsertDomain(dynamic, CustomAvailabilityDomain::Kind::Dynamic); |
| 1414 | + |
| 1415 | + mainModule->setAvailabilityDomains(std::move(domainMap)); |
| 1416 | +} |
| 1417 | + |
1395 | 1418 | ModuleDecl *CompilerInstance::getMainModule() const { |
1396 | 1419 | if (MainModule) |
1397 | 1420 | return MainModule; |
@@ -1441,6 +1464,9 @@ ModuleDecl *CompilerInstance::getMainModule() const { |
1441 | 1464 | if (Invocation.getLangOptions().hasFeature(Feature::WarnUnsafe)) |
1442 | 1465 | MainModule->setStrictMemorySafety(true); |
1443 | 1466 |
|
| 1467 | + configureAvailabilityDomains(getASTContext(), |
| 1468 | + Invocation.getFrontendOptions(), MainModule); |
| 1469 | + |
1444 | 1470 | if (!Invocation.getFrontendOptions() |
1445 | 1471 | .SwiftInterfaceCompilerVersion.empty()) { |
1446 | 1472 | auto compilerVersion = |
|
0 commit comments