clang: lib/AST/Availability.cpp Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

18

19namespace {

20

21

22struct AvailabilitySet {

23 bool UnconditionallyDeprecated = false;

24 bool UnconditionallyUnavailable = false;

25

27 auto *Found = getForPlatform(Availability.Domain);

28 if (Found)

29 Found->mergeWith(std::move(Availability));

30 else

31 Availabilities.emplace_back(std::move(Availability));

32 }

33

35 auto *It = llvm::find_if(Availabilities,

38 });

39 return It == Availabilities.end() ? nullptr : It;

40 }

41

42private:

44};

45

46static void createInfoForDecl(const clang::Decl *Decl,

47 AvailabilitySet &Availabilities) {

48

49 for (const auto *RD : Decl->redecls()) {

50 for (const auto *A : RD->specific_attrsclang::AvailabilityAttr()) {

52 A->getPlatform()->getName(), A->getIntroduced(), A->getDeprecated(),

53 A->getObsoleted(), A->getUnavailable(), false, false));

54 }

55

56 if (const auto *A = RD->getAttrclang::UnavailableAttr())

57 if (!A->isImplicit())

58 Availabilities.UnconditionallyUnavailable = true;

59

60 if (const auto *A = RD->getAttrclang::DeprecatedAttr())

61 if (!A->isImplicit())

62 Availabilities.UnconditionallyDeprecated = true;

63 }

64}

65

66}

67

69

72 return;

73

76

80

82

83

84

85

88 else

90

93 else

95}

96

98 AvailabilitySet Availabilities;

99

100

101 for (const auto *Ctx = D; Ctx;

102 Ctx = llvm::cast_or_null(Ctx->getDeclContext()))

103 createInfoForDecl(Ctx, Availabilities);

104

105 if (auto *Avail = Availabilities.getForPlatform(

106 D->getASTContext().getTargetInfo().getPlatformName())) {

107 Avail->UnconditionallyDeprecated = Availabilities.UnconditionallyDeprecated;

108 Avail->UnconditionallyUnavailable =

109 Availabilities.UnconditionallyUnavailable;

110 return std::move(*Avail);

111 }

112

116 return Avail;

117}

118

119}

Defines the clang::ASTContext interface.

Decl - This represents one declaration (or definition), e.g.

Defines the clang::TargetInfo interface.

@ Decl

The l-value was an access to a declared entity or something equivalently strong, like the address of ...

The JSON file list parser is used to communicate input to InstallAPI.

@ Other

Other implicit parameter.

Storage of availability attributes for a declaration.

llvm::SmallString< 32 > Domain

The domain is the platform for which this availability info applies to.

bool isDefault() const

Determine if this AvailabilityInfo represents the default availability.

void mergeWith(AvailabilityInfo Other)

Augments the existing information with additional constraints provided by Other.

bool UnconditionallyDeprecated

static AvailabilityInfo createFromDecl(const Decl *Decl)

bool UnconditionallyUnavailable