mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
AST/Sema: Look up custom availability domains by name.
Store the domain definitions defined on the command line on the `ModuleDecl` for the main module.
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
|
||||
#include "swift/Frontend/Frontend.h"
|
||||
#include "swift/AST/ASTContext.h"
|
||||
#include "swift/AST/AvailabilityDomain.h"
|
||||
#include "swift/AST/DiagnosticsFrontend.h"
|
||||
#include "swift/AST/DiagnosticsSema.h"
|
||||
#include "swift/AST/FileSystem.h"
|
||||
@@ -29,6 +30,7 @@
|
||||
#include "swift/Basic/Platform.h"
|
||||
#include "swift/Basic/SourceManager.h"
|
||||
#include "swift/Basic/Statistic.h"
|
||||
#include "swift/DependencyScan/ModuleDependencyScanner.h"
|
||||
#include "swift/Frontend/CachingUtils.h"
|
||||
#include "swift/Frontend/CompileJobCacheKey.h"
|
||||
#include "swift/Frontend/ModuleInterfaceLoader.h"
|
||||
@@ -36,17 +38,15 @@
|
||||
#include "swift/SIL/SILModule.h"
|
||||
#include "swift/SILOptimizer/PassManager/Passes.h"
|
||||
#include "swift/SILOptimizer/Utils/Generics.h"
|
||||
#include "swift/Serialization/ScanningLoaders.h"
|
||||
#include "swift/Serialization/SerializationOptions.h"
|
||||
#include "swift/Serialization/SerializedModuleLoader.h"
|
||||
#include "swift/Serialization/ScanningLoaders.h"
|
||||
#include "swift/DependencyScan/ModuleDependencyScanner.h"
|
||||
#include "swift/Strings.h"
|
||||
#include "swift/Subsystems.h"
|
||||
#include "clang/AST/ASTContext.h"
|
||||
#include "llvm/ADT/Hashing.h"
|
||||
#include "llvm/ADT/IntrusiveRefCntPtr.h"
|
||||
#include "llvm/ADT/SmallVector.h"
|
||||
#include "llvm/TargetParser/Triple.h"
|
||||
#include "llvm/CAS/ActionCache.h"
|
||||
#include "llvm/CAS/BuiltinUnifiedCASDatabases.h"
|
||||
#include "llvm/CAS/CASFileSystem.h"
|
||||
@@ -55,8 +55,9 @@
|
||||
#include "llvm/Support/MemoryBuffer.h"
|
||||
#include "llvm/Support/Path.h"
|
||||
#include "llvm/Support/Process.h"
|
||||
#include "llvm/Support/VirtualOutputBackends.h"
|
||||
#include "llvm/Support/ThreadPool.h"
|
||||
#include "llvm/Support/VirtualOutputBackends.h"
|
||||
#include "llvm/TargetParser/Triple.h"
|
||||
#include <llvm/ADT/StringExtras.h>
|
||||
|
||||
using namespace swift;
|
||||
@@ -1392,6 +1393,28 @@ bool CompilerInstance::createFilesForMainModule(
|
||||
return false;
|
||||
}
|
||||
|
||||
static void configureAvailabilityDomains(const ASTContext &ctx,
|
||||
const FrontendOptions &opts,
|
||||
ModuleDecl *mainModule) {
|
||||
llvm::SmallDenseMap<Identifier, CustomAvailabilityDomain *> domainMap;
|
||||
auto createAndInsertDomain = [&](const std::string &name,
|
||||
CustomAvailabilityDomain::Kind kind) {
|
||||
auto *domain = CustomAvailabilityDomain::create(
|
||||
ctx, name, mainModule, CustomAvailabilityDomain::Kind::Enabled);
|
||||
bool inserted = domainMap.insert({domain->getName(), domain}).second;
|
||||
ASSERT(inserted); // Domains must be unique.
|
||||
};
|
||||
|
||||
for (auto enabled : opts.AvailabilityDomains.EnabledDomains)
|
||||
createAndInsertDomain(enabled, CustomAvailabilityDomain::Kind::Enabled);
|
||||
for (auto disabled : opts.AvailabilityDomains.DisabledDomains)
|
||||
createAndInsertDomain(disabled, CustomAvailabilityDomain::Kind::Disabled);
|
||||
for (auto dynamic : opts.AvailabilityDomains.DynamicDomains)
|
||||
createAndInsertDomain(dynamic, CustomAvailabilityDomain::Kind::Dynamic);
|
||||
|
||||
mainModule->setAvailabilityDomains(std::move(domainMap));
|
||||
}
|
||||
|
||||
ModuleDecl *CompilerInstance::getMainModule() const {
|
||||
if (MainModule)
|
||||
return MainModule;
|
||||
@@ -1441,6 +1464,9 @@ ModuleDecl *CompilerInstance::getMainModule() const {
|
||||
if (Invocation.getLangOptions().hasFeature(Feature::WarnUnsafe))
|
||||
MainModule->setStrictMemorySafety(true);
|
||||
|
||||
configureAvailabilityDomains(getASTContext(),
|
||||
Invocation.getFrontendOptions(), MainModule);
|
||||
|
||||
if (!Invocation.getFrontendOptions()
|
||||
.SwiftInterfaceCompilerVersion.empty()) {
|
||||
auto compilerVersion =
|
||||
|
||||
Reference in New Issue
Block a user