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 (() && 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...