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

1

2

3

4

5

6

7

8

9

10

11

12

13#ifndef LLVM_CLANG_AST_CXXINHERITANCE_H

14#define LLVM_CLANG_AST_CXXINHERITANCE_H

15

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

23#include "llvm/ADT/MapVector.h"

24#include "llvm/ADT/SmallSet.h"

25#include "llvm/ADT/SmallVector.h"

26#include "llvm/ADT/iterator_range.h"

27#include

28#include

29#include

30

32

33class ASTContext;

34class NamedDecl;

35

36

37

38

39

40

41

42

44

45

46

48

49

51

52

53

54

55

56

57

59};

60

61

62

63

64

65

66

67

68

70public:

71

72

73

75

77

78

80

84 }

85};

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

118

119

121

122

123

124 std::list Paths;

125

126

127

128

129

130

131

132 struct IsVirtBaseAndNumberNonVirtBases {

133 LLVM_PREFERRED_TYPE(bool)

134 unsigned IsVirtBase : 1;

135 unsigned NumberOfNonVirtBases : 31;

136 };

137 llvm::SmallDenseMap<QualType, IsVirtBaseAndNumberNonVirtBases, 8>

138 ClassSubobjects;

139

140

141

143

144

145 const RecordType *DetectedVirtual = nullptr;

146

147

148

150

151

152

153

154 bool FindAmbiguities;

155

156

157

158

159 bool RecordPaths;

160

161

162

163

164 bool DetectVirtual;

165

168 bool LookupInDependent = false);

169

170public:

174

175

176

177 explicit CXXBasePaths(bool FindAmbiguities = true, bool RecordPaths = true,

178 bool DetectVirtual = true)

179 : FindAmbiguities(FindAmbiguities), RecordPaths(RecordPaths),

180 DetectVirtual(DetectVirtual) {}

181

186

189

190 using decl_range = llvm::iterator_range<decl_iterator>;

191

192

193

194

196

197

199

200

202

203

205

206

208

209

210

212 return DetectedVirtual;

213 }

214

215

216

219

220

222

223

224

226};

227

228

229

231

233

234

235

237

238

239

240

242

244

249

254 }

255

258 return !(X == Y);

259 }

260};

261

262

263

264

265

266

267

268

271 using MapType = llvm::MapVector<unsigned, ValuesT>;

272

273 MapType Overrides;

274

275public:

276

279

284 unsigned size() const { return Overrides.size(); }

285

286

287

292

293

295

296

297

298

300

301

302

304};

305

306

307

308

309

310

311

312

313

314

315

316

317

318

319

320

321

322

323

324

325

326

327

328

329

330

331

332

333

334

335

336

337

338

339

340

341

342

343

344

345

346

347

348

349

350

351

352

353

354

355

356

358 : public llvm::MapVector<const CXXMethodDecl *, OverridingMethods> {};

359

360

362 : public llvm::SmallSet<const CXXRecordDecl*, 32> {};

363

364inline bool

367}

368

369

370

374}

375

376inline bool

379}

380

383 if (IsMemberFunction)

386}

387

388}

389

390#endif

Defines the C++ Decl subclasses, other than those for templates (found in DeclTemplate....

llvm::MachO::Record Record

Defines various enumerations that describe declaration and type specifiers.

Allows QualTypes to be sorted and hence used in maps and sets.

C Language Family Type Representation.

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

Represents a path from a specific derived class (which is not represented as part of the path) to a p...

DeclContext::lookup_iterator Decls

The declarations found inside this base class subobject.

AccessSpecifier Access

The access along this inheritance path.

BasePaths - Represents the set of paths from a derived class to one of its (direct or indirect) bases...

const RecordType * getDetectedVirtual() const

The virtual base discovered on the path (if we are merely detecting virtuals).

const CXXRecordDecl * getOrigin() const

Retrieve the type from which this base-paths search began.

CXXBasePaths(bool FindAmbiguities=true, bool RecordPaths=true, bool DetectVirtual=true)

BasePaths - Construct a new BasePaths structure to record the paths for a derived-to-base search.

bool isRecordingPaths() const

Whether we are recording paths.

void setRecordingPaths(bool RP)

Specify whether we should be recording paths or not.

void setOrigin(const CXXRecordDecl *Rec)

llvm::iterator_range< decl_iterator > decl_range

bool isDetectingVirtual() const

Whether we are detecting virtual bases.

bool isAmbiguous(CanQualType BaseType)

Determine whether the path from the most-derived type to the given base type is ambiguous (i....

void clear()

Clear the base-paths results.

std::list< CXXBasePath >::iterator paths_iterator

const_paths_iterator end() const

const CXXBasePath & front() const

std::list< CXXBasePath >::const_iterator const_paths_iterator

bool isFindingAmbiguities() const

Whether we are finding multiple paths to detect ambiguities.

void swap(CXXBasePaths &Other)

Swap this data structure's contents with another CXXBasePaths object.

const_paths_iterator begin() const

Represents a base class of a C++ class.

A mapping from each virtual member function to its set of final overriders.

A set of all the primary bases for a class.

Represents a static or instance method of a struct/union/class.

Represents a C++ struct/union/class.

llvm::function_ref< bool(const CXXBaseSpecifier *Specifier, CXXBasePath &Path)> BaseMatchesCallback

Function type used by lookupInBases() to determine whether a specific base class subobject matches th...

This represents a decl that may have a name.

The set of methods that override a given virtual method in each subobject where it occurs.

SmallVectorImpl< UniqueVirtualMethod >::iterator overriding_iterator

void replaceAll(UniqueVirtualMethod Overriding)

const_iterator begin() const

MapType::iterator iterator

SmallVectorImpl< UniqueVirtualMethod >::const_iterator overriding_const_iterator

MapType::const_iterator const_iterator

void add(unsigned OverriddenSubobject, UniqueVirtualMethod Overriding)

const_iterator end() const

A helper class that allows the use of isa/cast/dyncast to detect TagType objects of structs/unions/cl...

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

bool inheritanceModelHasNVOffsetField(bool IsMemberFunction, MSInheritanceModel Inheritance)

bool inheritanceModelHasOnlyOneField(bool IsMemberFunction, MSInheritanceModel Inheritance)

bool inheritanceModelHasVBPtrOffsetField(MSInheritanceModel Inheritance)

bool inheritanceModelHasVBTableOffsetField(MSInheritanceModel Inheritance)

MSInheritanceModel

Assigned inheritance model for a class in the MS C++ ABI.

@ Other

Other implicit parameter.

AccessSpecifier

A C++ access specifier (public, private, protected), plus the special value "none" which means differ...

Represents an element in a path from a derived class to a base class.

int SubobjectNumber

Identifies which base class subobject (of type Base->getType()) this base path element refers to.

const CXXRecordDecl * Class

The record decl of the class that the base is a base of.

const CXXBaseSpecifier * Base

The base specifier that states the link from a derived class to a base class, which will be followed ...

Uniquely identifies a virtual method within a class hierarchy by the method itself and a class subobj...

friend bool operator==(const UniqueVirtualMethod &X, const UniqueVirtualMethod &Y)

UniqueVirtualMethod(CXXMethodDecl *Method, unsigned Subobject, const CXXRecordDecl *InVirtualSubobject)

CXXMethodDecl * Method

The overriding virtual method.

UniqueVirtualMethod()=default

unsigned Subobject

The subobject in which the overriding virtual method resides.

friend bool operator!=(const UniqueVirtualMethod &X, const UniqueVirtualMethod &Y)

const CXXRecordDecl * InVirtualSubobject

The virtual base class subobject of which this overridden virtual method is a part.