Skip to content

Commit 0af98c9

Browse files
Implement AvailabilityInfo::isUnavailable
1 parent 0f84a4f commit 0af98c9

File tree

2 files changed

+16
-7
lines changed

2 files changed

+16
-7
lines changed

clang/include/clang/ExtractAPI/AvailabilityInfo.h

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,21 @@ struct AvailabilityInfo {
3030
VersionTuple Introduced;
3131
VersionTuple Deprecated;
3232
VersionTuple Obsoleted;
33+
bool Unavailable = false;
3334
bool UnconditionallyDeprecated = false;
3435
bool UnconditionallyUnavailable = false;
3536

3637
AvailabilityInfo() = default;
3738

3839
/// Determine if this AvailabilityInfo represents the default availability.
3940
bool isDefault() const { return *this == AvailabilityInfo(); }
41+
42+
/// Check if the symbol is unavailable unconditionally or
43+
/// on the active platform and os version.
44+
bool isUnavailable() const {
45+
return Unavailable || isUnconditionallyUnavailable();
46+
}
47+
4048
/// Check if the symbol is unconditionally deprecated.
4149
///
4250
/// i.e. \code __attribute__((deprecated)) \endcode
@@ -49,9 +57,10 @@ struct AvailabilityInfo {
4957
}
5058

5159
AvailabilityInfo(StringRef Domain, VersionTuple I, VersionTuple D,
52-
VersionTuple O, bool UD, bool UU)
60+
VersionTuple O, bool U, bool UD, bool UU)
5361
: Domain(Domain), Introduced(I), Deprecated(D), Obsoleted(O),
54-
UnconditionallyDeprecated(UD), UnconditionallyUnavailable(UU) {}
62+
Unavailable(U), UnconditionallyDeprecated(UD),
63+
UnconditionallyUnavailable(UU) {}
5564

5665
friend bool operator==(const AvailabilityInfo &Lhs,
5766
const AvailabilityInfo &Rhs);
@@ -63,10 +72,10 @@ struct AvailabilityInfo {
6372
inline bool operator==(const AvailabilityInfo &Lhs,
6473
const AvailabilityInfo &Rhs) {
6574
return std::tie(Lhs.Introduced, Lhs.Deprecated, Lhs.Obsoleted,
66-
Lhs.UnconditionallyDeprecated,
75+
Lhs.Unavailable, Lhs.UnconditionallyDeprecated,
6776
Lhs.UnconditionallyUnavailable) ==
6877
std::tie(Rhs.Introduced, Rhs.Deprecated, Rhs.Obsoleted,
69-
Rhs.UnconditionallyDeprecated,
78+
Rhs.Unavailable, Rhs.UnconditionallyDeprecated,
7079
Rhs.UnconditionallyUnavailable);
7180
}
7281

clang/lib/ExtractAPI/AvailabilityInfo.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ AvailabilityInfo AvailabilityInfo::createFromDecl(const Decl *Decl) {
1717
for (const auto *A : RD->specific_attrs<AvailabilityAttr>()) {
1818
if (A->getPlatform()->getName() != PlatformName)
1919
continue;
20-
Availability =
21-
AvailabilityInfo(A->getPlatform()->getName(), A->getIntroduced(),
22-
A->getDeprecated(), A->getObsoleted(), false, false);
20+
Availability = AvailabilityInfo(
21+
A->getPlatform()->getName(), A->getIntroduced(), A->getDeprecated(),
22+
A->getObsoleted(), A->getUnavailable(), false, false);
2323
break;
2424
}
2525

0 commit comments

Comments
 (0)