clang 8.0.0

Classes | Public Member Functions | Friends | List of all members
clang::PreprocessingRecord Class Reference

A record of the steps taken while preprocessing a source file, including the various preprocessing directives processed, macros expanded, etc. More...

`#include "clang/Lex/PreprocessingRecord.h"`

Inheritance diagram for clang::PreprocessingRecord:
[legend]
Collaboration diagram for clang::PreprocessingRecord:
[legend]

## Classes
class | iterator
| Iteration over the preprocessed entities. More...

## Public Member Functions
| PreprocessingRecord (SourceManager &SM)
| Construct a new preprocessing record. More...
void * | Allocate (unsigned Size, unsigned Align=8)
| Allocate memory in the preprocessing record. More...
void | Deallocate (void *Ptr)
| Deallocate memory in the preprocessing record. More...
size_t | getTotalMemory () const
SourceManager & | getSourceManager () const
iterator | begin ()
| Begin iterator for all preprocessed entities. More...
iterator | end ()
| End iterator for all preprocessed entities. More...
iterator | local_begin ()
| Begin iterator for local, non-loaded, preprocessed entities. More...
iterator | local_end ()
| End iterator for local, non-loaded, preprocessed entities. More...
llvm::iterator_range< iterator > | getIteratorsForLoadedRange (unsigned start, unsigned count)
| iterator range for the given range of loaded preprocessed entities. More...
llvm::iterator_range< iterator > | getPreprocessedEntitiesInRange (SourceRange R)
| Returns a range of preprocessed entities that source range `R` encompasses. More...
bool | isEntityInFileID (iterator PPEI, FileID FID)
| Returns true if the preprocessed entity that `PPEI` iterator points to is coming from the file `FID`. More...
PPEntityID | addPreprocessedEntity (PreprocessedEntity *Entity)
| Add a new preprocessed entity to this record. More...
void | SetExternalSource (ExternalPreprocessingRecordSource &Source)
| Set the external source for preprocessed entities. More...
ExternalPreprocessingRecordSource * | getExternalSource () const
| Retrieve the external source for preprocessed entities. More...
MacroDefinitionRecord * | findMacroDefinition (const MacroInfo *MI)
| Retrieve the macro definition that corresponds to the given `MacroInfo`. More...
const std::vector< SourceRange > & | getSkippedRanges ()
| Retrieve all ranges that got skipped while preprocessing. More...
Public Member Functions inherited from clang::PPCallbacks
virtual | ~PPCallbacks ()
virtual void | FileChanged (SourceLocation Loc, FileChangeReason Reason, SrcMgr::CharacteristicKind FileType, FileID PrevFID=FileID())
| Callback invoked whenever a source file is entered or exited. More...
virtual void | FileSkipped (const FileEntry &SkippedFile, const Token &FilenameTok, SrcMgr::CharacteristicKind FileType)
| Callback invoked whenever a source file is skipped as the result of header guard optimization. More...
virtual bool | FileNotFound (StringRef FileName, SmallVectorImpl< char > &RecoveryPath)
| Callback invoked whenever an inclusion directive results in a file-not-found error. More...
virtual void | moduleImport (SourceLocation ImportLoc, ModuleIdPath Path, const Module *Imported)
| Callback invoked whenever there was an explicit module-import syntax. More...
virtual void | EndOfMainFile ()
| Callback invoked when the end of the main file is reached. More...
virtual void | Ident (SourceLocation Loc, StringRef str)
| Callback invoked when a #ident or #sccs directive is read. More...
virtual void | PragmaDirective (SourceLocation Loc, PragmaIntroducerKind Introducer)
| Callback invoked when start reading any pragma directive. More...
virtual void | PragmaComment (SourceLocation Loc, const IdentifierInfo *Kind, StringRef Str)
| Callback invoked when a #pragma comment directive is read. More...
virtual void | PragmaDetectMismatch (SourceLocation Loc, StringRef Name, StringRef Value)
| Callback invoked when a #pragma detect_mismatch directive is read. More...
virtual void | PragmaDebug (SourceLocation Loc, StringRef DebugType)
| Callback invoked when a #pragma clang __debug directive is read. More...
virtual void | PragmaMessage (SourceLocation Loc, StringRef Namespace, PragmaMessageKind Kind, StringRef Str)
| Callback invoked when a #pragma message directive is read. More...
virtual void | PragmaDiagnosticPush (SourceLocation Loc, StringRef Namespace)
| Callback invoked when a #pragma gcc diagnostic push directive is read. More...
virtual void | PragmaDiagnosticPop (SourceLocation Loc, StringRef Namespace)
| Callback invoked when a #pragma gcc diagnostic pop directive is read. More...
virtual void | PragmaDiagnostic (SourceLocation Loc, StringRef Namespace, diag::Severity mapping, StringRef Str)
| Callback invoked when a #pragma gcc diagnostic directive is read. More...
virtual void | PragmaOpenCLExtension (SourceLocation NameLoc, const IdentifierInfo *Name, SourceLocation StateLoc, unsigned State)
| Called when an OpenCL extension is either disabled or enabled with a pragma. More...
virtual void | PragmaWarning (SourceLocation Loc, StringRef WarningSpec, ArrayRef< int > Ids)
| Callback invoked when a #pragma warning directive is read. More...
virtual void | PragmaWarningPush (SourceLocation Loc, int Level)
| Callback invoked when a #pragma warning(push) directive is read. More...
virtual void | PragmaWarningPop (SourceLocation Loc)
| Callback invoked when a #pragma warning(pop) directive is read. More...
virtual void | PragmaAssumeNonNullBegin (SourceLocation Loc)
| Callback invoked when a #pragma clang assume_nonnull begin directive is read. More...
virtual void | PragmaAssumeNonNullEnd (SourceLocation Loc)
| Callback invoked when a #pragma clang assume_nonnull end directive is read. More...
virtual void | HasInclude (SourceLocation Loc, StringRef FileName, bool IsAngled, const FileEntry *File, SrcMgr::CharacteristicKind FileType)
| Hook called when a '__has_include' or '__has_include_next' directive is read. More...
virtual void | If (SourceLocation Loc, SourceRange ConditionRange, ConditionValueKind ConditionValue)
| Hook called whenever an #if is seen. More...
virtual void | Elif (SourceLocation Loc, SourceRange ConditionRange, ConditionValueKind ConditionValue, SourceLocation IfLoc)
| Hook called whenever an #elif is seen. More...
virtual void | Else (SourceLocation Loc, SourceLocation IfLoc)
| Hook called whenever an #else is seen. More...
virtual void | Endif (SourceLocation Loc, SourceLocation IfLoc)
| Hook called whenever an #endif is seen. More...

