Skip to content

Commit 51aaacc

Browse files
committed
AST: Remove AvailableAttr::getPlatformAgnosticAvailability().
1 parent 2a16797 commit 51aaacc

File tree

5 files changed

+43
-132
lines changed

5 files changed

+43
-132
lines changed

include/swift/AST/Attr.h

Lines changed: 0 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -716,27 +716,6 @@ enum class AvailableVersionComparison {
716716
Obsoleted,
717717
};
718718

719-
/// Describes the platform-agnostic availability of a declaration.
720-
enum class PlatformAgnosticAvailabilityKind : uint8_t {
721-
/// The associated availability attribute is not platform-agnostic.
722-
None,
723-
/// The declaration is deprecated, but can still be used.
724-
Deprecated,
725-
/// The declaration is unavailable in Swift, specifically
726-
UnavailableInSwift,
727-
/// The declaration is available in some but not all versions
728-
/// of Swift, as specified by the VersionTuple members.
729-
SwiftVersionSpecific,
730-
/// The declaration is available in some but not all versions
731-
/// of SwiftPM's PackageDescription library, as specified by
732-
/// the VersionTuple members.
733-
PackageDescriptionVersionSpecific,
734-
/// The declaration is unavailable for other reasons.
735-
Unavailable,
736-
/// The declaration is unavailable from asynchronous contexts
737-
NoAsync,
738-
};
739-
740719
/// Defines the @available attribute.
741720
class AvailableAttr : public DeclAttribute {
742721
AvailabilityDomain Domain;
@@ -824,39 +803,6 @@ class AvailableAttr : public DeclAttribute {
824803
/// Returns the kind of availability the attribute specifies.
825804
Kind getKind() const { return static_cast<Kind>(Bits.AvailableAttr.Kind); }
826805

827-
/// Returns the platform-agnostic availability.
828-
PlatformAgnosticAvailabilityKind getPlatformAgnosticAvailability() const {
829-
// FIXME: [availability] Remove this method entirely.
830-
switch (getKind()) {
831-
case Kind::Default:
832-
if (Domain.isSwiftLanguage())
833-
return PlatformAgnosticAvailabilityKind::SwiftVersionSpecific;
834-
else if (Domain.isPackageDescription())
835-
return PlatformAgnosticAvailabilityKind::
836-
PackageDescriptionVersionSpecific;
837-
else if (Domain.isUniversal() || Domain.isPlatform())
838-
return PlatformAgnosticAvailabilityKind::None;
839-
840-
break;
841-
842-
case Kind::Deprecated:
843-
return PlatformAgnosticAvailabilityKind::Deprecated;
844-
845-
case Kind::Unavailable:
846-
if (Domain.isSwiftLanguage())
847-
return PlatformAgnosticAvailabilityKind::UnavailableInSwift;
848-
else if (Domain.isUniversal() || Domain.isPlatform())
849-
return PlatformAgnosticAvailabilityKind::Unavailable;
850-
851-
break;
852-
853-
case Kind::NoAsync:
854-
return PlatformAgnosticAvailabilityKind::NoAsync;
855-
}
856-
857-
llvm_unreachable("unsupported AvailabilityDomain and Kind");
858-
}
859-
860806
/// Create an `AvailableAttr` that specifies universal unavailability, e.g.
861807
/// `@available(*, unavailable)`.
862808
static AvailableAttr *createUniversallyUnavailable(ASTContext &C,

lib/AST/ASTDumper.cpp

Lines changed: 9 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3892,36 +3892,22 @@ class PrintAttribute : public AttributeVisitor<PrintAttribute, void, StringRef>,
38923892
}
38933893
void visitAvailableAttr(AvailableAttr *Attr, StringRef label) {
38943894
printCommon(Attr, "available_attr", label);
3895-
switch (Attr->getPlatformAgnosticAvailability()) {
3896-
case PlatformAgnosticAvailabilityKind::None:
3897-
case PlatformAgnosticAvailabilityKind::Deprecated:
3898-
case PlatformAgnosticAvailabilityKind::Unavailable:
3899-
case PlatformAgnosticAvailabilityKind::NoAsync:
3900-
printField(Attr->getPlatform(), "platform");
3901-
break;
3902-
case PlatformAgnosticAvailabilityKind::UnavailableInSwift:
3903-
case PlatformAgnosticAvailabilityKind::SwiftVersionSpecific:
3904-
printFieldQuoted("swift", "platform");
3905-
break;
3906-
case PlatformAgnosticAvailabilityKind::PackageDescriptionVersionSpecific:
3907-
printFieldQuoted("_PackageDescription", "platform");
3895+
3896+
if (auto domain = Attr->getCachedDomain())
3897+
printField(domain->getNameForAttributePrinting(), "platform");
3898+
3899+
switch (Attr->getKind()) {
3900+
case swift::AvailableAttr::Kind::Default:
39083901
break;
3909-
}
3910-
switch (Attr->getPlatformAgnosticAvailability()) {
3911-
case PlatformAgnosticAvailabilityKind::Deprecated:
3902+
case swift::AvailableAttr::Kind::Deprecated:
39123903
printFlag("deprecated");
39133904
break;
3914-
case PlatformAgnosticAvailabilityKind::Unavailable:
3915-
case PlatformAgnosticAvailabilityKind::UnavailableInSwift:
3905+
case swift::AvailableAttr::Kind::Unavailable:
39163906
printFlag("unavailable");
39173907
break;
3918-
case PlatformAgnosticAvailabilityKind::NoAsync:
3908+
case swift::AvailableAttr::Kind::NoAsync:
39193909
printFlag("noasync");
39203910
break;
3921-
case PlatformAgnosticAvailabilityKind::None:
3922-
case PlatformAgnosticAvailabilityKind::SwiftVersionSpecific:
3923-
case PlatformAgnosticAvailabilityKind::PackageDescriptionVersionSpecific:
3924-
break;
39253911
}
39263912
if (Attr->Introduced.has_value())
39273913
printFieldRaw(

lib/AST/Attr.cpp

Lines changed: 27 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -439,15 +439,12 @@ static bool isShortAvailable(const SemanticAvailableAttr &attr) {
439439
if (!attr.getRename().empty())
440440
return false;
441441

442-
switch (parsedAttr->getPlatformAgnosticAvailability()) {
443-
case PlatformAgnosticAvailabilityKind::Deprecated:
444-
case PlatformAgnosticAvailabilityKind::Unavailable:
445-
case PlatformAgnosticAvailabilityKind::UnavailableInSwift:
446-
case PlatformAgnosticAvailabilityKind::NoAsync:
442+
switch (parsedAttr->getKind()) {
443+
case AvailableAttr::Kind::NoAsync:
444+
case AvailableAttr::Kind::Deprecated:
445+
case AvailableAttr::Kind::Unavailable:
447446
return false;
448-
case PlatformAgnosticAvailabilityKind::None:
449-
case PlatformAgnosticAvailabilityKind::SwiftVersionSpecific:
450-
case PlatformAgnosticAvailabilityKind::PackageDescriptionVersionSpecific:
447+
case AvailableAttr::Kind::Default:
451448
return true;
452449
}
453450

@@ -2238,42 +2235,42 @@ OriginallyDefinedInAttr *OriginallyDefinedInAttr::clone(ASTContext &C,
22382235
}
22392236

22402237
bool AvailableAttr::isUnconditionallyUnavailable() const {
2241-
switch (getPlatformAgnosticAvailability()) {
2242-
case PlatformAgnosticAvailabilityKind::None:
2243-
case PlatformAgnosticAvailabilityKind::Deprecated:
2244-
case PlatformAgnosticAvailabilityKind::SwiftVersionSpecific:
2245-
case PlatformAgnosticAvailabilityKind::PackageDescriptionVersionSpecific:
2246-
case PlatformAgnosticAvailabilityKind::NoAsync:
2238+
switch (getKind()) {
2239+
case Kind::Default:
2240+
case Kind::Deprecated:
2241+
case Kind::NoAsync:
22472242
return false;
2248-
2249-
case PlatformAgnosticAvailabilityKind::Unavailable:
2250-
case PlatformAgnosticAvailabilityKind::UnavailableInSwift:
2243+
case Kind::Unavailable:
22512244
return true;
22522245
}
22532246

2254-
llvm_unreachable("Unhandled PlatformAgnosticAvailabilityKind in switch.");
2247+
llvm_unreachable("Unhandled AvailableAttr::Kind in switch.");
22552248
}
22562249

22572250
bool AvailableAttr::isUnconditionallyDeprecated() const {
2258-
switch (getPlatformAgnosticAvailability()) {
2259-
case PlatformAgnosticAvailabilityKind::None:
2260-
case PlatformAgnosticAvailabilityKind::Unavailable:
2261-
case PlatformAgnosticAvailabilityKind::UnavailableInSwift:
2262-
case PlatformAgnosticAvailabilityKind::SwiftVersionSpecific:
2263-
case PlatformAgnosticAvailabilityKind::PackageDescriptionVersionSpecific:
2264-
case PlatformAgnosticAvailabilityKind::NoAsync:
2251+
switch (getKind()) {
2252+
case Kind::Default:
2253+
case Kind::Unavailable:
2254+
case Kind::NoAsync:
22652255
return false;
2266-
2267-
case PlatformAgnosticAvailabilityKind::Deprecated:
2256+
case Kind::Deprecated:
22682257
return true;
22692258
}
22702259

2271-
llvm_unreachable("Unhandled PlatformAgnosticAvailabilityKind in switch.");
2260+
llvm_unreachable("Unhandled AvailableAttr::Kind in switch.");
22722261
}
22732262

22742263
bool AvailableAttr::isNoAsync() const {
2275-
return getPlatformAgnosticAvailability() ==
2276-
PlatformAgnosticAvailabilityKind::NoAsync;
2264+
switch (getKind()) {
2265+
case Kind::Default:
2266+
case Kind::Deprecated:
2267+
case Kind::Unavailable:
2268+
return false;
2269+
case Kind::NoAsync:
2270+
return true;
2271+
}
2272+
2273+
llvm_unreachable("Unhandled AvailableAttr::Kind in switch.");
22772274
}
22782275

22792276
llvm::VersionTuple

lib/AST/Availability.cpp

Lines changed: 3 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -447,27 +447,9 @@ Decl::getSemanticAvailableAttrs(bool includeInactive) const {
447447

448448
std::optional<SemanticAvailableAttr>
449449
Decl::getSemanticAvailableAttr(const AvailableAttr *attr) const {
450-
auto domainForAvailableAttr = [](const AvailableAttr *attr) {
451-
auto platform = attr->getPlatform();
452-
if (platform != PlatformKind::none)
453-
return AvailabilityDomain::forPlatform(platform);
454-
455-
switch (attr->getPlatformAgnosticAvailability()) {
456-
case PlatformAgnosticAvailabilityKind::Deprecated:
457-
case PlatformAgnosticAvailabilityKind::Unavailable:
458-
case PlatformAgnosticAvailabilityKind::NoAsync:
459-
case PlatformAgnosticAvailabilityKind::None:
460-
return AvailabilityDomain::forUniversal();
461-
462-
case PlatformAgnosticAvailabilityKind::UnavailableInSwift:
463-
case PlatformAgnosticAvailabilityKind::SwiftVersionSpecific:
464-
return AvailabilityDomain::forSwiftLanguage();
465-
466-
case PlatformAgnosticAvailabilityKind::PackageDescriptionVersionSpecific:
467-
return AvailabilityDomain::forPackageDescription();
468-
}
469-
};
470-
return SemanticAvailableAttr(attr, domainForAvailableAttr(attr));
450+
if (auto domain = attr->getCachedDomain())
451+
return SemanticAvailableAttr(attr, *domain);
452+
return std::nullopt;
471453
}
472454

473455
std::optional<SemanticAvailableAttr>

lib/Serialization/Serialization.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3058,10 +3058,10 @@ class Serializer::DeclSerializer : public DeclVisitor<DeclSerializer> {
30583058

30593059
assert(theAttr->Rename.empty() || !theAttr->hasCachedRenamedDecl());
30603060

3061-
bool isPackageDescriptionVersionSpecific =
3062-
theAttr->getPlatformAgnosticAvailability() ==
3063-
PlatformAgnosticAvailabilityKind::PackageDescriptionVersionSpecific;
3061+
auto domain = theAttr->getCachedDomain();
3062+
assert(domain);
30643063

3064+
// FIXME: [availability] Serialize domain and kind directly.
30653065
llvm::SmallString<32> blob;
30663066
blob.append(theAttr->Message);
30673067
blob.append(theAttr->Rename);
@@ -3072,7 +3072,7 @@ class Serializer::DeclSerializer : public DeclVisitor<DeclSerializer> {
30723072
theAttr->isUnconditionallyUnavailable(),
30733073
theAttr->isUnconditionallyDeprecated(),
30743074
theAttr->isNoAsync(),
3075-
isPackageDescriptionVersionSpecific,
3075+
domain->isPackageDescription(),
30763076
theAttr->isSPI(),
30773077
theAttr->isForEmbedded(),
30783078
LIST_VER_TUPLE_PIECES(Introduced),

0 commit comments

Comments
 (0)