clang: include/clang/Serialization/ModuleFile.h Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

13

14#ifndef LLVM_CLANG_SERIALIZATION_MODULEFILE_H

15#define LLVM_CLANG_SERIALIZATION_MODULEFILE_H

16

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

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

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

27#include "llvm/ADT/SetVector.h"

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

29#include "llvm/ADT/StringRef.h"

30#include "llvm/Bitstream/BitstreamReader.h"

31#include "llvm/Support/Endian.h"

32#include

33#include

34#include

35#include

36#include

37

39

41

42

44

46

47

49

50

52

53

55

56

58

59

61};

62

63

80

81

82

83

85 enum {

86 Overridden = 1,

87 OutOfDate = 2,

88 NotFound = 3

89 };

90 llvm::PointerIntPair<const FileEntryRef::MapEntry *, 2, unsigned> Val;

91

92public:

94

97 unsigned intVal = 0;

98

99

101 intVal = OutOfDate;

103 intVal = Overridden;

104 Val.setPointerAndInt(&File.getMapEntry(), intVal);

105 }

106

109 File.Val.setInt(NotFound);

111 }

112

114 if (auto *P = Val.getPointer())

116 return std::nullopt;

117 }

118 bool isOverridden() const { return Val.getInt() == Overridden; }

119 bool isOutOfDate() const { return Val.getInt() == OutOfDate; }

120 bool isNotFound() const { return Val.getInt() == NotFound; }

121};

122

123

124

125

126

127

128

129

131public:

135

136

137

138

140

141

143

144

146

147

149

150

152

154 return (FileName + ".timestamp").str();

155 }

156

157

158

159

161

162

163

165

166

167

169

171

172

174

175

177

178

180

181

183

184

186

187

188

190

191

192

194

195

197

198

200

201

202

204

205

207

208

209

210 llvm::MemoryBuffer *Buffer = nullptr;

211

212

214

215

217

218

220

221

223

224

226

227

228

229

230

231

232

233

234

235

237

238

240

241

243

244

245

246 std::vector<std::unique_ptr> ExtensionReaders;

247

248

249

251

252

253

254

256

257

259

260

262

263

265

266

268

269

270

272

273

274

275

276

278

279

280

281

283

284

286

287

289

290

292

293

295

296

297

299

300

301

303

304

305

306

308

309

310

311

312

313

315

316

318

319

320

321

322

324

325

326

328

329

330

332

333

334

335

336

338

339

341

342

343

345

346

347

348

349

350

352

353

355

356

358

359

360

361

362

364

365

367

368

369

371

374

375

377

380

381

382

383

385

386

387

388

389

390

392

393

394

396

397

398

399

401

402

404

405

407

408

409

410

411

412

414

415

416

418

419

421

422

424

425

426

427

429

430

431

432

433

434

436

437

438

439

440

441

443

444

446

447

449

450

451

453

454

456

457

460

461

462

464

465

467

468

469

471

472

473

474

476

477

478

480

481

482

484

485

486

487

489

490

492

493

494 llvm::SetVector<ModuleFile *> Imports;

495

496

497

498

499

500

501

503

504

505

507

508

513

514

516};

517

518}

519

520}

521

522#endif

Defines the clang::FileManager interface and associated types.

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

Defines the clang::Module class, which describes a module in the source code.

Defines the clang::SourceLocation class and associated facilities.

A map from continuous integer ranges to some value, with a very specialized interface.

A reference to a FileEntry that includes the name of the file as it was accessed by the FileManager's...

An opaque identifier used by SourceManager which refers to a source file (MemoryBuffer) along with it...

Encodes a location in the source.

Source location and bit offset of a declaration.

InputFile(FileEntryRef File, bool isOverridden=false, bool isOutOfDate=false)

Definition ModuleFile.h:95

bool isOverridden() const

Definition ModuleFile.h:118

OptionalFileEntryRef getFile() const

Definition ModuleFile.h:113

bool isOutOfDate() const

Definition ModuleFile.h:119

static InputFile getNotFound()

Definition ModuleFile.h:107

bool isNotFound() const

Definition ModuleFile.h:120

const PPEntityOffset * PreprocessedEntityOffsets

Definition ModuleFile.h:372

void * IdentifierLookupTable

A pointer to an on-disk hash table of opaque type IdentifierHashTable.

Definition ModuleFile.h:327

bool DirectlyImported

Whether this module has been directly imported by the user.

Definition ModuleFile.h:203

void * SelectorLookupTable

A pointer to an on-disk hash table of opaque type ASTSelectorLookupTable.

Definition ModuleFile.h:435