## Friends
class | ASTReader
class | ASTWriter

## Additional Inherited Members
Public Types inherited from clang::PPCallbacks
enum | FileChangeReason { EnterFile, ExitFile, SystemHeaderPragma, RenameFile }
enum | PragmaMessageKind { PMK_Message, PMK_Warning, PMK_Error }
| Determines the kind of #pragma invoking a call to PragmaMessage. More...
enum | ConditionValueKind { CVK_NotEvaluated, CVK_False, CVK_True }

## Detailed Description

A record of the steps taken while preprocessing a source file, including the various preprocessing directives processed, macros expanded, etc.

Definition at line 309 of file PreprocessingRecord.h.

## Constructor & Destructor Documentation

## ◆ PreprocessingRecord()

PreprocessingRecord::PreprocessingRecord | ( | SourceManager & | SM | ) |
| explicit

Construct a new preprocessing record.

Definition at line 55 of file PreprocessingRecord.cpp.

## Member Function Documentation

## ◆ addPreprocessedEntity()

PreprocessingRecord::PPEntityID PreprocessingRecord::addPreprocessedEntity | ( | PreprocessedEntity * | Entity | ) |

Add a new preprocessed entity to this record.

Definition at line 256 of file PreprocessingRecord.cpp.

References Begin, clang::SourceRange::getBegin(), and clang::PreprocessedEntity::getSourceRange().

Referenced by findMacroDefinition().

## ◆ Allocate()

void* clang::PreprocessingRecord::Allocate | ( | unsigned | Size,
|  | unsigned | Align = `8`
| ) |  |
| inline

Allocate memory in the preprocessing record.

Definition at line 404 of file PreprocessingRecord.h.

Referenced by clang::InclusionDirective::InclusionDirective().

## ◆ begin()

iterator clang::PreprocessingRecord::begin | ( |  | ) |
| inline

Begin iterator for all preprocessed entities.

Definition at line 456 of file PreprocessingRecord.h.

## ◆ Deallocate()

void clang::PreprocessingRecord::Deallocate | ( | void * | Ptr | ) |
| inline

Deallocate memory in the preprocessing record.

Definition at line 409 of file PreprocessingRecord.h.

## ◆ end()

iterator clang::PreprocessingRecord::end | ( |  | ) |
| inline

End iterator for all preprocessed entities.

Definition at line 461 of file PreprocessingRecord.h.

## ◆ findMacroDefinition()

MacroDefinitionRecord * PreprocessingRecord::findMacroDefinition | ( | const MacroInfo * | MI | ) |

Retrieve the macro definition that corresponds to the given `MacroInfo`.

Definition at line 388 of file PreprocessingRecord.cpp.

References addPreprocessedEntity(), clang::MacroDefinition::forAllDefinitions(), clang::SourceRange::getBegin(), clang::CharSourceRange::getBegin(), clang::MacroInfo::getDefinitionEndLoc(), clang::MacroInfo::getDefinitionLoc(), clang::CharSourceRange::getEnd(), clang::Token::getIdentifierInfo(), clang::Token::getLocation(), clang::SourceLocation::getLocWithOffset(), clang::MacroDirective::getMacroInfo(), clang::MacroDefinition::getMacroInfo(), clang::IdentifierInfo::getPPKeywordID(), Id, clang::InclusionDirective::Import, clang::InclusionDirective::Include, clang::InclusionDirective::IncludeMacros, clang::InclusionDirective::IncludeNext, clang::MacroInfo::isBuiltinMacro(), clang::CharSourceRange::isCharRange(), clang::SourceLocation::isMacroID(), clang::SourceRange::isValid(), and Range.

