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.