std::vector< std::unique_ptr< ModuleFileExtensionReader > > ExtensionReaders

The list of extension readers that are attached to this module file.

Definition ModuleFile.h:246

SourceLocation DirectImportLoc

The source location where the module was explicitly or implicitly imported in the local translation u...

Definition ModuleFile.h:236

StringRef Data

The serialized bitstream data for this file.

Definition ModuleFile.h:222

const serialization::ObjCCategoriesInfo * ObjCCategoriesMap

Array of category list location information within this module file, sorted by the definition ID.

Definition ModuleFile.h:463

int SLocEntryBaseID

The base ID in the source manager's view of this module.

Definition ModuleFile.h:291

llvm::MemoryBuffer * Buffer

The memory buffer that stores the data associated with this AST file, owned by the InMemoryModuleCach...

Definition ModuleFile.h:210

serialization::IdentifierID BaseIdentifierID

Base identifier ID for identifiers local to this module.

Definition ModuleFile.h:317

serialization::PreprocessedEntityID BasePreprocessedEntityID

Base preprocessed entity ID for preprocessed entities local to this module.

Definition ModuleFile.h:370

serialization::TypeID BaseTypeIndex

Base type ID for types local to this module as represented in the global type ID space.

Definition ModuleFile.h:483

unsigned LocalNumObjCCategoriesInMap

The number of redeclaration info entries in ObjCCategoriesMap.

Definition ModuleFile.h:466

uint64_t MacroOffsetsBase

Base file offset for the offsets in MacroOffsets.

Definition ModuleFile.h:344

const llvm::support::unaligned_uint64_t * InputFileOffsets

Relative offsets for all of the input file entries in the AST file.

Definition ModuleFile.h:261

std::vector< unsigned > PreloadIdentifierOffsets

Offsets of identifiers that we're going to preload within IdentifierTableData.

Definition ModuleFile.h:331

unsigned LocalNumIdentifiers

The number of identifiers in this AST file.

Definition ModuleFile.h:307

llvm::BitstreamCursor DeclsCursor

DeclsCursor - This is a cursor to the start of the DECLTYPES_BLOCK block.

Definition ModuleFile.h:442

const unsigned char * IdentifierTableData

Actual data for the on-disk hash table of identifiers.

Definition ModuleFile.h:323

uint64_t SLocEntryOffsetsBase

Base file offset for the offsets in SLocEntryOffsets.

Definition ModuleFile.h:298

llvm::BitstreamCursor InputFilesCursor

The cursor to the start of the input-files block.

Definition ModuleFile.h:255

std::vector< InputFile > InputFilesLoaded

The input files that have been loaded from this AST file.

Definition ModuleFile.h:264

serialization::SelectorID BaseSelectorID

Base selector ID for selectors local to this module.

Definition ModuleFile.h:420

llvm::SetVector< ModuleFile * > ImportedBy

List of modules which depend on this module.

Definition ModuleFile.h:491

const char * HeaderFileInfoTableData

Actual data for the on-disk hash table of header file information.

Definition ModuleFile.h:391

SourceLocation ImportLoc

The source location where this module was first imported.

Definition ModuleFile.h:239

ModuleFile(ModuleKind Kind, FileEntryRef File, unsigned Generation)

Definition ModuleFile.h:132

const serialization::unaligned_decl_id_t * FileSortedDecls

Array of file-level DeclIDs sorted by file.

Definition ModuleFile.h:458

const uint32_t * SLocEntryOffsets

Offsets for all of the source location entries in the AST file.

Definition ModuleFile.h:302

static std::string getTimestampFilename(StringRef FileName)

Definition ModuleFile.h:153

llvm::BitstreamCursor MacroCursor

The cursor to the start of the preprocessor block, which stores all of the macro definitions.

Definition ModuleFile.h:337

FileID OriginalSourceFileID

The file ID for the original source file that was used to build this AST file.

Definition ModuleFile.h:168

FileEntryRef File

The file entry for the module file.

Definition ModuleFile.h:185

std::string ActualOriginalSourceFileName

The actual original source file name that was used to build this AST file.

Definition ModuleFile.h:164

uint64_t PreprocessorDetailStartOffset

The offset of the start of the preprocessor detail cursor.

Definition ModuleFile.h:366

std::vector< InputFileInfo > InputFileInfosLoaded

The input file infos that have been loaded from this AST file.

Definition ModuleFile.h:267

unsigned LocalNumSubmodules

The number of submodules in this module.

Definition ModuleFile.h:400

SourceLocation FirstLoc

The first source location in this module.

Definition ModuleFile.h:242

ASTFileSignature ASTBlockHash

