clang: include/clang/AST/DependenceFlags.h Source File (original) (raw)
1
2
3
4
5
6
7
8#ifndef LLVM_CLANG_AST_DEPENDENCEFLAGS_H
9#define LLVM_CLANG_AST_DEPENDENCEFLAGS_H
10
12#include "llvm/ADT/BitmaskEnum.h"
13#include
14
19
20
21
22
23
24
25
26
28
30
32
33
34
36
39
45
47 };
48};
50
53
54
56
57
58
59
61
62
63
65
67
68
69
71
74
76
78 };
79};
81
82#define LLVM_COMMON_DEPENDENCE(NAME) \
83 struct NAME##Scope { \
84 enum NAME : uint8_t { \
85 UnexpandedPack = 1, \
86 Instantiation = 2, \
87 Dependent = 4, \
88 Error = 8, \
89 \
90 None = 0, \
91 DependentInstantiation = Dependent | Instantiation, \
92 All = 15, \
93 \
94 LLVM_MARK_AS_BITMASK_ENUM(Error) \
95 }; \
96 }; \
97 using NAME = NAME##Scope::NAME;
98
102#undef LLVM_COMMON_DEPENDENCE
103
104
105
107public:
110
111
113
114
115
117
118
120
121
123
124
126
128
130
131
133
134
135
136
137
138
141
143 };
144
146
153
160
166
172
178
179
185
186
187
193
195 return translate(V, UnexpandedPack, TypeDependence::UnexpandedPack) |
196 translate(V, Instantiation, TypeDependence::Instantiation) |
197 translate(V, Dependent, TypeDependence::Dependent) |
198 translate(V, Error, TypeDependence::Error) |
199 translate(V, VariablyModified, TypeDependence::VariablyModified);
200 }
201
203 return translate(V, UnexpandedPack, ExprDependence::UnexpandedPack) |
204 translate(V, Instantiation, ExprDependence::Instantiation) |
205 translate(V, Type, ExprDependence::Type) |
206 translate(V, Value, ExprDependence::Value) |
207 translate(V, Error, ExprDependence::Error);
208 }
209
211 return translate(V, UnexpandedPack, NNSDependence::UnexpandedPack) |
212 translate(V, Instantiation, NNSDependence::Instantiation) |
213 translate(V, Dependent, NNSDependence::Dependent) |
214 translate(V, Error, NNSDependence::Error);
215 }
216
218 return translate(V, UnexpandedPack, TADependence::UnexpandedPack) |
219 translate(V, Instantiation, TADependence::Instantiation) |
220 translate(V, Dependent, TADependence::Dependent) |
221 translate(V, Error, TADependence::Error);
222 }
223
225 return translate(V, UnexpandedPack, TNDependence::UnexpandedPack) |
226 translate(V, Instantiation, TNDependence::Instantiation) |
227 translate(V, Dependent, TNDependence::Dependent) |
228 translate(V, Error, TNDependence::Error);
229 }
230
231private:
232 Bits V;
233
234 template <typename T, typename U>
235 static U translate(T Bits, T FromBit, U ToBit) {
236 return (Bits & FromBit) ? ToBit : static_cast<U>(0);
237 }
238
239
240 using NNSDependence = NestedNameSpecifierDependence;
241 using TADependence = TemplateArgumentDependence;
242 using TNDependence = TemplateNameDependence;
243};
244
245
246
256
257
258
268
269 if (D & ExprDependence::Value)
270 D |= ExprDependence::Type;
271 return D;
272}
273
274
287
294
295inline NestedNameSpecifierDependence
299
300inline TemplateArgumentDependence
304inline TemplateArgumentDependence
308inline TemplateArgumentDependence
312
313inline TemplateNameDependence
317
318inline TemplateNameDependence
322
324
325}
326#endif
Provides LLVM's BitmaskEnum facility to enumeration types declared in namespace clang.
@ LLVM_MARK_AS_BITMASK_ENUM
#define LLVM_COMMON_DEPENDENCE(NAME)
Definition DependenceFlags.h:82
Definition DependenceFlags.h:106
Dependence(TemplateNameDependence D)
Definition DependenceFlags.h:173
Dependence()
Definition DependenceFlags.h:145
Dependence(ExprDependence D)
Definition DependenceFlags.h:154
TemplateArgumentDependence templateArgument() const
Definition DependenceFlags.h:217
Dependence syntactic()
Extract only the syntactic portions of this type's dependence.
Definition DependenceFlags.h:180
TypeDependence type() const
Definition DependenceFlags.h:194
Dependence(NestedNameSpecifierDependence D)
Definition DependenceFlags.h:161
Dependence(TemplateArgumentDependence D)
Definition DependenceFlags.h:167
Bits
Definition DependenceFlags.h:108
@ Dependent
Definition DependenceFlags.h:125
@ Value
Definition DependenceFlags.h:122
@ Error
Definition DependenceFlags.h:127
@ Syntactic
Definition DependenceFlags.h:132
@ Semantic
Definition DependenceFlags.h:139
@ VariablyModified
Definition DependenceFlags.h:129
@ None
Definition DependenceFlags.h:109
@ Type
Definition DependenceFlags.h:119
@ UnexpandedPack
Definition DependenceFlags.h:112
@ Instantiation
Definition DependenceFlags.h:116
NestedNameSpecifierDependence nestedNameSpecifier() const
Definition DependenceFlags.h:210
TemplateNameDependence templateName() const
Definition DependenceFlags.h:224
Dependence(TypeDependence D)
Definition DependenceFlags.h:147
ExprDependence expr() const
Definition DependenceFlags.h:202
Dependence semantic()
Extract the semantic portions of this type's dependence that apply even to uses where the type does n...
Definition DependenceFlags.h:188
The base class of the type hierarchy.
The JSON file list parser is used to communicate input to InstallAPI.
ExprDependence toExprDependence(TemplateArgumentDependence TA)
Computes dependencies of a reference with the name having template arguments with TA dependencies.
Definition DependenceFlags.h:247
ExprDependenceScope::ExprDependence ExprDependence
Definition DependenceFlags.h:49
TypeDependenceScope::TypeDependence TypeDependence
Definition DependenceFlags.h:80
ExprDependence turnTypeToValueDependence(ExprDependence D)
Definition DependenceFlags.h:262
ExprDependence toExprDependenceAsWritten(TypeDependence D)
Definition DependenceFlags.h:253
LLVM_ENABLE_BITMASK_ENUMS_IN_NAMESPACE()
TypeDependence toTypeDependence(ExprDependence D)
Definition DependenceFlags.h:275
TemplateNameDependence toTemplateNameDependence(NestedNameSpecifierDependence D)
Definition DependenceFlags.h:314
ExprDependence turnValueToTypeDependence(ExprDependence D)
Definition DependenceFlags.h:267
@ Result
The result type of a method or function.
const FunctionProtoType * T
ExprDependence toExprDependenceForImpliedType(TypeDependence D)
Definition DependenceFlags.h:250
NestedNameSpecifierDependence toNestedNameSpecifierDependence(TypeDependence D)
Definition DependenceFlags.h:296
TemplateArgumentDependence toTemplateArgumentDependence(TypeDependence D)
Definition DependenceFlags.h:301
TypeDependence toSemanticDependence(TypeDependence D)
Definition DependenceFlags.h:291
TypeDependence toSyntacticDependence(TypeDependence D)
Definition DependenceFlags.h:288
Definition DependenceFlags.h:16
ExprDependence
Definition DependenceFlags.h:17
@ UnexpandedPack
Definition DependenceFlags.h:18
@ None
Definition DependenceFlags.h:37
@ TypeValue
Definition DependenceFlags.h:40
@ ValueInstantiation
Definition DependenceFlags.h:42
@ Value
Definition DependenceFlags.h:31
@ Type
Definition DependenceFlags.h:29
@ Error
Definition DependenceFlags.h:35
@ TypeValueInstantiation
Definition DependenceFlags.h:43
@ ErrorDependent
Definition DependenceFlags.h:44
@ Instantiation
Definition DependenceFlags.h:27
@ TypeInstantiation
Definition DependenceFlags.h:41
@ All
Definition DependenceFlags.h:38
Definition DependenceFlags.h:51
TypeDependence
Definition DependenceFlags.h:52
@ DependentInstantiation
Definition DependenceFlags.h:75
@ Dependent
Whether this type.
Definition DependenceFlags.h:64
@ All
Definition DependenceFlags.h:73
@ VariablyModified
Whether this type is a variably-modified type (C99 6.7.5).
Definition DependenceFlags.h:66
@ Error
Whether this type references an error, e.g.
Definition DependenceFlags.h:70
@ None
Definition DependenceFlags.h:72
@ UnexpandedPack
Whether this type contains an unexpanded parameter pack (for C++11 variadic templates)
Definition DependenceFlags.h:55
@ Instantiation
Whether this type somehow involves.
Definition DependenceFlags.h:60