ClangImporter: Look up availability domains defined in bridging headers.

This is very brittle in this first iteration. For now we require the
declaration representing the availability domain be deserialized before it can
be looked up by name since Clang does not have a lookup table for availabilty
domains in its module representation. As a result, it only works for bridging
headers that are not precompiled.

Part of rdar://138441266.
This commit is contained in:
Allan Shortlidge
2025-03-12 18:50:10 -07:00
parent 275a6792d1
commit 017dae382e
12 changed files with 153 additions and 32 deletions

View File

@@ -1090,6 +1090,18 @@ void ModuleDecl::lookupImportedSPIGroups(
FORWARD(lookupImportedSPIGroups, (importedModule, spiGroups));
}
void ModuleDecl::lookupAvailabilityDomains(
Identifier identifier,
llvm::SmallVectorImpl<AvailabilityDomain> &results) const {
auto iter = AvailabilityDomains.find(identifier);
if (iter != AvailabilityDomains.end()) {
results.push_back(AvailabilityDomain::forCustom(iter->getSecond()));
return;
}
FORWARD(lookupAvailabilityDomains, (identifier, results));
}
void BuiltinUnit::lookupValue(DeclName name, NLKind lookupKind,
OptionSet<ModuleLookupFlags> Flags,
SmallVectorImpl<ValueDecl*> &result) const {
@@ -4172,15 +4184,6 @@ version::Version ModuleDecl::getLanguageVersionBuiltWith() const {
return version::Version();
}
std::optional<AvailabilityDomain>
ModuleDecl::getAvailabilityDomainForIdentifier(Identifier identifier) const {
auto iter = AvailabilityDomains.find(identifier);
if (iter == AvailabilityDomains.end())
return std::nullopt;
return AvailabilityDomain::forCustom(iter->getSecond());
}
//===----------------------------------------------------------------------===//
// MARK: SwiftSettings
//===----------------------------------------------------------------------===//