The signature of the AST block of the module file, this can be used to unique module files based on A...

Definition ModuleFile.h:193

uint64_t SourceManagerBlockStartOffset

The bit offset to the start of the SOURCE_MANAGER_BLOCK.

Definition ModuleFile.h:285

bool DidReadTopLevelSubmodule

Whether the top-level module has been read from the AST file.

Definition ModuleFile.h:182

std::string OriginalSourceFileName

The original source file name that was used to build the primary AST file, which may have been modifi...

Definition ModuleFile.h:160

bool isModule() const

Is this a module file for a module (rather than a PCH or similar).

Definition ModuleFile.h:509

bool HasTimestamps

Whether timestamps are included in this module file.

Definition ModuleFile.h:179

uint64_t InputFilesOffsetBase

Absolute offset of the start of the input-files block.

Definition ModuleFile.h:258

llvm::BitstreamCursor SLocEntryCursor

Cursor used to read source location entries.

Definition ModuleFile.h:282

unsigned NumPreprocessedEntities

Definition ModuleFile.h:373

bool RelocatablePCH

Whether this precompiled header is a relocatable PCH file.

Definition ModuleFile.h:173

const uint32_t * SelectorOffsets

Offsets into the selector lookup table's data array where each selector resides.

Definition ModuleFile.h:417

unsigned BaseDeclIndex

Base declaration index in ASTReader for declarations local to this module.

Definition ModuleFile.h:455

unsigned NumFileSortedDecls

Definition ModuleFile.h:459

unsigned LocalNumSLocEntries

The number of source location entries in this AST file.

Definition ModuleFile.h:288

void * HeaderFileInfoTable

The on-disk hash table that contains information about each of the header files.

Definition ModuleFile.h:395

unsigned Index

The index of this module in the list of modules.

Definition ModuleFile.h:139

unsigned NumUserInputFiles

Definition ModuleFile.h:271

llvm::BitstreamCursor Stream

The main bitstream cursor for the main block.

Definition ModuleFile.h:225

serialization::SubmoduleID BaseSubmoduleID

Base submodule ID for submodules local to this module.

Definition ModuleFile.h:403

uint64_t SizeInBits

The size of this file, in bits.

Definition ModuleFile.h:213

const UnalignedUInt64 * TypeOffsets

Offset of each type within the bitstream, indexed by the type ID, or the representation of a Type*.

Definition ModuleFile.h:479

uint64_t GlobalBitOffset

The global bit offset (or base) of this module.

Definition ModuleFile.h:216

bool StandardCXXModule

Whether this module file is a standard C++ module.

Definition ModuleFile.h:176

unsigned LocalNumTypes

The number of types in this AST file.

Definition ModuleFile.h:475

StringRef ModuleOffsetMap

The module offset map data for this file.

Definition ModuleFile.h:250

const PPSkippedRange * PreprocessedSkippedRangeOffsets

Definition ModuleFile.h:378

std::string FileName

The file name of the module file.

Definition ModuleFile.h:145

uint64_t InputFilesValidationTimestamp

If non-zero, specifies the time when we last validated input files.

Definition ModuleFile.h:277

llvm::BitstreamCursor PreprocessorDetailCursor

The cursor to the start of the (optional) detailed preprocessing record block.

Definition ModuleFile.h:363

llvm::SetVector< ModuleFile * > Imports

List of modules which this module directly imported.

Definition ModuleFile.h:494

SourceLocation::UIntTy SLocEntryBaseOffset

The base offset in the source manager's view of this module.

Definition ModuleFile.h:294

bool isDirectlyImported() const

Determine whether this module was directly imported at any point during translation.

Definition ModuleFile.h:506

std::string ModuleMapPath

Definition ModuleFile.h:170

const DeclOffset * DeclOffsets

Offset of each declaration within the bitstream, indexed by the declaration ID (-1).

Definition ModuleFile.h:452

uint64_t MacroStartOffset

The offset of the start of the set of defined macros.

Definition ModuleFile.h:357

ASTFileSignature Signature

The signature of the module file, which may be used instead of the size and modification time to iden...

Definition ModuleFile.h:189

unsigned LocalNumMacros

The number of macros in this AST file.

Definition ModuleFile.h:340

unsigned NumPreprocessedSkippedRanges

Definition ModuleFile.h:379

const unsigned char * SelectorLookupTableData

A pointer to the character data that comprises the selector table.

Definition ModuleFile.h:428

void dump()

Dump debugging output for this module.

unsigned LocalNumDecls

The number of declarations in this AST file.

Definition ModuleFile.h:448

unsigned LocalNumHeaderFileInfos