## ◆ getExternalSource()

ExternalPreprocessingRecordSource* clang::PreprocessingRecord::getExternalSource | ( |  | ) | const
| inline

Retrieve the external source for preprocessed entities.

Definition at line 509 of file PreprocessingRecord.h.

## ◆ getIteratorsForLoadedRange()

llvm::iterator_range<iterator> clang::PreprocessingRecord::getIteratorsForLoadedRange | ( | unsigned | start,
|  | unsigned | count
| ) |  |
| inline

iterator range for the given range of loaded preprocessed entities.

Definition at line 477 of file PreprocessingRecord.h.

## ◆ getPreprocessedEntitiesInRange()

llvm::iterator_range< PreprocessingRecord::iterator > PreprocessingRecord::getPreprocessedEntitiesInRange | ( | SourceRange | Range | ) |

Returns a range of preprocessed entities that source range `R` encompasses.

Returns a pair of [Begin, End) iterators of preprocessed entities that source range `Range` encompasses.

Parameters

  R | the range to look for preprocessed entities.

Definition at line 60 of file PreprocessingRecord.cpp.

References clang::SourceRange::isInvalid(), and Range.

## ◆ getSkippedRanges()

const std::vector<SourceRange>& clang::PreprocessingRecord::getSkippedRanges | ( |  | ) |
| inline

Retrieve all ranges that got skipped while preprocessing.

Definition at line 518 of file PreprocessingRecord.h.

## ◆ getSourceManager()

SourceManager& clang::PreprocessingRecord::getSourceManager | ( |  | ) | const
| inline

Definition at line 413 of file PreprocessingRecord.h.

## ◆ getTotalMemory()

size_t PreprocessingRecord::getTotalMemory | ( |  | ) | const

Definition at line 515 of file PreprocessingRecord.cpp.

## ◆ isEntityInFileID()

bool PreprocessingRecord::isEntityInFileID | ( | iterator | PPEI,
|  | FileID | FID
| ) |  |

Returns true if the preprocessed entity that `PPEI` iterator points to is coming from the file `FID`.

Returns true if the preprocessed entity that.

Can be used to avoid implicit deserializations of preallocated preprocessed entities if we only care about entities of a specific file and not from files #included in the range given at

See also
  getPreprocessedEntitiesInRange.

- PPEI iterator points to is coming from the file
- FID.

Can be used to avoid implicit deserializations of preallocated preprocessed entities if we only care about entities of a specific file and not from files #included in the range given at

See also
  getPreprocessedEntitiesInRange.

Definition at line 98 of file PreprocessingRecord.cpp.

References Begin, distance(), End, clang::ExternalPreprocessingRecordSource::findPreprocessedEntitiesInRange(), clang::First, clang::SourceRange::getBegin(), clang::SourceRange::getEnd(), clang::PreprocessedEntity::getSourceRange(), clang::SourceManager::isBeforeInTranslationUnit(), clang::FileID::isInvalid(), clang::SourceRange::isInvalid(), clang::SourceManager::isLocalSourceLocation(), isPreprocessedEntityIfInFileID(), clang::ExternalPreprocessingRecordSource::isPreprocessedEntityInFileID(), clang::SourceRange::isValid(), Range, and SM.

## ◆ local_begin()

iterator clang::PreprocessingRecord::local_begin | ( |  | ) |
| inline

Begin iterator for local, non-loaded, preprocessed entities.

Definition at line 466 of file PreprocessingRecord.h.

## ◆ local_end()

iterator clang::PreprocessingRecord::local_end | ( |  | ) |
| inline

End iterator for local, non-loaded, preprocessed entities.

Definition at line 471 of file PreprocessingRecord.h.

## ◆ SetExternalSource()

void PreprocessingRecord::SetExternalSource | ( | ExternalPreprocessingRecordSource & | Source | ) |

Set the external source for preprocessed entities.

Definition at line 318 of file PreprocessingRecord.cpp.

References Result.

## Friends And Related Function Documentation

## ◆ ASTReader

friend class ASTReader
| friend

Definition at line 524 of file PreprocessingRecord.h.

## ◆ ASTWriter

friend class ASTWriter
| friend

Definition at line 525 of file PreprocessingRecord.h.

## Member Data Documentation

## ◆ Range

SourceRange clang::PreprocessingRecord::Range

Definition at line 556 of file PreprocessingRecord.h.

Referenced by findMacroDefinition(), getPreprocessedEntitiesInRange(), and isEntityInFileID().

## ◆ Result

std::pair<int, int> clang::PreprocessingRecord::Result

Definition at line 557 of file PreprocessingRecord.h.

Referenced by SetExternalSource().

The documentation for this class was generated from the following files:

- include/clang/Lex/PreprocessingRecord.h
- lib/Lex/PreprocessingRecord.cpp