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