clang: include/clang/AST/ComparisonCategories.h Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

13

14#ifndef LLVM_CLANG_AST_COMPARISONCATEGORIES_H

15#define LLVM_CLANG_AST_COMPARISONCATEGORIES_H

16

18#include "llvm/ADT/APSInt.h"

19#include "llvm/ADT/DenseMap.h"

20#include

21#include

22#include

23#include

24

25namespace llvm {

26 class StringRef;

28}

29

31

38

39

40

41

42

43

51

52

53

56 return A < B ? A : B;

57}

58

59

60

61std::optional

63

64

65

66

75

79

80public:

84

88

91

92

93

95

96

97

99 };

100private:

102

103

104

107 Objects;

108

109

110

111

112

113

115

116public:

117

118

120

121

123

124public:

126

128 ValueInfo *Info = lookupValueInfo(ValueKind);

129 assert(Info &&

130 "comparison category does not contain the specified result kind");

132 "couldn't determine the integer constant for this value");

133 return Info;

134 }

135

136

137

140 return Kind == CCK::StrongOrdering;

141 }

142

143

146 return Kind == CCK::PartialOrdering;

147 }

148

149

150

151

154 if (isStrong() && Res == CCR::Equal)

155 return CCR::Equivalent;

156 return Res;

157 }

158

172};

173

174class ComparisonCategories {

175public:

178

179

180

181 static std::vector

183

184

185

188 assert(Result != nullptr &&

189 "information for specified comparison category has not been built");

191 }

192

193

194

195

196

197

199

200public:

201

202

203

204

206

208 const auto &This = *this;

210 }

211

213

214private:

216

217 explicit ComparisonCategories(const ASTContext &Ctx) : Ctx(Ctx) {}

218

220

221

222

223 mutable llvm::DenseMap<char, ComparisonCategoryInfo> Data;

225};

226

227}

228

229#endif

Forward-declares and imports various common LLVM datatypes that clang wants to use unqualified.

a trap message and trap category.

Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...

Represents a C++ struct/union/class.

const ComparisonCategoryInfo * lookupInfoForType(QualType Ty) const

ComparisonCategoryInfo * lookupInfo(ComparisonCategoryType Kind)

Definition ComparisonCategories.h:207

const ComparisonCategoryInfo & getInfoForType(QualType Ty) const

Return the comparison category information as specified by getCategoryForType(Ty).

const ComparisonCategoryInfo * lookupInfo(ComparisonCategoryType Kind) const

Return the cached comparison category information for the specified 'Kind'.

friend class ASTContext

Definition ComparisonCategories.h:215

const ComparisonCategoryInfo & getInfo(ComparisonCategoryType Kind) const

Return the comparison category information for the category specified by 'Kind'.

Definition ComparisonCategories.h:186

static StringRef getCategoryString(ComparisonCategoryType Kind)

static StringRef getResultString(ComparisonCategoryResult Kind)

static std::vector< ComparisonCategoryResult > getPossibleResultsForType(ComparisonCategoryType Type)

Return the list of results which are valid for the specified comparison category type.

bool isPartial() const

True iff the comparison is not totally ordered.

Definition ComparisonCategories.h:144

const ValueInfo * getLess() const

Definition ComparisonCategories.h:162

const ValueInfo * getUnordered() const

Definition ComparisonCategories.h:168

const CXXRecordDecl * Record

The declaration for the comparison category type from the standard library.

Definition ComparisonCategories.h:119

const ValueInfo * getValueInfo(ComparisonCategoryResult ValueKind) const

Definition ComparisonCategories.h:127

ComparisonCategoryType Kind

The Kind of the comparison category type.

Definition ComparisonCategories.h:122

friend class Sema

Definition ComparisonCategories.h:78

bool isStrong() const

True iff the comparison is "strong".

Definition ComparisonCategories.h:138

const ValueInfo * getGreater() const

Definition ComparisonCategories.h:165

friend class ComparisonCategories

Definition ComparisonCategories.h:77

const ValueInfo * getEqualOrEquiv() const

Definition ComparisonCategories.h:159

ComparisonCategoryResult makeWeakResult(ComparisonCategoryResult Res) const

Converts the specified result kind into the correct result kind for this category.

Definition ComparisonCategories.h:152

ComparisonCategoryInfo(const ASTContext &Ctx, const CXXRecordDecl *RD, ComparisonCategoryType Kind)

Definition ComparisonCategories.h:81

Represent a C++ namespace.

A (possibly-)qualified type.

Sema - This implements semantic analysis and AST building for C.

The base class of the type hierarchy.

Represents a variable declaration or definition.

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

std::optional< ComparisonCategoryType > getComparisonCategoryForBuiltinCmp(QualType T)

Get the comparison category that should be used when comparing values of type T.

ComparisonCategoryType commonComparisonType(ComparisonCategoryType A, ComparisonCategoryType B)

Determine the common comparison type, as defined in C++2a [class.spaceship]p4.

Definition ComparisonCategories.h:54

ComparisonCategoryResult

An enumeration representing the possible results of a three-way comparison.

Definition ComparisonCategories.h:67

@ Less

Definition ComparisonCategories.h:70

@ Unordered

Definition ComparisonCategories.h:72

@ Greater

Definition ComparisonCategories.h:71

@ Equivalent

Definition ComparisonCategories.h:69

@ Last

Definition ComparisonCategories.h:73

@ Equal

Definition ComparisonCategories.h:68

@ Result

The result type of a method or function.

ComparisonCategoryType

An enumeration representing the different comparison categories types.

Definition ComparisonCategories.h:44

@ PartialOrdering

Definition ComparisonCategories.h:45

@ WeakOrdering

Definition ComparisonCategories.h:46

@ First

Definition ComparisonCategories.h:48

@ Last

Definition ComparisonCategories.h:49

@ StrongOrdering

Definition ComparisonCategories.h:47

Diagnostic wrappers for TextAPI types for error reporting.

ValueInfo(ComparisonCategoryResult Kind, VarDecl *VD)

Definition ComparisonCategories.h:89

bool hasValidIntValue() const

True iff we've successfully evaluated the variable as a constant expression and extracted its integer...

ComparisonCategoryResult Kind

Definition ComparisonCategories.h:86

VarDecl * VD

Definition ComparisonCategories.h:87

llvm::APSInt getIntValue() const

Get the constant integer value used by this variable to represent the comparison category result type...