AST: Introduce SemanticAvailabilitySpec.

It wraps an type-checked `AvailabilitySpec`, which guarantees that the spec has
a valid `AvailabilityDomain` associated with it. This will unblock moving
AvailabilitySpec domain resolution from parsing to sema.
This commit is contained in:
Allan Shortlidge
2025-02-23 10:49:21 -08:00
parent 5bccbe567d
commit eb6506a1ad
13 changed files with 172 additions and 65 deletions

View File

@@ -1052,11 +1052,12 @@ getConditionalMemberFromIfStmt(const IfStmt *ifStmt,
}
for (auto elt : ifStmt->getCond()) {
if (elt.getKind() == StmtConditionElement::CK_Availability) {
for (auto *Q : elt.getAvailability()->getQueries()) {
if (Q->getPlatform() != PlatformKind::none) {
auto spec = BuilderValue::ConditionalMember::AvailabilitySpec(
*Q->getDomain(), Q->getVersion());
AvailabilitySpecs.push_back(spec);
for (auto spec :
elt.getAvailability()->getSemanticAvailabilitySpecs(declContext)) {
if (spec.getDomain().isPlatform()) {
AvailabilitySpecs.push_back(
BuilderValue::ConditionalMember::AvailabilitySpec(
spec.getDomain(), spec.getVersion()));
}
}
memberKind = BuilderValue::LimitedAvailability;