The number of local HeaderFileInfo structures.

Definition ModuleFile.h:384

llvm::BitVector SearchPathUsage

The bit vector denoting usage of each header search entry (true = used).

Definition ModuleFile.h:196

unsigned Generation

The generation of which this module file is a part.

Definition ModuleFile.h:206

const uint32_t * IdentifierOffsets

Offsets into the identifier table data.

Definition ModuleFile.h:314

ContinuousRangeMap< uint32_t, int, 2 > SelectorRemap

Remapping table for selector IDs in this module.

Definition ModuleFile.h:423

const uint32_t * MacroOffsets

Offsets of macros in the preprocessor block.

Definition ModuleFile.h:351

uint64_t ASTBlockStartOffset

The bit offset of the AST block of this module.

Definition ModuleFile.h:219

ContinuousRangeMap< uint32_t, int, 2 > SubmoduleRemap

Remapping table for submodule IDs in this module.

Definition ModuleFile.h:406

llvm::BitVector VFSUsage

The bit vector denoting usage of each VFS entry (true = used).

Definition ModuleFile.h:199

uint64_t DeclsBlockStartOffset

The offset to the start of the DECLTYPES_BLOCK block.

Definition ModuleFile.h:445

SmallVector< uint64_t, 8 > PragmaDiagMappings

Diagnostic IDs and their mappings that the user changed.

Definition ModuleFile.h:488

unsigned BasePreprocessedSkippedRangeID

Base ID for preprocessed skipped ranges local to this module.

Definition ModuleFile.h:376

unsigned LocalNumSelectors

The number of selectors new to this file.

Definition ModuleFile.h:413

ModuleKind Kind

The type of this module.

Definition ModuleFile.h:142

std::string ModuleName

The name of the module.

Definition ModuleFile.h:148

serialization::MacroID BaseMacroID

Base macro ID for macros local to this module.

Definition ModuleFile.h:354

SmallVector< uint64_t, 1 > ObjCCategories

The Objective-C category lists for categories known to this module.

Definition ModuleFile.h:470

std::string BaseDirectory

The base directory of the module.

Definition ModuleFile.h:151

llvm::SmallVector< ModuleFile *, 16 > TransitiveImports

List of modules which this modules dependent on.

Definition ModuleFile.h:502

Source range/offset of a preprocessed entity.

Source range of a skipped preprocessor region.

32 aligned uint64_t in the AST file.

uint32_t SelectorID

An ID number that refers to an ObjC selector in an AST file.

uint64_t PreprocessedEntityID

An ID number that refers to an entity in the detailed preprocessing record.

llvm::support::detail::packed_endian_specific_integral< serialization::DeclID, llvm::endianness::native, llvm::support::unaligned > unaligned_decl_id_t

uint64_t MacroID

An ID number that refers to a macro in an AST file.

uint64_t TypeID

An ID number that refers to a type in an AST file.

ModuleKind

Specifies the kind of module that has been loaded.

Definition ModuleFile.h:43

@ MK_PCH

File is a PCH file treated as such.

Definition ModuleFile.h:51

@ MK_Preamble

File is a PCH file treated as the preamble.

Definition ModuleFile.h:54

@ MK_MainFile

File is a PCH file treated as the actual main file.

Definition ModuleFile.h:57

@ MK_ExplicitModule

File is an explicitly-loaded module.

Definition ModuleFile.h:48

@ MK_ImplicitModule

File is an implicitly-loaded module.

Definition ModuleFile.h:45

@ MK_PrebuiltModule

File is from a prebuilt module path.

Definition ModuleFile.h:60

uint32_t SubmoduleID

An ID number that refers to a submodule in a module file.

uint64_t IdentifierID

An ID number that refers to an identifier in an AST file.

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

CustomizableOptional< FileEntryRef > OptionalFileEntryRef

The signature of a module, which is a hash of the AST content.

The input file info that has been loaded from an AST file.

Definition ModuleFile.h:64

time_t StoredTime

Definition ModuleFile.h:70

bool TopLevel

Definition ModuleFile.h:73

bool ModuleMap

Definition ModuleFile.h:74

uint64_t ContentHash

Definition ModuleFile.h:68

bool Transient

Definition ModuleFile.h:72

off_t StoredSize

Definition ModuleFile.h:69

bool Overridden

Definition ModuleFile.h:71

StringRef UnresolvedImportedFilename

Definition ModuleFile.h:66

bool isValid() const

Definition ModuleFile.h:76

StringRef UnresolvedImportedFilenameAsRequested

Definition ModuleFile.h:65

Describes the categories of an Objective-C class.