Skip to content

Commit 6e1f0ae

Browse files
committed
AST: Use PointerIntPair in AvailabilityConstraint.
Now that SemanticAvailableAttr is pointer-like, AvailabilityConstraint can be pointer sized too. NFC.
1 parent 8d5c27e commit 6e1f0ae

File tree

2 files changed

+12
-11
lines changed

2 files changed

+12
-11
lines changed

include/swift/AST/AvailabilityConstraint.h

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,10 @@ class AvailabilityConstraint {
5959
};
6060

6161
private:
62-
Kind kind;
63-
SemanticAvailableAttr attr;
62+
llvm::PointerIntPair<SemanticAvailableAttr, 2, Kind> attrAndKind;
6463

6564
AvailabilityConstraint(Kind kind, SemanticAvailableAttr attr)
66-
: kind(kind), attr(attr) {};
65+
: attrAndKind(attr, kind) {};
6766

6867
public:
6968
static AvailabilityConstraint
@@ -84,8 +83,10 @@ class AvailabilityConstraint {
8483
return AvailabilityConstraint(Kind::IntroducedInNewerVersion, attr);
8584
}
8685

87-
Kind getKind() const { return kind; }
88-
SemanticAvailableAttr getAttr() const { return attr; }
86+
Kind getKind() const { return attrAndKind.getInt(); }
87+
SemanticAvailableAttr getAttr() const {
88+
return static_cast<SemanticAvailableAttr>(attrAndKind.getPointer());
89+
}
8990

9091
/// Returns the platform that this constraint applies to, or
9192
/// `PlatformKind::none` if it is not platform specific.

lib/AST/Availability.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,24 +68,24 @@ AvailabilityRange AvailabilityRange::forRuntimeTarget(const ASTContext &Ctx) {
6868
}
6969

7070
PlatformKind AvailabilityConstraint::getPlatform() const {
71-
return attr.getPlatform();
71+
return getAttr().getPlatform();
7272
}
7373

7474
std::optional<AvailabilityRange>
7575
AvailabilityConstraint::getRequiredNewerAvailabilityRange(
7676
ASTContext &ctx) const {
77-
switch (kind) {
77+
switch (getKind()) {
7878
case Kind::AlwaysUnavailable:
7979
case Kind::RequiresVersion:
8080
case Kind::Obsoleted:
8181
return std::nullopt;
8282
case Kind::IntroducedInNewerVersion:
83-
return attr.getIntroducedRange(ctx);
83+
return getAttr().getIntroducedRange(ctx);
8484
}
8585
}
8686

8787
bool AvailabilityConstraint::isConditionallySatisfiable() const {
88-
switch (kind) {
88+
switch (getKind()) {
8989
case Kind::AlwaysUnavailable:
9090
case Kind::RequiresVersion:
9191
case Kind::Obsoleted:
@@ -96,10 +96,10 @@ bool AvailabilityConstraint::isConditionallySatisfiable() const {
9696
}
9797

9898
bool AvailabilityConstraint::isActiveForRuntimeQueries(ASTContext &ctx) const {
99-
if (attr.getPlatform() == PlatformKind::none)
99+
if (getAttr().getPlatform() == PlatformKind::none)
100100
return true;
101101

102-
return swift::isPlatformActive(attr.getPlatform(), ctx.LangOpts,
102+
return swift::isPlatformActive(getAttr().getPlatform(), ctx.LangOpts,
103103
/*forTargetVariant=*/false,
104104
/*forRuntimeQuery=*/true);
105105
}

0 commit comments

Comments
 (0)