clang 20.0.0git
|
Engages in a tight little dance with the lexer to efficiently preprocess tokens. More...
#include "clang/Lex/Preprocessor.h"
Classes | |
struct | PreambleSkipInfo |
class | ResetMacroExpansionHelper |
Public Types | |
using | IncludedFilesSet = llvm::DenseSet< const FileEntry * > |
Public Member Functions | |
const char * | getCheckPoint (FileID FID, const char *Start) const |
Returns a pointer into the given file's buffer that's guaranteed to be between tokens. | |
Preprocessor (std::shared_ptr< PreprocessorOptions > PPOpts, DiagnosticsEngine &diags, const LangOptions &LangOpts, SourceManager &SM, HeaderSearch &Headers, ModuleLoader &TheModuleLoader, IdentifierInfoLookup *IILookup=nullptr, bool OwnsHeaderSearch=false, TranslationUnitKind TUKind=TU_Complete) | |
~Preprocessor () | |
void | Initialize (const TargetInfo &Target, const TargetInfo *AuxTarget=nullptr) |
Initialize the preprocessor using information about the target. | |
void | InitializeForModelFile () |
Initialize the preprocessor to parse a model file. | |
void | FinalizeForModelFile () |
Cleanup after model file parsing. | |
PreprocessorOptions & | getPreprocessorOpts () const |
Retrieve the preprocessor options used to initialize this preprocessor. | |
DiagnosticsEngine & | getDiagnostics () const |
void | setDiagnostics (DiagnosticsEngine &D) |
const LangOptions & | getLangOpts () const |
const TargetInfo & | getTargetInfo () const |
const TargetInfo * | getAuxTargetInfo () const |
FileManager & | getFileManager () const |
SourceManager & | getSourceManager () const |
HeaderSearch & | getHeaderSearchInfo () const |
IdentifierTable & | getIdentifierTable () |
const IdentifierTable & | getIdentifierTable () const |
SelectorTable & | getSelectorTable () |
Builtin::Context & | getBuiltinInfo () |
llvm::BumpPtrAllocator & | getPreprocessorAllocator () |
void | setExternalSource (ExternalPreprocessorSource *Source) |
ExternalPreprocessorSource * | getExternalSource () const |
ModuleLoader & | getModuleLoader () const |
Retrieve the module loader associated with this preprocessor. | |
bool | hadModuleLoaderFatalFailure () const |
unsigned | getNumDirectives () const |
Retrieve the number of Directives that have been processed by the Preprocessor. | |
bool | isParsingIfOrElifDirective () const |
True if we are currently preprocessing a if or #elif directive. | |
void | SetCommentRetentionState (bool KeepComments, bool KeepMacroComments) |
Control whether the preprocessor retains comments in output. | |
bool | getCommentRetentionState () const |
void | setPragmasEnabled (bool Enabled) |
bool | getPragmasEnabled () const |
void | SetSuppressIncludeNotFoundError (bool Suppress) |
bool | GetSuppressIncludeNotFoundError () |
void | setPreprocessedOutput (bool IsPreprocessedOutput) |
Sets whether the preprocessor is responsible for producing output or if it is producing tokens to be consumed by Parse and Sema. | |
bool | isPreprocessedOutput () const |
Returns true if the preprocessor is responsible for generating output, false if it is producing tokens to be consumed by Parse and Sema. | |
bool | isCurrentLexer (const PreprocessorLexer *L) const |
Return true if we are lexing directly from the specified lexer. | |
PreprocessorLexer * | getCurrentLexer () const |
Return the current lexer being lexed from. | |
PreprocessorLexer * | getCurrentFileLexer () const |
Return the current file lexer being lexed from. | |
Module * | getCurrentLexerSubmodule () const |
Return the submodule owning the file being lexed. | |
FileID | getPredefinesFileID () const |
Returns the FileID for the preprocessor predefines. | |
unsigned | getTokenCount () const |
Get the number of tokens processed so far. | |
unsigned | getMaxTokens () const |
Get the max number of tokens before issuing a -Wmax-tokens warning. | |
void | overrideMaxTokens (unsigned Value, SourceLocation Loc) |
SourceLocation | getMaxTokensOverrideLoc () const |
void | setTokenWatcher (llvm::unique_function< void(const clang::Token &)> F) |
Register a function that would be called on each token in the final expanded token stream. | |
void | setPreprocessToken (bool Preprocess) |
bool | isMacroDefined (StringRef Id) |
bool | isMacroDefined (const IdentifierInfo *II) |
bool | isMacroDefinedInLocalModule (const IdentifierInfo *II, Module *M) |
Determine whether II is defined as a macro within the module M, if that is a module that we've already preprocessed. | |
MacroDefinition | getMacroDefinition (const IdentifierInfo *II) |
MacroDefinition | getMacroDefinitionAtLoc (const IdentifierInfo *II, SourceLocation Loc) |
MacroDirective * | getLocalMacroDirective (const IdentifierInfo *II) const |
Given an identifier, return its latest non-imported MacroDirective if it is #define'd and not #undef'd, or null if it isn't #define'd. | |
const MacroInfo * | getMacroInfo (const IdentifierInfo *II) const |
MacroInfo * | getMacroInfo (const IdentifierInfo *II) |
MacroDirective * | getLocalMacroDirectiveHistory (const IdentifierInfo *II) const |
Given an identifier, return the latest non-imported macro directive for that identifier. | |
void | appendMacroDirective (IdentifierInfo *II, MacroDirective *MD) |
Add a directive to the macro directive history for this identifier. | |
DefMacroDirective * | appendDefMacroDirective (IdentifierInfo *II, MacroInfo *MI, SourceLocation Loc) |
DefMacroDirective * | appendDefMacroDirective (IdentifierInfo *II, MacroInfo *MI) |
void | setLoadedMacroDirective (IdentifierInfo *II, MacroDirective *ED, MacroDirective *MD) |
Set a MacroDirective that was loaded from a PCH file. | |
ModuleMacro * | addModuleMacro (Module *Mod, IdentifierInfo *II, MacroInfo *Macro, ArrayRef< ModuleMacro * > Overrides, bool &IsNew) |
Register an exported macro for a module and identifier. | |
ModuleMacro * | getModuleMacro (Module *Mod, const IdentifierInfo *II) |
ArrayRef< ModuleMacro * > | getLeafModuleMacros (const IdentifierInfo *II) const |
Get the list of leaf (non-overridden) module macros for a name. | |
ArrayRef< BuildingSubmoduleInfo > | getBuildingSubmodules () const |
Get the list of submodules that we're currently building. | |
void | markClangModuleAsAffecting (Module *M) |
Mark the given clang module as affecting the current clang module or translation unit. | |
const llvm::SmallSetVector< Module *, 2 > & | getAffectingClangModules () const |
Get the set of top-level clang modules that affected preprocessing, but were not imported. | |
bool | markIncluded (FileEntryRef File) |
Mark the file as included. | |
bool | alreadyIncluded (FileEntryRef File) const |
Return true if this header has already been included. | |
IncludedFilesSet & | getIncludedFiles () |
Get the set of included files. | |
const IncludedFilesSet & | getIncludedFiles () const |
StringRef | getLastMacroWithSpelling (SourceLocation Loc, ArrayRef< TokenValue > Tokens) const |
Return the name of the macro defined before Loc that has spelling Tokens . | |
const std::string & | getPredefines () const |
Get the predefines for this processor. | |
void | setPredefines (std::string P) |
Set the predefines for this Preprocessor. | |
IdentifierInfo * | getIdentifierInfo (StringRef Name) const |
Return information about the specified preprocessor identifier token. | |
void | AddPragmaHandler (StringRef Namespace, PragmaHandler *Handler) |
Add the specified pragma handler to this preprocessor. | |
void | AddPragmaHandler (PragmaHandler *Handler) |
void | RemovePragmaHandler (StringRef Namespace, PragmaHandler *Handler) |
Remove the specific pragma handler from this preprocessor. | |
void | RemovePragmaHandler (PragmaHandler *Handler) |
void | IgnorePragmas () |
Install empty handlers for all pragmas (making them ignored). | |
void | setEmptylineHandler (EmptylineHandler *Handler) |
Set empty line handler. | |
EmptylineHandler * | getEmptylineHandler () const |
void | addCommentHandler (CommentHandler *Handler) |
Add the specified comment handler to the preprocessor. | |
void | removeCommentHandler (CommentHandler *Handler) |
Remove the specified comment handler. | |
void | setCodeCompletionHandler (CodeCompletionHandler &Handler) |
Set the code completion handler to the given object. | |
CodeCompletionHandler * | getCodeCompletionHandler () const |
Retrieve the current code-completion handler. | |
void | clearCodeCompletionHandler () |
Clear out the code completion handler. | |
void | CodeCompleteIncludedFile (llvm::StringRef Dir, bool IsAngled) |
Hook used by the lexer to invoke the "included file" code completion point. | |
void | CodeCompleteNaturalLanguage () |
Hook used by the lexer to invoke the "natural language" code completion point. | |
void | setCodeCompletionIdentifierInfo (IdentifierInfo *Filter) |
Set the code completion token for filtering purposes. | |
void | setCodeCompletionTokenRange (const SourceLocation Start, const SourceLocation End) |
Set the code completion token range for detecting replacement range later on. | |
SourceRange | getCodeCompletionTokenRange () const |
StringRef | getCodeCompletionFilter () |
Get the code completion token for filtering purposes. | |
PreprocessingRecord * | getPreprocessingRecord () const |
Retrieve the preprocessing record, or NULL if there is no preprocessing record. | |
void | createPreprocessingRecord () |
Create a new preprocessing record, which will keep track of all macro expansions, macro definitions, etc. | |
bool | isPCHThroughHeader (const FileEntry *FE) |
Returns true if the FileEntry is the PCH through header. | |
bool | creatingPCHWithThroughHeader () |
True if creating a PCH with a through header. | |
bool | usingPCHWithThroughHeader () |
True if using a PCH with a through header. | |
bool | creatingPCHWithPragmaHdrStop () |
True if creating a PCH with a #pragma hdrstop. | |
bool | usingPCHWithPragmaHdrStop () |
True if using a PCH with a #pragma hdrstop. | |
void | SkipTokensWhileUsingPCH () |
Skip tokens until after the #include of the through header or until after a #pragma hdrstop. | |
void | HandleSkippedDirectiveWhileUsingPCH (Token &Result, SourceLocation HashLoc) |
Process directives while skipping until the through header or #pragma hdrstop is found. | |
void | EnterMainSourceFile () |
Enter the specified FileID as the main source file, which implicitly adds the builtin defines etc. | |
void | EndSourceFile () |
Inform the preprocessor callbacks that processing is complete. | |
bool | EnterSourceFile (FileID FID, ConstSearchDirIterator Dir, SourceLocation Loc, bool IsFirstIncludeOfFile=true) |
Add a source file to the top of the include stack and start lexing tokens from it instead of the current buffer. | |
void | EnterMacro (Token &Tok, SourceLocation ILEnd, MacroInfo *Macro, MacroArgs *Args) |
Add a Macro to the top of the include stack and start lexing tokens from it instead of the current buffer. | |
void | EnterTokenStream (std::unique_ptr< Token[]> Toks, unsigned NumToks, bool DisableMacroExpansion, bool IsReinject) |
void | EnterTokenStream (ArrayRef< Token > Toks, bool DisableMacroExpansion, bool IsReinject) |
void | RemoveTopOfLexerStack () |
Pop the current lexer/macro exp off the top of the lexer stack. | |
void | EnableBacktrackAtThisPos (bool Unannotated=false) |
From the point that this method is called, and until CommitBacktrackedTokens() or Backtrack() is called, the Preprocessor keeps track of the lexed tokens so that a subsequent Backtrack() call will make the Preprocessor re-lex the same tokens. | |
void | CommitBacktrackedTokens () |
Disable the last EnableBacktrackAtThisPos call. | |
void | Backtrack () |
Make Preprocessor re-lex the tokens that were lexed since EnableBacktrackAtThisPos() was previously called. | |
bool | isBacktrackEnabled () const |
True if EnableBacktrackAtThisPos() was called and caching of tokens is on. | |
bool | isUnannotatedBacktrackEnabled () const |
True if EnableBacktrackAtThisPos() was called and caching of unannotated tokens is on. | |
void | Lex (Token &Result) |
Lex the next token for this preprocessor. | |
void | LexTokensUntilEOF (std::vector< Token > *Tokens=nullptr) |
Lex all tokens for this preprocessor until (and excluding) end of file. | |
bool | LexHeaderName (Token &Result, bool AllowMacroExpansion=true) |
Lex a token, forming a header-name token if possible. | |
std::optional< LexEmbedParametersResult > | LexEmbedParameters (Token &Current, bool ForHasEmbed) |
Lex the parameters for an #embed directive, returns nullopt on error. | |
bool | LexAfterModuleImport (Token &Result) |
Lex a token following the 'import' contextual keyword. | |
void | CollectPpImportSuffix (SmallVectorImpl< Token > &Toks) |
Collect the tokens of a C++20 pp-import-suffix. | |
void | makeModuleVisible (Module *M, SourceLocation Loc) |
SourceLocation | getModuleImportLoc (Module *M) const |
bool | LexStringLiteral (Token &Result, std::string &String, const char *DiagnosticTag, bool AllowMacroExpansion) |
Lex a string literal, which may be the concatenation of multiple string literals and may even come from macro expansion. | |
bool | FinishLexStringLiteral (Token &Result, std::string &String, const char *DiagnosticTag, bool AllowMacroExpansion) |
Complete the lexing of a string literal where the first token has already been lexed (see LexStringLiteral). | |
void | LexNonComment (Token &Result) |
Lex a token. | |
void | LexUnexpandedToken (Token &Result) |
Just like Lex, but disables macro expansion of identifier tokens. | |
void | LexUnexpandedNonComment (Token &Result) |
Like LexNonComment, but this disables macro expansion of identifier tokens. | |
bool | parseSimpleIntegerLiteral (Token &Tok, uint64_t &Value) |
Parses a simple integer literal to get its numeric value. | |
void | SetMacroExpansionOnlyInDirectives () |
Disables macro expansion everywhere except for preprocessor directives. | |
const Token & | LookAhead (unsigned N) |
Peeks ahead N tokens and returns that token without consuming any tokens. | |
void | RevertCachedTokens (unsigned N) |
When backtracking is enabled and tokens are cached, this allows to revert a specific number of tokens. | |
void | EnterToken (const Token &Tok, bool IsReinject) |
Enters a token in the token stream to be lexed next. | |
void | AnnotateCachedTokens (const Token &Tok) |
We notify the Preprocessor that if it is caching tokens (because backtrack is enabled) it should replace the most recent cached tokens with the given annotation token. | |
SourceLocation | getLastCachedTokenLocation () const |
Get the location of the last cached token, suitable for setting the end location of an annotation token. | |
bool | IsPreviousCachedToken (const Token &Tok) const |
Whether Tok is the most recent token (CachedLexPos - 1 ) in CachedTokens. | |
void | ReplacePreviousCachedToken (ArrayRef< Token > NewToks) |
Replace token in CachedLexPos - 1 in CachedTokens by the tokens in NewToks . | |
void | ReplaceLastTokenWithAnnotation (const Token &Tok) |
Replace the last token with an annotation token. | |
void | EnterAnnotationToken (SourceRange Range, tok::TokenKind Kind, void *AnnotationVal) |
Enter an annotation token into the token stream. | |
bool | mightHavePendingAnnotationTokens () |
Determine whether it's possible for a future call to Lex to produce an annotation token created by a previous call to EnterAnnotationToken. | |
void | TypoCorrectToken (const Token &Tok) |
Update the current token to represent the provided identifier, in order to cache an action performed by typo correction. | |
void | recomputeCurLexerKind () |
Recompute the current lexer kind based on the CurLexer/ CurTokenLexer pointers. | |
bool | isIncrementalProcessingEnabled () const |
Returns true if incremental processing is enabled. | |
void | enableIncrementalProcessing (bool value=true) |
Enables the incremental processing. | |
bool | SetCodeCompletionPoint (FileEntryRef File, unsigned Line, unsigned Column) |
Specify the point at which code-completion will be performed. | |
bool | isCodeCompletionEnabled () const |
Determine if we are performing code completion. | |
SourceLocation | getCodeCompletionLoc () const |
Returns the location of the code-completion point. | |
SourceLocation | getCodeCompletionFileLoc () const |
Returns the start location of the file of code-completion point. | |
bool | isCodeCompletionReached () const |
Returns true if code-completion is enabled and we have hit the code-completion point. | |
void | setCodeCompletionReached () |
Note that we hit the code-completion point. | |
std::pair< IdentifierInfo *, SourceLocation > | getPragmaARCCFCodeAuditedInfo () const |
The location of the currently-active #pragma clang arc_cf_code_audited begin. | |
void | setPragmaARCCFCodeAuditedInfo (IdentifierInfo *Ident, SourceLocation Loc) |
Set the location of the currently-active #pragma clang arc_cf_code_audited begin. | |
SourceLocation | getPragmaAssumeNonNullLoc () const |
The location of the currently-active #pragma clang assume_nonnull begin. | |
void | setPragmaAssumeNonNullLoc (SourceLocation Loc) |
Set the location of the currently-active #pragma clang assume_nonnull begin. | |
SourceLocation | getPreambleRecordedPragmaAssumeNonNullLoc () const |
Get the location of the recorded unterminated #pragma clang assume_nonnull begin in the preamble, if one exists. | |
void | setPreambleRecordedPragmaAssumeNonNullLoc (SourceLocation Loc) |
Record the location of the unterminated #pragma clang assume_nonnull begin in the preamble. | |
void | setMainFileDir (DirectoryEntryRef Dir) |
Set the directory in which the main file should be considered to have been found, if it is not a real file. | |
void | setSkipMainFilePreamble (unsigned Bytes, bool StartOfLine) |
Instruct the preprocessor to skip part of the main source file. | |
DiagnosticBuilder | Diag (SourceLocation Loc, unsigned DiagID) const |
Forwarding function for diagnostics. | |
DiagnosticBuilder | Diag (const Token &Tok, unsigned DiagID) const |
StringRef | getSpelling (SourceLocation loc, SmallVectorImpl< char > &buffer, bool *invalid=nullptr) const |
Return the 'spelling' of the token at the given location; does not go up to the spelling location or down to the expansion location. | |
std::string | getSpelling (const Token &Tok, bool *Invalid=nullptr) const |
Return the 'spelling' of the Tok token. | |
unsigned | getSpelling (const Token &Tok, const char *&Buffer, bool *Invalid=nullptr) const |
Get the spelling of a token into a preallocated buffer, instead of as an std::string. | |
StringRef | getSpelling (const Token &Tok, SmallVectorImpl< char > &Buffer, bool *Invalid=nullptr) const |
Get the spelling of a token into a SmallVector. | |
bool | getRawToken (SourceLocation Loc, Token &Result, bool IgnoreWhiteSpace=false) |
Relex the token at the specified location. | |
uint8_t | getSpellingOfSingleCharacterNumericConstant (const Token &Tok, bool *Invalid=nullptr) const |
Given a Token Tok that is a numeric constant with length 1, return the value of constant as an unsigned 8-bit integer. | |
StringRef | getImmediateMacroName (SourceLocation Loc) |
Retrieve the name of the immediate macro expansion. | |
void | CreateString (StringRef Str, Token &Tok, SourceLocation ExpansionLocStart=SourceLocation(), SourceLocation ExpansionLocEnd=SourceLocation()) |
Plop the specified string into a scratch buffer and set the specified token's location and length to it. | |
SourceLocation | SplitToken (SourceLocation TokLoc, unsigned Length) |
Split the first Length characters out of the token starting at TokLoc and return a location pointing to the split token. | |
SourceLocation | getLocForEndOfToken (SourceLocation Loc, unsigned Offset=0) |
Computes the source location just past the end of the token at this source location. | |
bool | isAtStartOfMacroExpansion (SourceLocation loc, SourceLocation *MacroBegin=nullptr) const |
Returns true if the given MacroID location points at the first token of the macro expansion. | |
bool | isAtEndOfMacroExpansion (SourceLocation loc, SourceLocation *MacroEnd=nullptr) const |
Returns true if the given MacroID location points at the last token of the macro expansion. | |
void | DumpToken (const Token &Tok, bool DumpFlags=false) const |
Print the token to stderr, used for debugging. | |
void | DumpLocation (SourceLocation Loc) const |
void | DumpMacro (const MacroInfo &MI) const |
void | dumpMacroInfo (const IdentifierInfo *II) |
SourceLocation | AdvanceToTokenCharacter (SourceLocation TokStart, unsigned Char) const |
Given a location that specifies the start of a token, return a new location that specifies a character within the token. | |
void | IncrementPasteCounter (bool isFast) |
Increment the counters for the number of token paste operations performed. | |
void | PrintStats () |
size_t | getTotalMemory () const |
void | HandleMicrosoftCommentPaste (Token &Tok) |
When the macro expander pastes together a comment (/##/) in Microsoft mode, this method handles updating the current state, returning the token on the next source line. | |
IdentifierInfo * | LookUpIdentifierInfo (Token &Identifier) const |
Given a tok::raw_identifier token, look up the identifier information for the token and install it into the token, updating the token kind accordingly. | |
void | SetPoisonReason (IdentifierInfo *II, unsigned DiagID) |
Specifies the reason for poisoning an identifier. | |
void | HandlePoisonedIdentifier (Token &Identifier) |
Display reason for poisoned identifier. | |
void | MaybeHandlePoisonedIdentifier (Token &Identifier) |
void | PoisonSEHIdentifiers (bool Poison=true) |
bool | HandleIdentifier (Token &Identifier) |
Callback invoked when the lexer reads an identifier and has filled in the tokens IdentifierInfo member. | |
bool | HandleEndOfFile (Token &Result, bool isEndOfMacro=false) |
Callback invoked when the lexer hits the end of the current file. | |
bool | HandleEndOfTokenLexer (Token &Result) |
Callback invoked when the current TokenLexer hits the end of its token stream. | |
void | HandleDirective (Token &Result) |
Callback invoked when the lexer sees a # token at the start of a line. | |
SourceLocation | CheckEndOfDirective (const char *DirType, bool EnableMacros=false) |
Ensure that the next token is a tok::eod token. | |
SourceRange | DiscardUntilEndOfDirective () |
Read and discard all tokens remaining on the current line until the tok::eod token is found. | |
SourceRange | DiscardUntilEndOfDirective (Token &Tok) |
Same as above except retains the token that was found. | |
bool | SawDateOrTime () const |
Returns true if the preprocessor has seen a use of DATE or TIME in the file so far. | |
unsigned | getCounterValue () const |
void | setCounterValue (unsigned V) |
LangOptions::FPEvalMethodKind | getCurrentFPEvalMethod () const |
LangOptions::FPEvalMethodKind | getTUFPEvalMethod () const |
SourceLocation | getLastFPEvalPragmaLocation () const |
void | setCurrentFPEvalMethod (SourceLocation PragmaLoc, LangOptions::FPEvalMethodKind Val) |
void | setTUFPEvalMethod (LangOptions::FPEvalMethodKind Val) |
Module * | getCurrentModule () |
Retrieves the module that we're currently building, if any. | |
Module * | getCurrentModuleImplementation () |
Retrieves the module whose implementation we're current compiling, if any. | |
bool | isInNamedModule () const |
If we are preprocessing a named module. | |
bool | isInNamedInterfaceUnit () const |
If we are proprocessing a named interface unit. | |
StringRef | getNamedModuleName () const |
Get the named module name we're preprocessing. | |
bool | isInImplementationUnit () const |
If we are implementing an implementation module unit. | |
bool | isInImportingCXXNamedModules () const |
If we're importing a standard C++20 Named Modules. | |
MacroInfo * | AllocateMacroInfo (SourceLocation L) |
Allocate a new MacroInfo object with the provided SourceLocation. | |
bool | GetIncludeFilenameSpelling (SourceLocation Loc, StringRef &Buffer) |
Turn the specified lexer token into a fully checked and spelled filename, e.g. | |
OptionalFileEntryRef | LookupFile (SourceLocation FilenameLoc, StringRef Filename, bool isAngled, ConstSearchDirIterator FromDir, const FileEntry *FromFile, ConstSearchDirIterator *CurDir, SmallVectorImpl< char > *SearchPath, SmallVectorImpl< char > *RelativePath, ModuleMap::KnownHeader *SuggestedModule, bool *IsMapped, bool *IsFrameworkFound, bool SkipCache=false, bool OpenFile=true, bool CacheFailures=true) |
Given a "foo" or <foo> reference, look up the indicated file. | |
OptionalFileEntryRef | LookupEmbedFile (StringRef Filename, bool isAngled, bool OpenFile, const FileEntry *LookupFromFile=nullptr) |
Given a "Filename" or <Filename> reference, look up the indicated embed resource. | |
bool | isInPrimaryFile () const |
Return true if we're in the top-level file, not in a #include. | |
bool | LexOnOffSwitch (tok::OnOffSwitch &Result) |
Lex an on-off-switch (C99 6.10.6p2) and verify that it is followed by EOD. | |
bool | CheckMacroName (Token &MacroNameTok, MacroUse isDefineUndef, bool *ShadowFlag=nullptr) |
void | EnterSubmodule (Module *M, SourceLocation ImportLoc, bool ForPragma) |
Module * | LeaveSubmodule (bool ForPragma) |
Module * | getModuleForLocation (SourceLocation Loc, bool AllowTextual) |
Find the module that owns the source or header file that Loc points to. | |
OptionalFileEntryRef | getHeaderToIncludeForDiagnostics (SourceLocation IncLoc, SourceLocation MLoc) |
We want to produce a diagnostic at location IncLoc concerning an unreachable effect at location MLoc (eg, where a desired entity was declared or defined). | |
bool | isRecordingPreamble () const |
bool | hasRecordedPreamble () const |
ArrayRef< PPConditionalInfo > | getPreambleConditionalStack () const |
void | setRecordedPreambleConditionalStack (ArrayRef< PPConditionalInfo > s) |
void | setReplayablePreambleConditionalStack (ArrayRef< PPConditionalInfo > s, std::optional< PreambleSkipInfo > SkipInfo) |
std::optional< PreambleSkipInfo > | getPreambleSkipInfo () const |
void | HandlePragmaOnce (Token &OnceTok) |
HandlePragmaOnce - Handle #pragma once. OnceTok is the 'once'. | |
void | HandlePragmaMark (Token &MarkTok) |
void | HandlePragmaPoison () |
HandlePragmaPoison - Handle #pragma GCC poison. PoisonTok is the 'poison'. | |
void | HandlePragmaSystemHeader (Token &SysHeaderTok) |
HandlePragmaSystemHeader - Implement #pragma GCC system_header. | |
void | HandlePragmaDependency (Token &DependencyTok) |
HandlePragmaDependency - Handle #pragma GCC dependency "foo" blah. | |
void | HandlePragmaPushMacro (Token &Tok) |
Handle #pragma push_macro. | |
void | HandlePragmaPopMacro (Token &Tok) |
Handle #pragma pop_macro. | |
void | HandlePragmaIncludeAlias (Token &Tok) |
void | HandlePragmaModuleBuild (Token &Tok) |
void | HandlePragmaHdrstop (Token &Tok) |
IdentifierInfo * | ParsePragmaPushOrPopMacro (Token &Tok) |
ParsePragmaPushOrPopMacro - Handle parsing of pragma push_macro/pop_macro. | |
bool | HandleComment (Token &result, SourceRange Comment) |
void | markMacroAsUsed (MacroInfo *MI) |
A macro is used, update information about macros that need unused warnings. | |
void | addMacroDeprecationMsg (const IdentifierInfo *II, std::string Msg, SourceLocation AnnotationLoc) |
void | addRestrictExpansionMsg (const IdentifierInfo *II, std::string Msg, SourceLocation AnnotationLoc) |
void | addFinalLoc (const IdentifierInfo *II, SourceLocation AnnotationLoc) |
const MacroAnnotations & | getMacroAnnotations (const IdentifierInfo *II) const |
void | emitMacroExpansionWarnings (const Token &Identifier, bool IsIfnDef=false) const |
bool | isSafeBufferOptOut (const SourceManager &SourceMgr, const SourceLocation &Loc) const |
bool | enterOrExitSafeBufferOptOutRegion (bool isEnter, const SourceLocation &Loc) |
Alter the state of whether this PP currently is in a "-Wunsafe-buffer-usage" opt-out region. | |
bool | isPPInSafeBufferOptOutRegion () |
bool | isPPInSafeBufferOptOutRegion (SourceLocation &StartLoc) |
SmallVector< SourceLocation, 64 > | serializeSafeBufferOptOutMap () const |
bool | setDeserializedSafeBufferOptOutMap (const SmallVectorImpl< SourceLocation > &SrcLocSeqs) |
PPCallbacks * | getPPCallbacks () const |
void | addPPCallbacks (std::unique_ptr< PPCallbacks > C) |
Static Public Member Functions | |
static bool | checkModuleIsAvailable (const LangOptions &LangOpts, const TargetInfo &TargetInfo, const Module &M, DiagnosticsEngine &Diags) |
Check that the given module is available, producing a diagnostic if not. | |
static void | processPathForFileMacro (SmallVectorImpl< char > &Path, const LangOptions &LangOpts, const TargetInfo &TI) |
static void | processPathToFileName (SmallVectorImpl< char > &FileName, const PresumedLoc &PLoc, const LangOptions &LangOpts, const TargetInfo &TI) |
Public Attributes | |
const TranslationUnitKind | TUKind |
The kind of translation unit we are processing. | |
llvm::DenseMap< FileID, SafeBufferOptOutRegionsTy > | LoadedRegions |
Friends | |
class | VAOptDefinitionContext |
class | VariadicMacroScopeGuard |
class | ASTReader |
class | MacroArgs |
void | TokenLexer::ExpandFunctionArguments () |
using | macro_iterator = MacroMap::const_iterator |
macro_iterator | macro_begin (bool IncludeExternalMacros=true) const |
macro_iterator | macro_end (bool IncludeExternalMacros=true) const |
llvm::iterator_range< macro_iterator > | macros (bool IncludeExternalMacros=true) const |
Engages in a tight little dance with the lexer to efficiently preprocess tokens.
Lexers know only about tokens within a single source file, and don't know anything about preprocessor-level issues like the #include stack, token expansion, etc.
Definition at line 137 of file Preprocessor.h.
using clang::Preprocessor::IncludedFilesSet = llvm::DenseSet<const FileEntry *> |
Definition at line 699 of file Preprocessor.h.
using clang::Preprocessor::macro_iterator = MacroMap::const_iterator |
Iterators for the macro history table. Currently defined macros have IdentifierInfo::hasMacroDefinition() set and an empty MacroInfo::getUndefLoc() at the head of the list.
Definition at line 1474 of file Preprocessor.h.
Preprocessor::Preprocessor | ( | std::shared_ptr< PreprocessorOptions > | PPOpts, |
DiagnosticsEngine & | diags, | ||
const LangOptions & | LangOpts, | ||
SourceManager & | SM, | ||
HeaderSearch & | Headers, | ||
ModuleLoader & | TheModuleLoader, | ||
IdentifierInfoLookup * | IILookup = nullptr , |
||
bool | OwnsHeaderSearch = false , |
||
TranslationUnitKind | TUKind = TU_Complete |
||
) |
Definition at line 83 of file Preprocessor.cpp.
References getIdentifierInfo(), SetPoisonReason(), and usingPCHWithPragmaHdrStop().
Preprocessor::~Preprocessor | ( | ) |
Definition at line 172 of file Preprocessor.cpp.
References isBacktrackEnabled().
void Preprocessor::addCommentHandler | ( | CommentHandler * | Handler | ) |
Add the specified comment handler to the preprocessor.
Definition at line 1411 of file Preprocessor.cpp.
Referenced by clang::Parser::Parser(), and clang::CodeGen::CoverageMappingModuleGen::setUpCoverageCallbacks().
|
inline |
Definition at line 2909 of file Preprocessor.h.
|
inline |
Definition at line 2885 of file Preprocessor.h.
ModuleMacro * Preprocessor::addModuleMacro | ( | Module * | Mod, |
IdentifierInfo * | II, | ||
MacroInfo * | Macro, | ||
ArrayRef< ModuleMacro * > | Overrides, | ||
bool & | IsNew | ||
) |
Register an exported macro for a module and identifier.
Definition at line 134 of file PPMacroExpansion.cpp.
References clang::ModuleMacro::create(), clang::ModuleMacro::Profile(), and clang::IdentifierInfo::setHasMacroDefinition().
Referenced by LeaveSubmodule().
|
inline |
Definition at line 1318 of file Preprocessor.h.
References clang::C.
Referenced by clang::AttachDependencyGraphGen(), clang::AttachHeaderIncludeGen(), clang::DependencyCollector::attachToPreprocessor(), clang::ModuleDependencyCollector::attachToPreprocessor(), clang::tooling::dependencies::ModuleDepCollector::attachToPreprocessor(), clang::arcmt::MigrateSourceAction::CreateASTConsumer(), clang::arcmt::ObjCMigrateAction::CreateASTConsumer(), clang::CodeGenAction::CreateASTConsumer(), clang::ExtractAPIAction::CreateASTConsumer(), clang::WrappingExtractAPIAction::CreateASTConsumer(), createPreprocessingRecord(), clang::DoPrintPreprocessedInput(), clang::MacroExpansionContext::registerForPreprocessor(), clang::RewriteIncludesInInput(), clang::Sema::Sema(), clang::CodeGen::CoverageMappingModuleGen::setUpCoverageCallbacks(), and clang::syntax::TokenCollector::TokenCollector().
|
inline |
Definition at line 1549 of file Preprocessor.h.
References AddPragmaHandler().
void Preprocessor::AddPragmaHandler | ( | StringRef | Namespace, |
PragmaHandler * | Handler | ||
) |
Add the specified pragma handler to this preprocessor.
AddPragmaHandler - Add the specified pragma handler to the preprocessor.
If Namespace
is non-null, then it is a token required to exist on the pragma line before the pragma string starts, e.g. "STDC" or "GCC".
If 'Namespace' is non-null, then it is a token required to exist on the pragma line before the pragma string starts, e.g. "STDC" or "GCC".
Definition at line 915 of file Pragma.cpp.
References clang::PragmaNamespace::AddPragma(), clang::PragmaNamespace::FindHandler(), clang::PragmaNamespace::getIfNamespace(), and clang::PragmaHandler::getName().
Referenced by AddPragmaHandler(), clang::DoPrintPreprocessedInput(), and IgnorePragmas().
|
inline |
Definition at line 2897 of file Preprocessor.h.
|
inline |
Given a location that specifies the start of a token, return a new location that specifies a character within the token.
Definition at line 2234 of file Preprocessor.h.
References clang::Lexer::AdvanceToTokenCharacter().
Referenced by GetLineValue().
MacroInfo * Preprocessor::AllocateMacroInfo | ( | SourceLocation | L | ) |
Allocate a new MacroInfo object with the provided SourceLocation.
Definition at line 64 of file PPDirectives.cpp.
Referenced by RegisterBuiltinMacro().
|
inline |
Return true if this header has already been included.
Definition at line 1513 of file Preprocessor.h.
References clang::File, and clang::HeaderSearch::getFileInfo().
Referenced by clang::HeaderSearch::ShouldEnterIncludeFile().
|
inline |
We notify the Preprocessor that if it is caching tokens (because backtrack is enabled) it should replace the most recent cached tokens with the given annotation token.
This function has no effect if backtracking is not enabled.
Note that the use of this function is just for optimization, so that the cached tokens doesn't get re-parsed and re-resolved after a backtrack is invoked.
Definition at line 1899 of file Preprocessor.h.
References clang::Token::isAnnotation(), and isBacktrackEnabled().
Referenced by clang::Parser::TryAnnotateTypeOrScopeToken(), and clang::Parser::TryAnnotateTypeOrScopeTokenAfterScopeSpec().
|
inline |
Definition at line 1440 of file Preprocessor.h.
References appendDefMacroDirective(), and clang::MacroInfo::getDefinitionLoc().
|
inline |
Definition at line 1434 of file Preprocessor.h.
References appendMacroDirective(), and Loc.
Referenced by appendDefMacroDirective(), HandlePragmaPopMacro(), and RegisterBuiltinMacro().
void Preprocessor::appendMacroDirective | ( | IdentifierInfo * | II, |
MacroDirective * | MD | ||
) |
Add a directive to the macro directive history for this identifier.
Definition at line 73 of file PPMacroExpansion.cpp.
References clang::MacroDirective::getPrevious(), clang::MacroDirective::isDefined(), clang::IdentifierInfo::isFromAST(), clang::IdentifierInfo::setChangedSinceDeserialization(), clang::IdentifierInfo::setHasMacroDefinition(), and clang::MacroDirective::setPrevious().
Referenced by appendDefMacroDirective(), and HandlePragmaPopMacro().
void Preprocessor::Backtrack | ( | ) |
Make Preprocessor re-lex the tokens that were lexed since EnableBacktrackAtThisPos() was previously called.
Definition at line 66 of file PPCaching.cpp.
References isBacktrackEnabled(), and recomputeCurLexerKind().
SourceLocation Preprocessor::CheckEndOfDirective | ( | const char * | DirType, |
bool | EnableMacros = false |
||
) |
Ensure that the next token is a tok::eod token.
If not, emit a diagnostic and consume up until the eod. If EnableMacros
is true, then we consider macros that expand to zero tokens as being ok.
If not, emit a diagnostic and consume up until the eod. If EnableMacros is true, then we consider macros that expand to zero tokens as being ok.
Returns the location of the end of the directive.
Definition at line 416 of file PPDirectives.cpp.
References clang::FixItHint::CreateInsertion(), Diag(), DiscardUntilEndOfDirective(), clang::SourceRange::getEnd(), clang::Token::getLocation(), clang::Token::is(), Lex(), and LexUnexpandedToken().
bool Preprocessor::CheckMacroName | ( | Token & | MacroNameTok, |
MacroUse | isDefineUndef, | ||
bool * | ShadowFlag = nullptr |
||
) |
Definition at line 324 of file PPDirectives.cpp.
References D, Diag(), clang::SourceManager::getBufferName(), clang::Token::getIdentifierInfo(), clang::Token::getKind(), getLangOpts(), clang::Token::getLocation(), clang::IdentifierInfo::getPPKeywordID(), clang::Token::is(), clang::IdentifierInfo::isCPlusPlusOperatorKeyword(), clang::SourceManager::isInSystemHeader(), MD_KeywordDef, MD_NoWarn, MD_ReservedMacro, clang::MU_Define, clang::MU_Other, clang::MU_Undef, shouldWarnOnMacroDef(), and shouldWarnOnMacroUndef().
Referenced by EvaluateDefined().
|
static |
Check that the given module is available, producing a diagnostic if not.
true
if the check failed (because the module is not available). false
if the module appears to be usable. Definition at line 1976 of file PPDirectives.cpp.
References clang::Module::DefinitionLoc, clang::Module::Requirement::FeatureName, clang::Module::UnresolvedHeaderDirective::FileName, clang::Module::UnresolvedHeaderDirective::FileNameLoc, clang::Module::getFullModuleName(), clang::Module::isAvailable(), clang::Module::UnresolvedHeaderDirective::IsUmbrella, clang::SourceLocation::isValid(), clang::Module::Name, clang::DiagnosticsEngine::Report(), and clang::Module::Requirement::RequiredState.
Referenced by clang::CompilerInstance::loadModule(), and prepareToBuildModule().
|
inline |
Clear out the code completion handler.
Definition at line 1590 of file Preprocessor.h.
Referenced by clang::Parser::~Parser().
void Preprocessor::CodeCompleteIncludedFile | ( | llvm::StringRef | Dir, |
bool | IsAngled | ||
) |
Hook used by the lexer to invoke the "included file" code completion point.
Definition at line 453 of file Preprocessor.cpp.
References clang::CodeCompletionHandler::CodeCompleteIncludedFile(), and setCodeCompletionReached().
void Preprocessor::CodeCompleteNaturalLanguage | ( | ) |
Hook used by the lexer to invoke the "natural language" code completion point.
Definition at line 460 of file Preprocessor.cpp.
References clang::CodeCompletionHandler::CodeCompleteNaturalLanguage(), and setCodeCompletionReached().
Referenced by clang::Lexer::ReadToEndOfLine(), and clang::MacroArgs::StringifyArgument().
void Preprocessor::CollectPpImportSuffix | ( | SmallVectorImpl< Token > & | Toks | ) |
Collect the tokens of a C++20 pp-import-suffix.
Definition at line 1090 of file Preprocessor.cpp.
References Lex().
Referenced by LexAfterModuleImport().
void Preprocessor::CommitBacktrackedTokens | ( | ) |
Disable the last EnableBacktrackAtThisPos call.
Definition at line 56 of file PPCaching.cpp.
References isBacktrackEnabled().
void Preprocessor::createPreprocessingRecord | ( | ) |
Create a new preprocessing record, which will keep track of all macro expansions, macro definitions, etc.
Definition at line 1634 of file Preprocessor.cpp.
References addPPCallbacks(), and getSourceManager().
void Preprocessor::CreateString | ( | StringRef | Str, |
Token & | Tok, | ||
SourceLocation | ExpansionLocStart = SourceLocation() , |
||
SourceLocation | ExpansionLocEnd = SourceLocation() |
||
) |
Plop the specified string into a scratch buffer and set the specified token's location and length to it.
CreateString - Plop the specified string into a scratch buffer and return a location for it.
If specified, the source location provides a location of the expansion point of the token.
If specified, the source location provides a source location for the token.
Definition at line 491 of file Preprocessor.cpp.
References clang::SourceManager::createExpansionLoc(), clang::Token::is(), clang::Token::isLiteral(), clang::SourceLocation::isValid(), Loc, clang::Token::setLength(), clang::Token::setLiteralData(), clang::Token::setLocation(), and clang::Token::setRawIdentifierData().
Referenced by ComputeDATE_TIME(), clang::Sema::ExpandFunctionLocalPredefinedMacros(), LexHeaderName(), ParsePragmaPushOrPopMacro(), and clang::MacroArgs::StringifyArgument().
bool Preprocessor::creatingPCHWithPragmaHdrStop | ( | ) |
True if creating a PCH with a #pragma hdrstop.
Definition at line 629 of file Preprocessor.cpp.
References clang::TU_Prefix, and TUKind.
Referenced by HandlePragmaHdrstop().
bool Preprocessor::creatingPCHWithThroughHeader | ( | ) |
True if creating a PCH with a through header.
Definition at line 619 of file Preprocessor.cpp.
References clang::FileID::isValid(), clang::TU_Prefix, and TUKind.
Referenced by HandleEndOfFile().
|
inline |
Definition at line 2080 of file Preprocessor.h.
References clang::Token::getLocation(), and clang::DiagnosticsEngine::Report().
|
inline |
Forwarding function for diagnostics.
This emits a diagnostic at the specified Token's location, translating the token's start position in the current buffer into a SourcePosition object for rendering.
Definition at line 2076 of file Preprocessor.h.
References Loc, and clang::DiagnosticsEngine::Report().
Referenced by clang::Sema::ActOnNumericConstant(), buildMSAsmString(), clang::CharLiteralParser::CharLiteralParser(), checkConfigMacro(), CheckEndOfDirective(), CheckMacroName(), clang::Lexer::Diag(), diagnoseAutoModuleImport(), diagnoseUnexpectedOperator(), EnterMainSourceFile(), EnterSourceFile(), EvaluateDefined(), EvaluateDirectiveSubExpr(), EvaluateFeatureLikeBuiltinMacro(), EvaluateHasIncludeCommon(), EvaluateValue(), ExpectFeatureIdentifierInfo(), FinishLexStringLiteral(), GetIncludeFilenameSpelling(), GetLineValue(), HandleDirective(), HandleEndOfFile(), HandleIdentifier(), HandlePoisonedIdentifier(), clang::PragmaNamespace::HandlePragma(), HandlePragmaDependency(), HandlePragmaHdrstop(), HandlePragmaIncludeAlias(), HandlePragmaModuleBuild(), HandlePragmaOnce(), HandlePragmaPoison(), HandlePragmaPopMacro(), HandlePragmaSystemHeader(), LexAfterModuleImport(), LexEmbedParameters(), LexHeaderName(), LexModuleNameComponent(), LexOnOffSwitch(), makeModuleVisible(), ParseAlignPragma(), ParseLoopHintValue(), ParsePragmaPushOrPopMacro(), clang::Parser::ParseTopLevelDecl(), ReadLineMarkerFlags(), SkipTokensWhileUsingPCH(), and clang::MacroArgs::StringifyArgument().
|
inline |
Read and discard all tokens remaining on the current line until the tok::eod token is found.
Returns the range of the skipped tokens.
Definition at line 2352 of file Preprocessor.h.
References DiscardUntilEndOfDirective().
Referenced by CheckEndOfDirective(), DiscardUntilEndOfDirective(), GetLineValue(), HandleDirective(), HandlePragmaModuleBuild(), HandleSkippedDirectiveWhileUsingPCH(), LexEmbedParameters(), and ReadLineMarkerFlags().
SourceRange Preprocessor::DiscardUntilEndOfDirective | ( | Token & | Tok | ) |
Same as above except retains the token that was found.
Read and discard all tokens remaining on the current line until the tok::eod token is found.
Definition at line 87 of file PPDirectives.cpp.
References clang::Token::getLocation(), clang::Token::isNot(), LexUnexpandedToken(), clang::SourceRange::setBegin(), and clang::SourceRange::setEnd().
void Preprocessor::DumpLocation | ( | SourceLocation | Loc | ) | const |
Definition at line 264 of file Preprocessor.cpp.
References Loc, and clang::SourceLocation::print().
Referenced by DumpToken().
void Preprocessor::DumpMacro | ( | const MacroInfo & | MI | ) | const |
Definition at line 268 of file Preprocessor.cpp.
References DumpToken(), clang::MacroInfo::getNumTokens(), and clang::MacroInfo::getReplacementToken().
void Preprocessor::dumpMacroInfo | ( | const IdentifierInfo * | II | ) |
Definition at line 260 of file PPMacroExpansion.cpp.
References clang::MacroInfo::dump(), clang::IdentifierInfo::getNameStart(), and Visited.
Print the token to stderr, used for debugging.
Definition at line 238 of file Preprocessor.cpp.
References DumpLocation(), clang::SourceManager::getCharacterData(), clang::Token::getKind(), clang::Token::getLength(), clang::Token::getLocation(), getSpelling(), clang::tok::getTokenName(), clang::Token::hasLeadingSpace(), clang::Token::isAnnotation(), clang::Token::isAtStartOfLine(), clang::Token::isExpandDisabled(), and clang::Token::needsCleaning().
Referenced by DumpMacro(), clang::DumpRawTokensAction::ExecuteAction(), and clang::DumpTokensAction::ExecuteAction().
|
inline |
Definition at line 2922 of file Preprocessor.h.
References getLangOpts(), clang::IdentifierInfo::getName(), Identifier, clang::IdentifierInfo::isDeprecatedMacro(), and clang::IdentifierInfo::isRestrictExpansion().
Referenced by EvaluateDefined().
From the point that this method is called, and until CommitBacktrackedTokens() or Backtrack() is called, the Preprocessor keeps track of the lexed tokens so that a subsequent Backtrack() call will make the Preprocessor re-lex the same tokens.
Nested backtracks are allowed, meaning that EnableBacktrackAtThisPos can be called multiple times and CommitBacktrackedTokens/Backtrack calls will be combined with the EnableBacktrackAtThisPos calls in reverse order.
NOTE: DO NOT forget to call either CommitBacktrackedTokens or Backtrack at some point after EnableBacktrackAtThisPos. If you don't, caching of tokens will continue indefinitely.
Unannotated | Whether token annotations are reverted upon calling Backtrack(). |
Definition at line 34 of file PPCaching.cpp.
Enables the incremental processing.
Definition at line 1963 of file Preprocessor.h.
void Preprocessor::EndSourceFile | ( | ) |
Inform the preprocessor callbacks that processing is complete.
Definition at line 686 of file Preprocessor.cpp.
Referenced by clang::FrontendAction::EndSourceFile().
void Preprocessor::EnterAnnotationToken | ( | SourceRange | Range, |
tok::TokenKind | Kind, | ||
void * | AnnotationVal | ||
) |
Enter an annotation token into the token stream.
Push a token onto the token stream containing an annotation.
Definition at line 1881 of file PPDirectives.cpp.
References clang::SourceRange::getBegin(), clang::SourceRange::getEnd(), Range, clang::Token::setAnnotationEndLoc(), clang::Token::setAnnotationValue(), clang::Token::setKind(), clang::Token::setLocation(), and clang::Token::startToken().
void Preprocessor::EnterMacro | ( | Token & | Tok, |
SourceLocation | ILEnd, | ||
MacroInfo * | Macro, | ||
MacroArgs * | Args | ||
) |
Add a Macro to the top of the include stack and start lexing tokens from it instead of the current buffer.
EnterMacro - Add a Macro to the top of the include stack and start lexing tokens from it instead of the current buffer.
Args | specifies the tokens input to a function-like macro. |
ILEnd | specifies the location of the ')' for a function-like macro or the identifier for an object-like macro. |
Definition at line 151 of file PPLexerChange.cpp.
void Preprocessor::EnterMainSourceFile | ( | ) |
Enter the specified FileID as the main source file, which implicitly adds the builtin defines etc.
EnterMainSourceFile - Enter the specified FileID as the main source file, which implicitly adds the builtin defines etc.
Definition at line 547 of file Preprocessor.cpp.
References clang::SrcMgr::C_User, clang::SourceManager::createFileID(), Diag(), EnterSourceFile(), clang::File, clang::SourceManager::getFileEntryRefForID(), clang::SourceManager::getMainFileID(), clang::SourceManager::isLoadedFileID(), clang::FileID::isValid(), LookupFile(), markIncluded(), SkipTokensWhileUsingPCH(), usingPCHWithPragmaHdrStop(), and usingPCHWithThroughHeader().
Referenced by DoPrintMacros(), clang::DoPrintPreprocessedInput(), clang::PrintDependencyDirectivesSourceMinimizerAction::ExecuteAction(), clang::DumpTokensAction::ExecuteAction(), clang::PreprocessOnlyAction::ExecuteAction(), clang::IncrementalAction::ExecuteAction(), clang::ParseAST(), clang::RewriteIncludesInInput(), and clang::RewriteMacrosInInput().
bool Preprocessor::enterOrExitSafeBufferOptOutRegion | ( | bool | isEnter, |
const SourceLocation & | Loc | ||
) |
Alter the state of whether this PP currently is in a "-Wunsafe-buffer-usage" opt-out region.
isEnter | true if this PP is entering a region; otherwise, this PP is exiting a region |
Loc | the location of the entry or exit of a region |
Definition at line 1540 of file Preprocessor.cpp.
References isPPInSafeBufferOptOutRegion(), and Loc.
bool Preprocessor::EnterSourceFile | ( | FileID | FID, |
ConstSearchDirIterator | Dir, | ||
SourceLocation | Loc, | ||
bool | IsFirstIncludeOfFile = true |
||
) |
Add a source file to the top of the include stack and start lexing tokens from it instead of the current buffer.
EnterSourceFile - Add a source file to the top of the include stack and start lexing tokens from it instead of the current buffer.
Emits a diagnostic, doesn't enter the file, and returns true on error.
Definition at line 69 of file PPLexerChange.cpp.
References Diag(), clang::File, clang::SourceManager::getBufferName(), clang::SourceManager::getBufferOrNone(), clang::SourceManager::getFileEntryForID(), clang::SourceManager::getFileEntryRefForID(), clang::SourceManager::getLocForStartOfFile(), clang::SourceLocation::getLocWithOffset(), getPreprocessorOpts(), getSourceManager(), isCodeCompletionEnabled(), and Loc.
Referenced by EnterMainSourceFile(), and clang::IncrementalParser::Parse().
void Preprocessor::EnterSubmodule | ( | Module * | M, |
SourceLocation | ImportLoc, | ||
bool | ForPragma | ||
) |
Definition at line 699 of file PPLexerChange.cpp.
References getHeaderSearchInfo(), getLangOpts(), clang::HeaderSearch::getModuleMap(), makeModuleVisible(), clang::ModuleMap::resolveConflicts(), clang::ModuleMap::resolveExports(), and clang::ModuleMap::resolveUses().
Enters a token in the token stream to be lexed next.
If BackTrack() is called afterwards, the token will remain at the insertion point. If IsReinject
is true, resulting token will have Token::IsReinjected flag set. See the flag documentation for details.
Definition at line 1877 of file Preprocessor.h.
Referenced by FixDigraph(), and clang::Parser::TryAnnotateTypeOrScopeToken().
|
inline |
Definition at line 1705 of file Preprocessor.h.
|
inline |
Definition at line 1699 of file Preprocessor.h.
void Preprocessor::FinalizeForModelFile | ( | ) |
Cleanup after model file parsing.
Definition at line 232 of file Preprocessor.cpp.
bool Preprocessor::FinishLexStringLiteral | ( | Token & | Result, |
std::string & | String, | ||
const char * | DiagnosticTag, | ||
bool | AllowMacroExpansion | ||
) |
Complete the lexing of a string literal where the first token has already been lexed (see LexStringLiteral).
Definition at line 1350 of file Preprocessor.cpp.
References Diag(), Lex(), LexUnexpandedToken(), and clang::Result.
Referenced by LexStringLiteral().
|
inline |
Get the set of top-level clang modules that affected preprocessing, but were not imported.
Definition at line 1501 of file Preprocessor.h.
Referenced by clang::tooling::dependencies::ModuleDepCollectorPP::EndOfMainFile().
|
inline |
Definition at line 1222 of file Preprocessor.h.
Referenced by clang::InitializePreprocessor().
|
inline |
Get the list of submodules that we're currently building.
Definition at line 1466 of file Preprocessor.h.
|
inline |
Definition at line 1230 of file Preprocessor.h.
Referenced by clang::FrontendAction::BeginSourceFile(), clang::CompilerInstance::createASTContext(), clang::createChainedIncludesSource(), and clang::ASTUnit::LoadFromASTFile().
const char * Preprocessor::getCheckPoint | ( | FileID | FID, |
const char * | Start | ||
) | const |
Returns a pointer into the given file's buffer that's guaranteed to be between tokens.
The returned pointer is always before Start
. The maximum distance betweenthe returned pointer and Start
is limited by a constant value, but also an implementation detail. If no such check point exists, nullptr
is returned.
Definition at line 1642 of file Preprocessor.cpp.
References clang::Last, and P.
Referenced by highlightLines().
|
inline |
Returns the start location of the file of code-completion point.
Returns an invalid location if code-completion is not enabled or the file containing the code-completion point has not been lexed yet.
Definition at line 1997 of file Preprocessor.h.
|
inline |
Get the code completion token for filtering purposes.
Definition at line 1618 of file Preprocessor.h.
Referenced by clang::PrintingCodeCompleteConsumer::ProcessCodeCompleteResults().
|
inline |
Retrieve the current code-completion handler.
Definition at line 1585 of file Preprocessor.h.
Referenced by EvaluateDefined(), and EvaluateValue().
|
inline |
Returns the location of the code-completion point.
Returns an invalid location if code-completion is not enabled or the file containing the code-completion point has not been lexed yet.
Definition at line 1991 of file Preprocessor.h.
|
inline |
Definition at line 1613 of file Preprocessor.h.
|
inline |
Definition at line 1265 of file Preprocessor.h.
Referenced by HandleComment(), PrintPreprocessedTokens(), and clang::Lexer::resetExtendedTokenMode().
|
inline |
Definition at line 2365 of file Preprocessor.h.
PreprocessorLexer * Preprocessor::getCurrentFileLexer | ( | ) | const |
Return the current file lexer being lexed from.
getCurrentLexer - Return the current file lexer being lexed from.
Note that this ignores any potentially active macro expansions and _Pragma expansions going on at the time.
Definition at line 50 of file PPLexerChange.cpp.
Referenced by clang::SemaCodeCompletion::CodeCompleteIncludedFile(), HandleDirective(), HandlePragmaDependency(), HandlePragmaOnce(), HandlePragmaSystemHeader(), and LookupFile().
|
inline |
Definition at line 2368 of file Preprocessor.h.
References clang::LangOptionsBase::FEM_UnsetOnCommandLine.
Referenced by clang::Sema::DiagnoseUseOfDecl(), and clang::Sema::Sema().
|
inline |
Return the current lexer being lexed from.
Note that this ignores any potentially active macro expansions and _Pragma expansions going on at the time.
Definition at line 1297 of file Preprocessor.h.
Referenced by clang::ParseAST().
|
inline |
Return the submodule owning the file being lexed.
This may not be the current module if we have changed modules since entering the file.
Definition at line 1307 of file Preprocessor.h.
Module * Preprocessor::getCurrentModule | ( | ) |
Retrieves the module that we're currently building, if any.
Definition at line 527 of file Preprocessor.cpp.
References getHeaderSearchInfo(), getLangOpts(), and clang::HeaderSearch::lookupModule().
Referenced by clang::Sema::ActOnEndOfTranslationUnit(), clang::ASTReader::DecodeIdentifierInfo(), HandleEndOfFile(), LookupFile(), and clang::PCHValidator::ReadDiagnosticOptions().
Module * Preprocessor::getCurrentModuleImplementation | ( | ) |
Retrieves the module whose implementation we're current compiling, if any.
Definition at line 534 of file Preprocessor.cpp.
References getHeaderSearchInfo(), getLangOpts(), and clang::HeaderSearch::lookupModule().
Referenced by clang::tooling::dependencies::ModuleDepCollector::applyDiscoveredDependencies(), and clang::FrontendAction::BeginSourceFile().
|
inline |
Definition at line 1217 of file Preprocessor.h.
Referenced by clang::Sema::ActOnNumericConstant(), AddImplicitIncludePCH(), clang::AttachHeaderIncludeGen(), clang::CharLiteralParser::CharLiteralParser(), clang::ento::CreateAnalysisConsumer(), EnableCodeCompletion(), EvaluateValue(), clang::PCHGenerator::getEmittingModule(), clang::PCHGenerator::HandleTranslationUnit(), HasExtension(), clang::InitializePreprocessor(), ParseDirective(), parseSimpleIntegerLiteral(), clang::PCHValidator::ReadDiagnosticOptions(), setCodeCompletionReached(), and clang::ASTWriter::WriteAST().
|
inline |
Definition at line 1569 of file Preprocessor.h.
|
inline |
Definition at line 1237 of file Preprocessor.h.
Referenced by isTrivialSingleTokenExpansion().
|
inline |
|
inline |
Definition at line 1225 of file Preprocessor.h.
Referenced by clang::Sema::ActOnEndOfTranslationUnit(), clang::Sema::ActOnModuleDecl(), clang::Sema::ActOnPrivateModuleFragmentDecl(), clang::tooling::dependencies::ModuleDepCollector::applyDiscoveredDependencies(), clang::DependencyCollector::attachToPreprocessor(), clang::ModuleDependencyCollector::attachToPreprocessor(), clang::FrontendAction::BeginSourceFile(), clang::Sema::BuildModuleInclude(), clang::SemaCodeCompletion::CodeCompleteIncludedFile(), clang::SemaCodeCompletion::CodeCompleteModuleImport(), compileModule(), clang::CompilerInstance::createPCHExternalASTSource(), clang::FrontendAction::EndSourceFile(), EnterSubmodule(), EvaluateHasIncludeCommon(), clang::FrontendAction::Execute(), clang::installapi::InstallAPIContext::findAndRecordFile(), getCurrentModule(), clang::FrontendAction::getCurrentModule(), getCurrentModuleImplementation(), clang::Sema::getDarwinSDKInfoForAvailabilityChecking(), clang::PCHGenerator::getEmittingModule(), getHeaderNameForHeader(), getHeaderToIncludeForDiagnostics(), getInputBufferForModule(), getTopImportImplicitModule(), clang::VerifyDiagnosticConsumer::HandleDiagnostic(), HandlePragmaIncludeAlias(), clang::CXX20ModulesGenerator::HandleTranslationUnit(), clang::CompilerInstance::loadGlobalModuleIndex(), clang::CompilerInstance::loadModule(), loadModuleMapForModuleBuild(), clang::Sema::notePreviousDefinition(), prepareToBuildModule(), and clang::PCHValidator::ReadHeaderSearchOptions().
OptionalFileEntryRef Preprocessor::getHeaderToIncludeForDiagnostics | ( | SourceLocation | IncLoc, |
SourceLocation | MLoc | ||
) |
We want to produce a diagnostic at location IncLoc concerning an unreachable effect at location MLoc (eg, where a desired entity was declared or defined).
Determine whether the right way to make MLoc reachable is by #include, and if so, what header should be included.
This is not necessarily fast, and might load unexpected module maps, so should only be called by code that intends to produce an error.
IncLoc | The location at which the missing effect was detected. |
MLoc | A location within an unimported module at which the desired effect occurred. |
Definition at line 882 of file PPDirectives.cpp.
References clang::ModuleMap::ExcludedHeader, clang::HeaderSearch::findAllModulesForHeader(), getHeaderSearchInfo(), getLangOpts(), getModuleForLocation(), getSourceManager(), clang::HeaderSearch::hasModuleMap(), clang::SourceManager::isInSystemHeader(), clang::SourceLocation::isInvalid(), Loc, clang::ObjC, SM, and clang::ModuleMap::TextualHeader.
Referenced by clang::Sema::diagnoseMissingImport().
|
inline |
Return information about the specified preprocessor identifier token.
Definition at line 1540 of file Preprocessor.h.
References clang::IdentifierTable::get().
Referenced by clang::Sema::ActOnModuleDecl(), clang::Sema::ActOnModuleImport(), checkConfigMacro(), checkTupleLikeDecomposition(), clang::Sema::DefaultVariadicArgumentPromotion(), DiagnoseCallingConvCast(), clang::SemaObjC::DiagnoseOwningPropertyGetterSynthesis(), clang::Sema::EvaluateStaticAssertMessageAsString(), fixSeparateAttrArgAndNumber(), getFallthroughAttrSpelling(), clang::SemaObjC::getNSErrorIdent(), clang::Sema::getNullabilityKeyword(), clang::Sema::GetOrCreateMSAsmLabel(), getTupleLikeElementType(), highlightLines(), clang::Parser::Initialize(), clang::Sema::Initialize(), isTupleLike(), Lex(), LexAfterModuleImport(), LexModuleNameComponent(), clang::CompilerInstance::loadModule(), LookUpIdentifierInfo(), lookupMember(), Preprocessor(), RegisterBuiltinMacro(), and clang::ento::tryExpandAsInteger().
|
inline |
Definition at line 1227 of file Preprocessor.h.
Referenced by clang::SemaObjC::ActOnClassPropertyRefExpr(), clang::Sema::ActOnCXXTypeid(), clang::SemaOpenMP::ActOnOpenMPInterchangeDirective(), clang::SemaOpenMP::ActOnOpenMPReverseDirective(), clang::SemaOpenMP::ActOnOpenMPTileDirective(), clang::SemaOpenMP::ActOnOpenMPUnrollDirective(), clang::FrontendAction::BeginSourceFile(), buildCoroutineHandle(), clang::Sema::buildCoroutinePromise(), buildMemberCall(), BuildNonArrayForRange(), buildStdNoThrowDeclRef(), buildVarDecl(), clang::CompilerInstance::createASTContext(), clang::createChainedIncludesSource(), clang::Sema::DeclareGlobalNewDelete(), clang::ASTReader::DecodeIdentifierInfo(), clang::FrontendAction::EndSourceFile(), findOMPAllocatorHandleT(), findOMPAlloctraitT(), findOMPDependT(), findOMPEventHandleT(), clang::ASTReader::getIdentifierTable(), clang::Sema::getOrCreateStdNamespace(), clang::SemaObjC::HandleExprPropertyRefExpr(), HandleIdentifier(), handleOwnershipAttr(), highlightLines(), clang::Parser::Initialize(), clang::Sema::isStdInitializerList(), clang::ASTUnit::LoadFromASTFile(), clang::CompilerInstance::loadModule(), lookupCoroutineHandleType(), clang::Sema::lookupCoroutineTraits(), LookupMemberExpr(), lookupPromiseType(), LookupStdInitializerList(), LookupStdSourceLocationImpl(), and lookupStdTypeTraitMember().
|
inline |
Definition at line 1228 of file Preprocessor.h.
|
inline |
Retrieve the name of the immediate macro expansion.
This routine starts from a source location, and finds the name of the macro responsible for its immediate expansion. It looks through any intervening macro argument expansions to compute this. It returns a StringRef that refers to the SourceManager-owned buffer of the source where that macro name is spelled. Thus, the result shouldn't out-live the SourceManager.
Definition at line 2168 of file Preprocessor.h.
References clang::Lexer::getImmediateMacroName(), getLangOpts(), and Loc.
Referenced by isExpandedFromConfigurationMacro(), lookThroughRangesV3Condition(), and ShouldDiagnoseAvailabilityInContext().
|
inline |
Get the set of included files.
Definition at line 1519 of file Preprocessor.h.
|
inline |
Definition at line 1520 of file Preprocessor.h.
bool Preprocessor::GetIncludeFilenameSpelling | ( | SourceLocation | Loc, |
StringRef & | Buffer | ||
) |
Turn the specified lexer token into a fully checked and spelled filename, e.g.
GetIncludeFilenameSpelling - Turn the specified lexer token into a fully checked and spelled filename, e.g.
as an operand of #include.
The caller is expected to provide a buffer that is large enough to hold the spelling of the filename, but is also expected to handle the case when this method decides to use a different buffer.
as an operand of #include. This returns true if the input filename was in <>'s or false if it were in ""'s. The caller is expected to provide a buffer that is large enough to hold the spelling of the filename, but is also expected to handle the case when this method decides to use a different buffer.
Definition at line 1833 of file PPDirectives.cpp.
Referenced by EvaluateHasIncludeCommon(), HandlePragmaDependency(), and HandlePragmaIncludeAlias().
|
inline |
Definition at line 1220 of file Preprocessor.h.
Referenced by clang::Sema::ActOnEndOfTranslationUnit(), clang::Sema::ActOnNumericConstant(), AddFunctionParameterChunks(), AddMacroResults(), clang::TokenConcatenation::AvoidConcat(), clang::FrontendAction::BeginSourceFile(), clang::CharLiteralParser::CharLiteralParser(), clang::Sema::checkLiteralOperatorId(), CheckMacroName(), clang::createChainedIncludesSource(), clang::DoPrintPreprocessedInput(), clang::DoRewriteTest(), EmitAlphaCounter(), emitMacroExpansionWarnings(), emitPremigrationErrors(), EnterSubmodule(), EvaluateDirectiveSubExpr(), EvaluateValue(), clang::DumpRawTokensAction::ExecuteAction(), FindLocsWithCommonFileID(), getCurrentModule(), getCurrentModuleImplementation(), clang::PCHGenerator::getEmittingModule(), getFallthroughAttrSpelling(), getHeaderToIncludeForDiagnostics(), getImmediateMacroName(), getIssueHash(), clang::Parser::getLangOpts(), getModuleForLocation(), HandleDirective(), HandleEndOfFile(), HandleIdentifier(), HandlePragmaOnce(), HasExtension(), HasFeature(), Initialize(), clang::InitializePreprocessor(), isExpandedFromConfigurationMacro(), isInImportingCXXNamedModules(), isInterestingIdentifier(), isMacroDefined(), LeaveSubmodule(), Lex(), clang::TokenLexer::Lex(), LexAfterModuleImport(), LexRawTokensFromMainFile(), clang::ASTUnit::LoadFromASTFile(), MaybeAddSentinel(), clang::IncrementalParser::Parse(), ParseAlignPragma(), parseSimpleIntegerLiteral(), PrintPreprocessedTokens(), clang::PCHValidator::ReadHeaderSearchOptions(), clang::PCHValidator::ReadLanguageOptions(), clang::PCHValidator::ReadPreprocessorOptions(), clang::SimpleASTReaderListener::ReadPreprocessorOptions(), clang::RewriteMacrosInInput(), shouldWarnOnMacroDef(), shouldWarnOnMacroUndef(), and clang::TokenConcatenation::TokenConcatenation().
|
inline |
Get the location of the last cached token, suitable for setting the end location of an annotation token.
Definition at line 1907 of file Preprocessor.h.
Referenced by IsPreviousCachedToken().
|
inline |
Definition at line 2379 of file Preprocessor.h.
Referenced by clang::Sema::ActOnPragmaFPValueChangingOption(), clang::Sema::DiagnoseUseOfDecl(), and clang::Sema::UsualUnaryConversions().
StringRef Preprocessor::getLastMacroWithSpelling | ( | SourceLocation | Loc, |
ArrayRef< TokenValue > | Tokens | ||
) | const |
Return the name of the macro defined before Loc
that has spelling Tokens
.
If there are multiple macros with same spelling, return the last one defined.
Definition at line 360 of file Preprocessor.cpp.
References E, clang::MacroDirective::DefInfo::getLocation(), clang::MacroDirective::DefInfo::getMacroInfo(), clang::SourceManager::isBeforeInTranslationUnit(), clang::SourceLocation::isInvalid(), clang::MacroInfo::isObjectLike(), clang::SourceLocation::isValid(), Loc, macro_begin(), macro_end(), and MacroDefinitionEquals().
Referenced by DiagnoseCallingConvCast(), diagnoseMissingConstinit(), clang::SemaObjC::DiagnoseOwningPropertyGetterSynthesis(), and getFallthroughAttrSpelling().
|
inline |
Get the list of leaf (non-overridden) module macros for a name.
Definition at line 1456 of file Preprocessor.h.
References clang::IdentifierInfo::isOutOfDate().
Referenced by indexPreprocessorModuleMacros().
|
inline |
Given an identifier, return its latest non-imported MacroDirective if it is #define'd and not #undef'd, or null if it isn't #define'd.
Definition at line 1402 of file Preprocessor.h.
References getLocalMacroDirectiveHistory(), and clang::IdentifierInfo::hasMacroDefinition().
MacroDirective * Preprocessor::getLocalMacroDirectiveHistory | ( | const IdentifierInfo * | II | ) | const |
Given an identifier, return the latest non-imported macro directive for that identifier.
One can iterate over all previous macro directives from the most recent one.
Definition at line 65 of file PPMacroExpansion.cpp.
References clang::IdentifierInfo::hadMacroDefinition().
Referenced by checkConfigMacro(), and getLocalMacroDirective().
|
inline |
Computes the source location just past the end of the token at this source location.
This routine can be used to produce a source location that points just past the end of the token referenced by Loc
, and is generally used when a diagnostic needs to point just after a token where it expected something different that it received. If the returned source location would not be meaningful (e.g., if it points into a macro), this routine returns an invalid source location.
Offset | an offset from the end of the token, where the source location should refer to. The default offset (0) produces a source location pointing just past the end of the token; an offset of 1 produces a source location pointing to the last character in the token, etc. |
Definition at line 2201 of file Preprocessor.h.
References clang::Lexer::getLocForEndOfToken(), and Loc.
Referenced by clang::Sema::CheckCompleteVariableDeclaration(), clang::Sema::DiagnoseCommaOperator(), EvaluateHasIncludeCommon(), GenerateNewArgTokens(), clang::Parser::getEndOfPreviousToken(), and clang::Parser::ParseConstraintLogicalAndExpression().
|
inline |
Definition at line 2918 of file Preprocessor.h.
|
inline |
Definition at line 1372 of file Preprocessor.h.
References clang::IdentifierInfo::hasMacroDefinition().
Referenced by AddMacroResults(), EvaluateDefined(), getMacroInfo(), HandleIdentifier(), and isMacroDefined().
|
inline |
Definition at line 1385 of file Preprocessor.h.
References clang::MacroDirective::DefInfo::getDirective(), getSourceManager(), clang::IdentifierInfo::hadMacroDefinition(), and Loc.
Referenced by isMacroDefined().
|
inline |
Definition at line 1417 of file Preprocessor.h.
References getMacroDefinition(), and clang::IdentifierInfo::hasMacroDefinition().
|
inline |
Definition at line 1413 of file Preprocessor.h.
References getMacroInfo().
Referenced by checkConfigMacro(), clang::CodeCompletionResult::CreateCodeCompletionStringForMacro(), getMacroInfo(), clang::Sema::getPrintingPolicy(), HandleEndOfFile(), HandlePragmaPopMacro(), HandlePragmaPushMacro(), isTrivialSingleTokenExpansion(), and clang::ento::tryExpandAsInteger().
|
inline |
Get the max number of tokens before issuing a -Wmax-tokens warning.
Definition at line 1330 of file Preprocessor.h.
Referenced by clang::Parser::ParseTopLevelDecl().
|
inline |
Definition at line 1337 of file Preprocessor.h.
Referenced by clang::Parser::ParseTopLevelDecl().
Module * Preprocessor::getModuleForLocation | ( | SourceLocation | Loc, |
bool | AllowTextual | ||
) |
Find the module that owns the source or header file that Loc
points to.
If the location is in a file that was included into a module, or is outside any module, returns nullptr.
Definition at line 860 of file PPDirectives.cpp.
References clang::LangOptions::CurrentModule, clang::ModuleMap::findModuleForHeader(), clang::SourceManager::getExpansionLoc(), clang::SourceManager::getFileEntryRefForID(), clang::SourceManager::getFileID(), getLangOpts(), clang::ModuleMap::KnownHeader::getModule(), clang::HeaderSearch::getModuleMap(), clang::SourceManager::isInMainFile(), Loc, and clang::HeaderSearch::lookupModule().
Referenced by getHeaderToIncludeForDiagnostics(), and LookupFile().
|
inline |
Definition at line 1775 of file Preprocessor.h.
|
inline |
Retrieve the module loader associated with this preprocessor.
Definition at line 1242 of file Preprocessor.h.
Referenced by clang::SemaCodeCompletion::CodeCompleteModuleImport(), clang::Sema::getModuleLoader(), and clang::PCHGenerator::HandleTranslationUnit().
ModuleMacro * Preprocessor::getModuleMacro | ( | Module * | Mod, |
const IdentifierInfo * | II | ||
) |
Definition at line 173 of file PPMacroExpansion.cpp.
References clang::ModuleMacro::Profile().
|
inline |
Get the named module name we're preprocessing.
Requires we're preprocessing a named module.
Definition at line 2419 of file Preprocessor.h.
|
inline |
Retrieve the number of Directives that have been processed by the Preprocessor.
Definition at line 1250 of file Preprocessor.h.
|
inline |
Accessors for preprocessor callbacks.
Note that this class takes ownership of any PPCallbacks object given to it.
Definition at line 1317 of file Preprocessor.h.
Referenced by EvaluateDefined(), and EvaluateHasIncludeCommon().
|
inline |
The location of the currently-active #pragma clang arc_cf_code_audited begin.
Returns an invalid location if there is no such pragma active.
Definition at line 2018 of file Preprocessor.h.
Referenced by clang::SemaObjC::AddCFAuditedAttribute().
|
inline |
The location of the currently-active #pragma clang assume_nonnull begin.
Returns an invalid location if there is no such pragma active.
Definition at line 2033 of file Preprocessor.h.
Referenced by GetFullTypeForDeclarator().
|
inline |
Definition at line 1268 of file Preprocessor.h.
|
inline |
Definition at line 2823 of file Preprocessor.h.
|
inline |
Get the location of the recorded unterminated #pragma clang assume_nonnull begin in the preamble, if one exists.
Returns an invalid location if the premable did not end with such a pragma active or if there is no recorded preamble.
Definition at line 2048 of file Preprocessor.h.
|
inline |
Definition at line 2838 of file Preprocessor.h.
|
inline |
Get the predefines for this processor.
Used by some third-party tools to inspect and add predefines (see https://github.com/llvm/llvm-project/issues/57483).
Definition at line 1531 of file Preprocessor.h.
|
inline |
Returns the FileID for the preprocessor predefines.
Definition at line 1310 of file Preprocessor.h.
Referenced by checkConfigMacro(), HandleDirective(), HandleEndOfFile(), clang::RewriteIncludesInInput(), shouldIgnoreMacro(), and SkipTokensWhileUsingPCH().
|
inline |
Retrieve the preprocessing record, or NULL if there is no preprocessing record.
Definition at line 1626 of file Preprocessor.h.
Referenced by clang::ASTUnit::getLocalPreprocessingEntities().
|
inline |
Definition at line 1231 of file Preprocessor.h.
Referenced by clang::ModuleMacro::create(), ParseAlignPragma(), and ParseLoopHintValue().
|
inline |
Retrieve the preprocessor options used to initialize this preprocessor.
Definition at line 1215 of file Preprocessor.h.
Referenced by ComputeDATE_TIME(), EnterSourceFile(), clang::InitializePreprocessor(), clang::PCHValidator::ReadHeaderSearchOptions(), clang::PCHValidator::ReadPreprocessorOptions(), and clang::SimpleASTReaderListener::ReadPreprocessorOptions().
|
inline |
Relex the token at the specified location.
Definition at line 2136 of file Preprocessor.h.
References clang::Lexer::getRawToken(), Loc, and clang::Result.
Referenced by UseNSOptionsMacro().
|
inline |
Definition at line 1229 of file Preprocessor.h.
Referenced by clang::SemaObjC::ActOnClassPropertyRefExpr(), clang::CompilerInstance::createASTContext(), clang::SemaObjC::HandleExprPropertyRefExpr(), clang::ASTUnit::LoadFromASTFile(), and LookupMemberExpr().
|
inline |
Definition at line 1224 of file Preprocessor.h.
Referenced by clang::Sema::ActOnNumericConstant(), AddFunctionParameterChunks(), clang::ModuleDependencyCollector::attachToPreprocessor(), clang::TokenConcatenation::AvoidConcat(), clang::VerifyDiagnosticConsumer::BeginSourceFile(), clang::CharLiteralParser::CharLiteralParser(), checkConfigMacro(), clang::Sema::checkLiteralOperatorId(), clang::Lexer::Create_PragmaLexer(), clang::CompilerInstance::createASTContext(), createPreprocessingRecord(), clang::DoPrintPreprocessedInput(), clang::DoRewriteTest(), emitPremigrationErrors(), EnterSourceFile(), EvaluateDefined(), EvaluateValue(), clang::PrintDependencyDirectivesSourceMinimizerAction::ExecuteAction(), clang::DumpRawTokensAction::ExecuteAction(), FindLocsWithCommonFileID(), clang::PreprocessorLexer::getFileEntry(), GetFirstChar(), getHeaderToIncludeForDiagnostics(), getIssueHash(), getMacroDefinitionAtLoc(), GetMappedTokenLoc(), clang::VerifyDiagnosticConsumer::HandleComment(), clang::TokenLexer::Init(), isExpandedFromConfigurationMacro(), IsPreviousCachedToken(), clang::TokenLexer::Lex(), LexRawTokensFromMainFile(), parseSimpleIntegerLiteral(), clang::PreprocessorLexer::PreprocessorLexer(), ReadLineMarkerFlags(), clang::MacroExpansionContext::registerForPreprocessor(), clang::RewriteIncludesInInput(), clang::RewriteMacrosInInput(), clang::CodeGen::CoverageMappingModuleGen::setUpCoverageCallbacks(), shouldIgnoreMacro(), SplitToken(), and clang::syntax::TokenCollector::TokenCollector().
|
inline |
Return the 'spelling' of the Tok token.
The spelling of a token is the characters used to represent the token in the source file after trigraph expansion and escaped-newline folding. In particular, this wants to get the true, uncanonicalized, spelling of things like digraphs, UCNs, etc.
Invalid | If non-null, will be set true if an error occurs. |
Definition at line 2105 of file Preprocessor.h.
References clang::Lexer::getSpelling(), and clang::Invalid.
|
inline |
Get the spelling of a token into a preallocated buffer, instead of as an std::string.
The caller is required to allocate enough space for the token, which is guaranteed to be at least Tok.getLength() bytes long. The length of the actual result is returned.
Note that this method may do two possible things: it may either fill in the buffer specified with characters, or it may change the input pointer to point to a constant buffer with the data already in it (avoiding a copy). The caller is not allowed to modify the returned buffer pointer if an internal buffer is returned.
Definition at line 2121 of file Preprocessor.h.
References clang::Lexer::getSpelling(), and clang::Invalid.
StringRef Preprocessor::getSpelling | ( | const Token & | Tok, |
SmallVectorImpl< char > & | Buffer, | ||
bool * | Invalid = nullptr |
||
) | const |
Get the spelling of a token into a SmallVector.
getSpelling - This method is used to get the spelling of a token into a SmallVector.
Note that the returned StringRef may not point to the supplied buffer if a copy can be avoided.
Definition at line 469 of file Preprocessor.cpp.
References clang::Token::getIdentifierInfo(), clang::Token::getLength(), getSpelling(), clang::Token::hasUCN(), clang::Invalid, clang::Token::isNot(), and clang::Token::needsCleaning().
|
inline |
Return the 'spelling' of the token at the given location; does not go up to the spelling location or down to the expansion location.
buffer | A buffer which will be used only if the token requires "cleaning", e.g. if it contains trigraphs or escaped newlines |
invalid | If non-null, will be set true if an error occurs. |
Definition at line 2091 of file Preprocessor.h.
References clang::Lexer::getSpelling().
Referenced by clang::Sema::ActOnCharacterConstant(), clang::Sema::ActOnNumericConstant(), buildMSAsmString(), clang::DoRewriteTest(), DumpToken(), dumpTokenInto(), EvaluateHasIncludeCommon(), EvaluateValue(), GetFirstChar(), GetLineValue(), getSpelling(), HandlePragmaDependency(), HandlePragmaIncludeAlias(), clang::MacroInfo::isIdenticalTo(), isMapModifier(), isMapType(), LexHeaderName(), LookUpIdentifierInfo(), clang::Parser::ParseOpenMPVarList(), ParsePragmaPushOrPopMacro(), parseSimpleIntegerLiteral(), PrintMacroDefinition(), PrintPreprocessedTokens(), clang::RewriteMacrosInInput(), and clang::MacroArgs::StringifyArgument().
|
inline |
Given a Token Tok
that is a numeric constant with length 1, return the value of constant as an unsigned 8-bit integer.
Definition at line 2144 of file Preprocessor.h.
References D, clang::Token::getKind(), clang::Token::getLength(), clang::Token::getLiteralData(), clang::Token::getLocation(), clang::Invalid, clang::Token::is(), and clang::Token::needsCleaning().
Referenced by clang::Sema::ActOnNumericConstant().
|
inline |
Definition at line 1274 of file Preprocessor.h.
|
inline |
Definition at line 1221 of file Preprocessor.h.
Referenced by clang::Sema::ActOnNumericConstant(), clang::CharLiteralParser::CharLiteralParser(), EvaluateValue(), clang::Parser::getTargetInfo(), Initialize(), clang::InitializePreprocessor(), parseSimpleIntegerLiteral(), and clang::PCHValidator::ReadTargetOptions().
|
inline |
Get the number of tokens processed so far.
Definition at line 1327 of file Preprocessor.h.
Referenced by clang::Parser::ParseTopLevelDecl().
size_t Preprocessor::getTotalMemory | ( | ) | const |
Definition at line 330 of file Preprocessor.cpp.
Referenced by PrintStats().
|
inline |
Definition at line 2375 of file Preprocessor.h.
|
inline |
Definition at line 1244 of file Preprocessor.h.
References clang::ModuleLoader::HadFatalFailure.
bool Preprocessor::HandleComment | ( | Token & | result, |
SourceRange | Comment | ||
) |
Definition at line 1425 of file Preprocessor.cpp.
References getCommentRetentionState(), and Lex().
void Preprocessor::HandleDirective | ( | Token & | Result | ) |
Callback invoked when the lexer sees a # token at the start of a line.
HandleDirective - This callback is invoked when the lexer sees a # token at the start of a line.
This consumes the directive, modifies the lexer/preprocessor state, and advances the lexer(s) so that the next token read is the correct one.
Definition at line 1199 of file PPDirectives.cpp.
References clang::CodeCompletionHandler::CodeCompleteDirective(), Diag(), DiscardUntilEndOfDirective(), clang::PreprocessorLexer::getConditionalStackDepth(), getCurrentFileLexer(), clang::SourceManager::getFileID(), clang::MultipleIncludeOpt::getHasReadAnyTokensVal(), clang::Token::getIdentifierInfo(), clang::MultipleIncludeOpt::getImmediatelyAfterTopLevelIfndef(), getLangOpts(), clang::Token::getLocation(), clang::IdentifierInfo::getPPKeywordID(), getPredefinesFileID(), HandleSkippedDirectiveWhileUsingPCH(), LexUnexpandedToken(), clang::PreprocessorLexer::MIOpt, clang::PreprocessorLexer::ParsingPreprocessorDirective, clang::PIK_HashPragma, clang::MultipleIncludeOpt::resetImmediatelyAfterTopLevelIfndef(), clang::Result, setCodeCompletionReached(), and clang::MultipleIncludeOpt::SetReadToken().
Callback invoked when the lexer hits the end of the current file.
HandleEndOfFile - This callback is invoked when the lexer hits the end of the current file.
This either returns the EOF token and returns true, or pops a level off the include stack and returns false, at which point the client should call lex again.
This either returns the EOF token or pops a level off the include stack and keeps going.
Definition at line 332 of file PPLexerChange.cpp.
References collectAllSubModulesWithUmbrellaHeader(), clang::FixItHint::CreateReplacement(), creatingPCHWithThroughHeader(), Diag(), E, clang::PPCallbacks::ExitFile, clang::MultipleIncludeOpt::GetControllingMacroAtEndOfFile(), getCurrentModule(), clang::MultipleIncludeOpt::GetDefinedLocation(), clang::MultipleIncludeOpt::GetDefinedMacro(), clang::SourceManager::getFileCharacteristic(), clang::PreprocessorLexer::getFileEntry(), clang::SourceManager::getFileEntryForID(), clang::PreprocessorLexer::getFileID(), clang::SourceManager::getIncludeLoc(), clang::PreprocessorLexer::getInitialNumSLocEntries(), getLangOpts(), clang::SourceManager::getLocForStartOfFile(), getMacroInfo(), clang::MultipleIncludeOpt::GetMacroLocation(), getPredefinesFileID(), clang::PreprocessorLexer::getSourceLocation(), isCodeCompletionEnabled(), isIncrementalProcessingEnabled(), isInPrimaryFile(), isMacroDefined(), isPCHThroughHeader(), isPPInSafeBufferOptOutRegion(), isRecordingPreamble(), clang::FileID::isValid(), clang::SourceLocation::isValid(), LeaveSubmodule(), Loc, clang::SourceManager::local_sloc_entry_size(), clang::PreprocessorLexer::MIOpt, recomputeCurLexerKind(), RemoveTopOfLexerStack(), clang::Result, clang::HeaderSearch::SetFileControllingMacro(), clang::SourceManager::setNumCreatedFIDsForFileID(), clang::TU_Complete, and TUKind.
Referenced by HandleEndOfTokenLexer().
Callback invoked when the current TokenLexer hits the end of its token stream.
HandleEndOfTokenLexer - This callback is invoked when the current TokenLexer hits the end of its token stream.
Definition at line 601 of file PPLexerChange.cpp.
References HandleEndOfFile(), and clang::Result.
Referenced by HandleMicrosoftCommentPaste(), and clang::TokenLexer::Lex().
Callback invoked when the lexer reads an identifier and has filled in the tokens IdentifierInfo member.
HandleIdentifier - This callback is invoked when the lexer reads an identifier.
This callback potentially macro expands it or turns it into a named token (like 'for').
This callback looks up the identifier in the map and/or potentially macro expands it or turns it into a named token (like 'for').
Note that callers of this method are guarded by checking the IdentifierInfo's 'isHandleIdentifierCase' bit. If this method changes, the IdentifierInfo methods that compute these properties will need to change to match.
Definition at line 776 of file Preprocessor.cpp.
References Diag(), clang::Token::DisableExpand, getIdentifierTable(), getLangOpts(), getMacroDefinition(), clang::IdentifierInfo::getName(), clang::IdentifierInfo::getTokenID(), HandlePoisonedIdentifier(), Identifier, clang::IdentifierInfo::isExtensionToken(), clang::IdentifierInfo::isFutureCompatKeyword(), clang::IdentifierInfo::isModulesImport(), clang::IdentifierInfo::isOutOfDate(), clang::IdentifierInfo::isPoisoned(), clang::IdentifierInfo::setIsFutureCompatKeyword(), and clang::IdentifierInfo::setIsPoisoned().
Referenced by clang::TokenLexer::Lex().
void Preprocessor::HandleMicrosoftCommentPaste | ( | Token & | Tok | ) |
When the macro expander pastes together a comment (/##/) in Microsoft mode, this method handles updating the current state, returning the token on the next source line.
HandleMicrosoftCommentPaste - When the macro expander pastes together a comment (/##/) in microsoft mode, this method handles updating the current state, returning the token on the next source line.
Definition at line 639 of file PPLexerChange.cpp.
References HandleEndOfTokenLexer(), clang::Token::is(), clang::Token::isNot(), Lex(), clang::PreprocessorLexer::LexingRawMode, and clang::PreprocessorLexer::ParsingPreprocessorDirective.
void Preprocessor::HandlePoisonedIdentifier | ( | Token & | Identifier | ) |
Display reason for poisoned identifier.
Definition at line 752 of file Preprocessor.cpp.
References Diag(), and Identifier.
Referenced by HandleIdentifier(), clang::TokenLexer::Lex(), and MaybeHandlePoisonedIdentifier().
void Preprocessor::HandlePragmaDependency | ( | Token & | DependencyTok | ) |
HandlePragmaDependency - Handle #pragma GCC dependency "foo" blah.
Definition at line 516 of file Pragma.cpp.
References Diag(), clang::File, Filename, getCurrentFileLexer(), clang::PreprocessorLexer::getFileEntry(), GetIncludeFilenameSpelling(), clang::Token::getLocation(), clang::FileEntryRef::getModificationTime(), getSpelling(), clang::Invalid, clang::Token::isNot(), Lex(), LexHeaderName(), and LookupFile().
void Preprocessor::HandlePragmaHdrstop | ( | Token & | Tok | ) |
Definition at line 881 of file Pragma.cpp.
References creatingPCHWithPragmaHdrStop(), Diag(), clang::FileName, clang::Token::getLocation(), clang::Token::is(), clang::SourceManager::isInMainFile(), clang::Token::isNot(), Lex(), LexStringLiteral(), clang::Result, and usingPCHWithPragmaHdrStop().
Referenced by HandleSkippedDirectiveWhileUsingPCH().
void Preprocessor::HandlePragmaIncludeAlias | ( | Token & | Tok | ) |
Definition at line 685 of file Pragma.cpp.
References clang::HeaderSearch::AddIncludeAlias(), Diag(), getHeaderSearchInfo(), GetIncludeFilenameSpelling(), clang::Token::getLocation(), getSpelling(), clang::Token::is(), clang::Token::isNot(), Lex(), and LexHeaderName().
void Preprocessor::HandlePragmaMark | ( | Token & | MarkTok | ) |
Definition at line 432 of file Pragma.cpp.
References clang::Token::getLocation().
void Preprocessor::HandlePragmaModuleBuild | ( | Token & | Tok | ) |
Definition at line 807 of file Pragma.cpp.
References clang::ModuleLoader::createModuleFromSource(), Diag(), DiscardUntilEndOfDirective(), clang::Token::getKind(), clang::Token::getLocation(), clang::IdentifierInfo::getName(), clang::Token::getRawIdentifier(), clang::Token::is(), clang::Token::isAtStartOfLine(), clang::Token::isNot(), LexModuleNameComponent(), LexUnexpandedToken(), and Loc.
void Preprocessor::HandlePragmaOnce | ( | Token & | OnceTok | ) |
HandlePragmaOnce - Handle #pragma once. OnceTok is the 'once'.
Definition at line 417 of file Pragma.cpp.
References Diag(), getCurrentFileLexer(), getLangOpts(), isInPrimaryFile(), clang::HeaderSearch::MarkFileIncludeOnce(), clang::TU_Prefix, and TUKind.
void Preprocessor::HandlePragmaPoison | ( | ) |
HandlePragmaPoison - Handle #pragma GCC poison. PoisonTok is the 'poison'.
Definition at line 442 of file Pragma.cpp.
References Diag(), clang::Token::is(), clang::IdentifierInfo::isFromAST(), isMacroDefined(), clang::Token::isNot(), clang::IdentifierInfo::isPoisoned(), clang::PreprocessorLexer::LexingRawMode, LexUnexpandedToken(), LookUpIdentifierInfo(), clang::IdentifierInfo::setChangedSinceDeserialization(), and clang::IdentifierInfo::setIsPoisoned().
void Preprocessor::HandlePragmaPopMacro | ( | Token & | PopMacroTok | ) |
Handle #pragma pop_macro.
The syntax is:
Definition at line 650 of file Pragma.cpp.
References appendDefMacroDirective(), appendMacroDirective(), Diag(), clang::Token::getLocation(), getMacroInfo(), clang::IdentifierInfo::getName(), and ParsePragmaPushOrPopMacro().
void Preprocessor::HandlePragmaPushMacro | ( | Token & | PushMacroTok | ) |
Handle #pragma push_macro.
The syntax is:
Definition at line 627 of file Pragma.cpp.
References getMacroInfo(), ParsePragmaPushOrPopMacro(), and clang::MacroInfo::setIsAllowRedefinitionsWithoutWarning().
void Preprocessor::HandlePragmaSystemHeader | ( | Token & | SysHeaderTok | ) |
HandlePragmaSystemHeader - Implement #pragma GCC system_header.
We know that the whole directive has been parsed.
Definition at line 484 of file Pragma.cpp.
References clang::SourceManager::AddLineNote(), clang::SrcMgr::C_System, Diag(), getCurrentFileLexer(), clang::PreprocessorLexer::getFileEntry(), clang::PresumedLoc::getFilename(), clang::PresumedLoc::getLine(), clang::SourceManager::getLineTableFilenameID(), clang::Token::getLocation(), clang::SourceManager::getPresumedLoc(), isInPrimaryFile(), clang::PresumedLoc::isInvalid(), clang::HeaderSearch::MarkFileSystemHeader(), and clang::PPCallbacks::SystemHeaderPragma.
void Preprocessor::HandleSkippedDirectiveWhileUsingPCH | ( | Token & | Result, |
SourceLocation | HashLoc | ||
) |
Process directives while skipping until the through header or #pragma hdrstop is found.
Process a directive while looking for the through header or a #pragma hdrstop.
The following directives are handled: #include (to check if it is the through header) #define (to warn about macros that don't match the PCH) #pragma (to check for pragma hdrstop). All other directives are completely discarded.
Definition at line 1174 of file PPDirectives.cpp.
References DiscardUntilEndOfDirective(), HandlePragmaHdrstop(), Lex(), and clang::Result.
Referenced by HandleDirective().
|
inline |
Definition at line 2819 of file Preprocessor.h.
void Preprocessor::IgnorePragmas | ( | ) |
Install empty handlers for all pragmas (making them ignored).
Ignore all pragmas, useful for modes such as -Eonly which would otherwise warn about those pragmas being unknown.
Definition at line 2196 of file Pragma.cpp.
References AddPragmaHandler().
Referenced by DoPrintMacros(), clang::PreprocessOnlyAction::ExecuteAction(), and clang::RewriteIncludesInInput().
|
inline |
Increment the counters for the number of token paste operations performed.
If fast was specified, this is a 'fast paste' case we handled.
Definition at line 2243 of file Preprocessor.h.
void Preprocessor::Initialize | ( | const TargetInfo & | Target, |
const TargetInfo * | AuxTarget = nullptr |
||
) |
Initialize the preprocessor using information about the target.
Target | is owned by the caller and must remain valid for the lifetime of the preprocessor. |
AuxTarget | is owned by the caller and must remain valid for the lifetime of the preprocessor. |
Definition at line 192 of file Preprocessor.cpp.
References clang::IdentifierTable::AddKeywords(), clang::LangOptionsBase::FEM_UnsetOnCommandLine, getLangOpts(), getTargetInfo(), setCurrentFPEvalMethod(), clang::HeaderSearch::setTarget(), and setTUFPEvalMethod().
void Preprocessor::InitializeForModelFile | ( | ) |
Initialize the preprocessor to parse a model file.
To parse model files the preprocessor of the original source is reused to preserver the identifier table. However to avoid some duplicate information in the preprocessor some cleanup is needed before it is used to parse model files. This method does that cleanup.
Definition at line 220 of file Preprocessor.cpp.
|
inline |
Returns true if the given MacroID location points at the last token of the macro expansion.
MacroEnd | If non-null and function returns true, it is set to end location of the macro. |
Definition at line 2221 of file Preprocessor.h.
References clang::Lexer::isAtEndOfMacroExpansion().
|
inline |
Returns true if the given MacroID location points at the first token of the macro expansion.
MacroBegin | If non-null and function returns true, it is set to begin location of the macro. |
Definition at line 2210 of file Preprocessor.h.
References clang::Lexer::isAtStartOfMacroExpansion().
|
inline |
True if EnableBacktrackAtThisPos() was called and caching of tokens is on.
Definition at line 1749 of file Preprocessor.h.
Referenced by AnnotateCachedTokens(), Backtrack(), CommitBacktrackedTokens(), ReplaceLastTokenWithAnnotation(), RevertCachedTokens(), TypoCorrectToken(), and ~Preprocessor().
|
inline |
Determine if we are performing code completion.
Definition at line 1985 of file Preprocessor.h.
Referenced by clang::Sema::ActOnBlockStmtExpr(), clang::Sema::ActOnEndOfTranslationUnit(), clang::Sema::ActOnFinishFunctionBody(), EnterSourceFile(), HandleEndOfFile(), clang::Parser::Parser(), and setCodeCompletionReached().
|
inline |
Returns true if code-completion is enabled and we have hit the code-completion point.
Definition at line 2003 of file Preprocessor.h.
Referenced by ProduceSignatureHelp().
|
inline |
Return true if we are lexing directly from the specified lexer.
Definition at line 1289 of file Preprocessor.h.
|
inline |
Returns true if incremental processing is enabled.
Definition at line 1960 of file Preprocessor.h.
Referenced by clang::Sema::ActOnEndOfTranslationUnit(), clang::Sema::ActOnPopScope(), HandleEndOfFile(), and clang::IncrementalParser::Parse().
|
inline |
If we are implementing an implementation module unit.
Note that the module implementation partition is not considered as an implementation unit.
Definition at line 2424 of file Preprocessor.h.
|
inline |
If we're importing a standard C++20 Named Modules.
Definition at line 2429 of file Preprocessor.h.
References getLangOpts().
Referenced by LexAfterModuleImport(), and clang::tooling::dependencies::ModuleDepCollectorPP::moduleImport().
|
inline |
If we are proprocessing a named interface unit.
Note that a module implementation partition is not considered as an named interface unit here although it is importable to ease the parsing.
Definition at line 2413 of file Preprocessor.h.
|
inline |
If we are preprocessing a named module.
Definition at line 2407 of file Preprocessor.h.
bool Preprocessor::isInPrimaryFile | ( | ) | const |
Return true if we're in the top-level file, not in a #include.
isInPrimaryFile - Return true if we're in the top-level file, not in a #include.
This looks through macro expansions and active _Pragma lexers.
Definition at line 35 of file PPLexerChange.cpp.
Referenced by HandleEndOfFile(), HandlePragmaOnce(), and HandlePragmaSystemHeader().
|
inline |
Definition at line 1351 of file Preprocessor.h.
References bool, getLangOpts(), getMacroDefinition(), and clang::IdentifierInfo::hasMacroDefinition().
|
inline |
Definition at line 1348 of file Preprocessor.h.
References clang::IdentifierTable::get(), Id, and isMacroDefined().
Referenced by AddOrdinaryNameResults(), clang::Sema::CheckPtrComparisonWithNullChar(), clang::SemaCodeCompletion::CodeCompleteObjCPassingType(), clang::Sema::DiagnoseSentinelCalls(), diagnoseXorMisusedAsPow(), DoEmitAvailabilityWarning(), clang::arcmt::trans::getNilString(), HandleEndOfFile(), HandlePragmaPoison(), InsertOCLBuiltinDeclarationsFromTable(), isMacroDefined(), MaybeAddSentinel(), and clang::HeaderSearch::ShouldEnterIncludeFile().
|
inline |
Determine whether II is defined as a macro within the module M, if that is a module that we've already preprocessed.
Does not check for macros imported into M.
Definition at line 1359 of file Preprocessor.h.
References clang::IdentifierInfo::hasMacroDefinition().
Referenced by clang::HeaderSearch::ShouldEnterIncludeFile().
|
inline |
True if we are currently preprocessing a if or #elif directive.
Definition at line 1255 of file Preprocessor.h.
Referenced by EvaluateHasIncludeCommon().
Returns true if the FileEntry is the PCH through header.
Definition at line 613 of file Preprocessor.cpp.
References clang::SourceManager::getFileEntryForID(), and clang::FileID::isValid().
Referenced by HandleEndOfFile().
bool Preprocessor::isPPInSafeBufferOptOutRegion | ( | ) |
Definition at line 1577 of file Preprocessor.cpp.
Referenced by enterOrExitSafeBufferOptOutRegion(), and HandleEndOfFile().
bool Preprocessor::isPPInSafeBufferOptOutRegion | ( | SourceLocation & | StartLoc | ) |
StartLoc | output argument. It will be set to the start location of the current "-Wunsafe-buffer-usage" opt-out region iff this function returns true. |
Definition at line 1580 of file Preprocessor.cpp.
|
inline |
Returns true if the preprocessor is responsible for generating output, false if it is producing tokens to be consumed by Parse and Sema.
Definition at line 1286 of file Preprocessor.h.
Whether Tok
is the most recent token (CachedLexPos - 1
) in CachedTokens.
Definition at line 171 of file PPCaching.cpp.
References clang::Token::getKind(), getLastCachedTokenLocation(), clang::Token::getLocation(), and getSourceManager().
|
inline |
Definition at line 2815 of file Preprocessor.h.
Referenced by HandleEndOfFile().
bool Preprocessor::isSafeBufferOptOut | ( | const SourceManager & | SourceMgr, |
const SourceLocation & | Loc | ||
) | const |
Loc
is in a "-Wunsafe-buffer-usage" opt-out region. This Loc
must be a source location that has been pre-processed. Definition at line 1486 of file Preprocessor.cpp.
References clang::SourceManager::isBeforeInTranslationUnit(), clang::SourceManager::isLocalSourceLocation(), LoadedRegions, and Loc.
|
inline |
True if EnableBacktrackAtThisPos() was called and caching of unannotated tokens is on.
Definition at line 1753 of file Preprocessor.h.
Definition at line 776 of file PPLexerChange.cpp.
References addModuleMacro(), getLangOpts(), clang::MacroDirective::getPrevious(), clang::Module::getTopLevelModuleName(), and makeModuleVisible().
Referenced by HandleEndOfFile().
void Preprocessor::Lex | ( | Token & | Result | ) |
Lex the next token for this preprocessor.
Definition at line 869 of file Preprocessor.cpp.
References CheckPointStepSize, getIdentifierInfo(), getLangOpts(), clang::ModuleLoader::HadFatalFailure, clang::Token::IsReinjected, clang::Result, setCodeCompletionIdentifierInfo(), and setCodeCompletionTokenRange().
Referenced by CheckEndOfDirective(), CollectPpImportSuffix(), clang::Parser::ConsumeToken(), clang::DoPrintPreprocessedInput(), EvaluateFeatureLikeBuiltinMacro(), clang::PrintDependencyDirectivesSourceMinimizerAction::ExecuteAction(), clang::DumpTokensAction::ExecuteAction(), clang::PreprocessOnlyAction::ExecuteAction(), FinishLexStringLiteral(), FixDigraph(), clang::MacroArgs::getPreExpArgument(), HandleComment(), HandleMicrosoftCommentPaste(), HandlePragmaDependency(), HandlePragmaHdrstop(), HandlePragmaIncludeAlias(), HandleSkippedDirectiveWhileUsingPCH(), LexAfterModuleImport(), LexHeaderName(), clang::PreprocessorLexer::LexIncludeFilename(), LexNonComment(), LexStringLiteral(), LexTokensUntilEOF(), LexUnexpandedToken(), clang::IncrementalParser::Parse(), ParseAlignPragma(), ParseLoopHintValue(), ParsePragmaPushOrPopMacro(), parseSimpleIntegerLiteral(), PrintPreprocessedTokens(), ReadLineMarkerFlags(), clang::RewriteIncludesInInput(), clang::RewriteMacrosInInput(), clang::Parser::TryAnnotateTypeOrScopeToken(), and clang::Parser::TryConsumeToken().
Lex a token following the 'import' contextual keyword.
pp-import: [C++20] import header-name pp-import-suffix[opt] ; import header-name-tokens pp-import-suffix[opt] ;
[ObjC] @ import module-name ; [Clang] import module-name ;
header-name-tokens: string-literal < [any sequence of preprocessing-tokens other than >] > module-name: module-name-qualifier[opt] identifier module-name-qualifier module-name-qualifier[opt] identifier .
We respond to a pp-import by importing macros from the named module.
Definition at line 1144 of file Preprocessor.cpp.
References CollectPpImportSuffix(), Diag(), getIdentifierInfo(), getLangOpts(), clang::ModuleLoader::HadFatalFailure, clang::Module::Hidden, isInImportingCXXNamedModules(), clang::SourceLocation::isMacroID(), Lex(), LexHeaderName(), clang::ModuleLoader::loadModule(), makeModuleVisible(), recomputeCurLexerKind(), clang::Result, clang::Token::setIdentifierInfo(), clang::Token::setKind(), clang::Token::setLength(), clang::Token::setLocation(), and clang::Token::startToken().
std::optional< LexEmbedParametersResult > Preprocessor::LexEmbedParameters | ( | Token & | Current, |
bool | ForHasEmbed | ||
) |
Lex the parameters for an #embed directive, returns nullopt on error.
Definition at line 3625 of file PPDirectives.cpp.
References Diag(), DiscardUntilEndOfDirective(), clang::Token::getIdentifierInfo(), clang::Token::getKind(), clang::Token::getLocation(), clang::IdentifierInfo::getName(), clang::Token::is(), clang::Token::isNot(), clang::Token::isOneOf(), LexNonComment(), clang::Parameter, clang::Result, and toString().
Lex a token, forming a header-name token if possible.
Lex a header-name token (including one formed from header-name-tokens if AllowMacroExpansion
is true
).
FilenameTok | Filled in with the next token. On success, this will be either a header_name token. On failure, it will be whatever other token was found instead. |
AllowMacroExpansion | If true , allow the header name to be formed by macro expansion (concatenating tokens as necessary if the first token is a '<'). |
true
if we reached EOD or EOF while looking for a > token in a concatenated header name and diagnosed it. false
otherwise. Definition at line 1001 of file Preprocessor.cpp.
References CreateString(), Diag(), clang::Token::getLength(), clang::Token::getLocation(), getSpelling(), clang::Token::hasLeadingEmptyMacro(), clang::Token::hasLeadingSpace(), clang::Token::is(), clang::Token::isAtStartOfLine(), clang::Token::isNot(), clang::Token::isOneOf(), clang::Token::LeadingEmptyMacro, clang::Token::LeadingSpace, Lex(), clang::PreprocessorLexer::LexIncludeFilename(), memcpy(), setCodeCompletionReached(), clang::Token::setFlagValue(), clang::Token::setKind(), clang::Token::StartOfLine, and clang::Token::startToken().
Referenced by EvaluateHasIncludeCommon(), HandlePragmaDependency(), HandlePragmaIncludeAlias(), and LexAfterModuleImport().
|
inline |
Lex a token.
If it's a comment, keep lexing until we get something not a comment.
This is useful in -E -C mode where comments would foul up preprocessor directive handling.
Definition at line 1803 of file Preprocessor.h.
References Lex(), and clang::Result.
Referenced by EvaluateDefined(), EvaluateDirectiveSubExpr(), EvaluateHasIncludeCommon(), EvaluateValue(), and LexEmbedParameters().
bool Preprocessor::LexOnOffSwitch | ( | tok::OnOffSwitch & | Result | ) |
Lex an on-off-switch (C99 6.10.6p2) and verify that it is followed by EOD.
Return true if the token is not a valid on-off-switch.
Definition at line 968 of file Pragma.cpp.
References Diag(), clang::Token::getIdentifierInfo(), clang::Token::isNot(), clang::IdentifierInfo::isStr(), LexUnexpandedToken(), clang::tok::OOS_DEFAULT, clang::tok::OOS_OFF, clang::tok::OOS_ON, and clang::Result.
|
inline |
Lex a string literal, which may be the concatenation of multiple string literals and may even come from macro expansion.
Definition at line 1782 of file Preprocessor.h.
References FinishLexStringLiteral(), Lex(), LexUnexpandedToken(), and clang::Result.
Referenced by HandlePragmaHdrstop().
void Preprocessor::LexTokensUntilEOF | ( | std::vector< Token > * | Tokens = nullptr | ) |
Lex all tokens for this preprocessor until (and excluding) end of file.
Definition at line 978 of file Preprocessor.cpp.
References clang::Token::isOneOf(), and Lex().
Referenced by DoPrintMacros().
|
inline |
Like LexNonComment, but this disables macro expansion of identifier tokens.
Definition at line 1823 of file Preprocessor.h.
References LexUnexpandedToken(), and clang::Result.
Referenced by EvaluateDefined().
|
inline |
Just like Lex, but disables macro expansion of identifier tokens.
Definition at line 1810 of file Preprocessor.h.
References Lex(), and clang::Result.
Referenced by CheckEndOfDirective(), DiscardUntilEndOfDirective(), EvaluateFeatureLikeBuiltinMacro(), FinishLexStringLiteral(), HandleDirective(), clang::PragmaNamespace::HandlePragma(), HandlePragmaModuleBuild(), HandlePragmaPoison(), LexModuleName(), LexModuleNameComponent(), LexOnOffSwitch(), LexStringLiteral(), and LexUnexpandedNonComment().
Peeks ahead N tokens and returns that token without consuming any tokens.
LookAhead(0) returns the next token that would be returned by Lex(), LookAhead(1) returns the token after it, etc. This returns normal tokens after phase 5. As such, it is equivalent to using 'Lex', not 'LexUnexpandedToken'.
Definition at line 1847 of file Preprocessor.h.
Referenced by clang::Parser::NextToken(), clang::Parser::parseMapTypeModifiers(), clang::Parser::ParseMSAsmIdentifier(), and clang::Parser::ParseOpenMPVarList().
OptionalFileEntryRef Preprocessor::LookupEmbedFile | ( | StringRef | Filename, |
bool | isAngled, | ||
bool | OpenFile, | ||
const FileEntry * | LookupFromFile = nullptr |
||
) |
Given a "Filename" or <Filename> reference, look up the indicated embed resource.
isAngled
indicates whether the file reference is for system #include's or not (i.e. using <> instead of ""). If OpenFile
is true, the file looked up is opened for reading, otherwise it only validates that the file exists. Quoted filenames are looked up relative to LookupFromFile
if it is nonnull.
Returns std::nullopt on failure.
Definition at line 1078 of file PPDirectives.cpp.
References clang::FileName, Filename, clang::FileManager::getDirectoryRef(), getFileManager(), clang::FileManager::getFileRef(), clang::DirectoryEntryRef::getName(), and clang::FileEntry::tryGetRealPathName().
OptionalFileEntryRef Preprocessor::LookupFile | ( | SourceLocation | FilenameLoc, |
StringRef | Filename, | ||
bool | isAngled, | ||
ConstSearchDirIterator | FromDir, | ||
const FileEntry * | FromFile, | ||
ConstSearchDirIterator * | CurDir, | ||
SmallVectorImpl< char > * | SearchPath, | ||
SmallVectorImpl< char > * | RelativePath, | ||
ModuleMap::KnownHeader * | SuggestedModule, | ||
bool * | IsMapped, | ||
bool * | IsFrameworkFound, | ||
bool | SkipCache = false , |
||
bool | OpenFile = true , |
||
bool | CacheFailures = true |
||
) |
Given a "foo" or <foo> reference, look up the indicated file.
Returns std::nullopt on failure. isAngled
indicates whether the file reference is for system #include's or not (i.e. using <> instead of "").
Definition at line 952 of file PPDirectives.cpp.
References Filename, clang::ModuleMap::getBuiltinDir(), getCurrentFileLexer(), getCurrentModule(), clang::FileEntryRef::getDir(), clang::FileEntryRef::getFileEntry(), clang::PreprocessorLexer::getFileEntry(), clang::SourceManager::getFileEntryRefForID(), clang::PreprocessorLexer::getFileID(), clang::SourceManager::getMainFileID(), getModuleForLocation(), clang::HeaderSearch::getModuleMap(), clang::FileManager::getOptionalDirectoryRef(), clang::Module::IsSystem, clang::HeaderSearch::LookupFile(), clang::HeaderSearch::LookupSubframeworkHeader(), and clang::ModuleMap::shouldImportRelativeToBuiltinIncludeDir().
Referenced by EnterMainSourceFile(), EvaluateHasIncludeCommon(), HandlePragmaDependency(), and ParseDirective().
IdentifierInfo * Preprocessor::LookUpIdentifierInfo | ( | Token & | Identifier | ) | const |
Given a tok::raw_identifier token, look up the identifier information for the token and install it into the token, updating the token kind accordingly.
LookUpIdentifierInfo - Given a tok::raw_identifier token, look up the identifier information for the token and install it into the token, updating the token kind accordingly.
Definition at line 699 of file Preprocessor.cpp.
References clang::expandUCNs(), getIdentifierInfo(), getSpelling(), clang::IdentifierInfo::getTokenID(), and Identifier.
Referenced by HandlePragmaPoison(), LexRawTokensFromMainFile(), and ParsePragmaPushOrPopMacro().
Preprocessor::macro_iterator Preprocessor::macro_begin | ( | bool | IncludeExternalMacros = true | ) | const |
Definition at line 316 of file Preprocessor.cpp.
Referenced by AddMacroResults(), clang::SemaCodeCompletion::CodeCompletePreprocessorMacroName(), DoPrintMacros(), getLastMacroWithSpelling(), and macros().
Preprocessor::macro_iterator Preprocessor::macro_end | ( | bool | IncludeExternalMacros = true | ) | const |
Definition at line 343 of file Preprocessor.cpp.
Referenced by AddMacroResults(), clang::SemaCodeCompletion::CodeCompletePreprocessorMacroName(), DoPrintMacros(), getLastMacroWithSpelling(), and macros().
|
inline |
Definition at line 1480 of file Preprocessor.h.
References macro_begin(), and macro_end().
Referenced by clang::SemaCodeCompletion::CodeCompleteObjCMethodDeclSelector(), clang::DumpModuleInfoAction::ExecuteAction(), indexPreprocessorMacros(), and indexPreprocessorModuleMacros().
void Preprocessor::makeModuleVisible | ( | Module * | M, |
SourceLocation | Loc | ||
) |
Definition at line 1333 of file Preprocessor.cpp.
References Diag(), Loc, and Path.
Referenced by EnterSubmodule(), LeaveSubmodule(), and LexAfterModuleImport().
|
inline |
Mark the given clang module as affecting the current clang module or translation unit.
Definition at line 1489 of file Preprocessor.h.
References clang::Module::isModuleMapModule().
Referenced by clang::CompilerInstance::loadModule().
|
inline |
Mark the file as included.
Returns true if this is the first time the file was included.
Definition at line 1507 of file Preprocessor.h.
References clang::File, and clang::HeaderSearch::getFileInfo().
Referenced by EnterMainSourceFile(), and clang::HeaderSearch::ShouldEnterIncludeFile().
void Preprocessor::markMacroAsUsed | ( | MacroInfo * | MI | ) |
A macro is used, update information about macros that need unused warnings.
Definition at line 2096 of file PPMacroExpansion.cpp.
References clang::MacroInfo::getDefinitionLoc(), clang::MacroInfo::isUsed(), clang::MacroInfo::isWarnIfUnused(), and clang::MacroInfo::setIsUsed().
Referenced by EvaluateDefined().
|
inline |
Definition at line 2281 of file Preprocessor.h.
References HandlePoisonedIdentifier(), and Identifier.
|
inline |
Determine whether it's possible for a future call to Lex to produce an annotation token created by a previous call to EnterAnnotationToken.
Definition at line 1943 of file Preprocessor.h.
|
inline |
Definition at line 1332 of file Preprocessor.h.
References Loc.
IdentifierInfo * Preprocessor::ParsePragmaPushOrPopMacro | ( | Token & | Tok | ) |
ParsePragmaPushOrPopMacro - Handle parsing of pragma push_macro/pop_macro.
Return the IdentifierInfo* associated with the macro to push or pop.
Definition at line 572 of file Pragma.cpp.
References CreateString(), Diag(), clang::Token::getLocation(), getSpelling(), clang::Token::hasUDSuffix(), clang::Token::isNot(), Lex(), LookUpIdentifierInfo(), clang::Token::setKind(), and clang::Token::startToken().
Referenced by HandlePragmaPopMacro(), and HandlePragmaPushMacro().
Parses a simple integer literal to get its numeric value.
Floating point literals and user defined literals are rejected. Used primarily to handle pragmas that accept integer arguments.
Definition at line 1391 of file Preprocessor.cpp.
References getDiagnostics(), getLangOpts(), clang::Token::getLocation(), getSourceManager(), getSpelling(), getTargetInfo(), clang::Token::is(), and Lex().
Referenced by clang::Parser::ParseOpenMPVarList().
Definition at line 738 of file Preprocessor.cpp.
References clang::IdentifierInfo::setIsPoisoned().
void Preprocessor::PrintStats | ( | ) |
Definition at line 277 of file Preprocessor.cpp.
References getTotalMemory().
Referenced by clang::FrontendAction::EndSourceFile().
|
static |
Definition at line 2104 of file PPMacroExpansion.cpp.
References clang::TargetInfo::getTriple(), Path, clang::LangOptions::remapPathPrefix(), and clang::LangOptions::UseTargetPathSeparator.
Referenced by clang::SourceLocExpr::EvaluateInContext(), and processPathToFileName().
|
static |
Definition at line 2117 of file PPMacroExpansion.cpp.
References clang::FileName, clang::PresumedLoc::getFilename(), and processPathForFileMacro().
Referenced by clang::SourceLocExpr::EvaluateInContext().
void Preprocessor::recomputeCurLexerKind | ( | ) |
Recompute the current lexer kind based on the CurLexer/ CurTokenLexer pointers.
Definition at line 387 of file Preprocessor.cpp.
Referenced by Backtrack(), HandleEndOfFile(), and LexAfterModuleImport().
void Preprocessor::removeCommentHandler | ( | CommentHandler * | Handler | ) |
Remove the specified comment handler.
It is an error to remove a handler that has not been registered.
Definition at line 1418 of file Preprocessor.cpp.
Referenced by clang::Parser::~Parser().
|
inline |
Definition at line 1559 of file Preprocessor.h.
References RemovePragmaHandler().
void Preprocessor::RemovePragmaHandler | ( | StringRef | Namespace, |
PragmaHandler * | Handler | ||
) |
Remove the specific pragma handler from this preprocessor.
RemovePragmaHandler - Remove the specific pragma handler from the preprocessor.
If Namespace
is non-null, then it should be the namespace that Handler
was added to. It is an error to remove a handler that has not been registered.
If
Definition at line 946 of file Pragma.cpp.
References clang::PragmaHandler::getIfNamespace(), clang::PragmaNamespace::IsEmpty(), and clang::PragmaNamespace::RemovePragmaHandler().
Referenced by clang::DoPrintPreprocessedInput(), and RemovePragmaHandler().
void Preprocessor::RemoveTopOfLexerStack | ( | ) |
Pop the current lexer/macro exp off the top of the lexer stack.
RemoveTopOfLexerStack - Pop the current lexer/macro exp off the top of the lexer stack.
This should only be used in situations where the current state of the top-of-stack lexer is known.
This should only be used in situations where the current state of the top-of-stack lexer is unknown.
Definition at line 622 of file PPLexerChange.cpp.
Referenced by clang::MacroArgs::getPreExpArgument(), and HandleEndOfFile().
|
inline |
Replace the last token with an annotation token.
Like AnnotateCachedTokens(), this routine replaces an already-parsed (and resolved) token with an annotation token. However, this routine only replaces the last token with the annotation token; it does not affect any other cached tokens. This function has no effect if backtracking is not enabled.
Definition at line 1931 of file Preprocessor.h.
References clang::Token::isAnnotation(), and isBacktrackEnabled().
Replace token in CachedLexPos - 1
in CachedTokens by the tokens in NewToks
.
Useful when a token needs to be split in smaller ones and CachedTokens most recent token must to be updated to reflect that.
Definition at line 189 of file PPCaching.cpp.
|
inline |
When backtracking is enabled and tokens are cached, this allows to revert a specific number of tokens.
Note that the number of tokens being reverted should be up to the last backtrack position, not more.
Definition at line 1860 of file Preprocessor.h.
References isBacktrackEnabled().
|
inline |
Returns true if the preprocessor has seen a use of DATE or TIME in the file so far.
Definition at line 2362 of file Preprocessor.h.
SmallVector< SourceLocation, 64 > Preprocessor::serializeSafeBufferOptOutMap | ( | ) | const |
\#pragma clang unsafe_buffer_usage begin/end
s of this translation unit. Definition at line 1586 of file Preprocessor.cpp.
|
inline |
Set the code completion handler to the given object.
Definition at line 1580 of file Preprocessor.h.
Referenced by clang::Parser::Parser().
|
inline |
Set the code completion token for filtering purposes.
Definition at line 1603 of file Preprocessor.h.
Referenced by Lex().
bool Preprocessor::SetCodeCompletionPoint | ( | FileEntryRef | File, |
unsigned | Line, | ||
unsigned | Column | ||
) |
Specify the point at which code-completion will be performed.
File | the file in which code completion should occur. If this file is included multiple times, code-completion will perform completion the first time it is included. If NULL, this function clears out the code-completion point. |
Line | the line at which code completion should occur (1-based). |
Column | the column at which code completion should occur (1-based). |
Definition at line 398 of file Preprocessor.cpp.
References clang::File, clang::SourceManager::getFileEntryForID(), clang::SourceManager::getMainFileID(), clang::SourceManager::getMemoryBufferForFileOrNone(), clang::Line, and clang::SourceManager::overrideFileContents().
Referenced by EnableCodeCompletion().
|
inline |
Note that we hit the code-completion point.
Definition at line 2006 of file Preprocessor.h.
References getDiagnostics(), isCodeCompletionEnabled(), and clang::DiagnosticsEngine::setSuppressAllDiagnostics().
Referenced by CodeCompleteIncludedFile(), CodeCompleteNaturalLanguage(), EvaluateDefined(), EvaluateValue(), HandleDirective(), and LexHeaderName().
|
inline |
Set the code completion token range for detecting replacement range later on.
Definition at line 1609 of file Preprocessor.h.
Referenced by Lex().
|
inline |
Control whether the preprocessor retains comments in output.
Definition at line 1260 of file Preprocessor.h.
Referenced by clang::DoPrintPreprocessedInput().
|
inline |
Definition at line 2366 of file Preprocessor.h.
References V.
Referenced by clang::ASTUnit::LoadFromASTFile(), and clang::PCHValidator::ReadCounter().
|
inline |
Definition at line 2383 of file Preprocessor.h.
References clang::LangOptionsBase::FEM_UnsetOnCommandLine.
Referenced by clang::Sema::ActOnPragmaFPEvalMethod(), Initialize(), and clang::Sema::FPFeaturesStateRAII::~FPFeaturesStateRAII().
bool Preprocessor::setDeserializedSafeBufferOptOutMap | ( | const SmallVectorImpl< SourceLocation > & | SrcLocSeqs | ) |
SrcLocSeqs | a sequence of SourceLocations deserialized from a record of code PP_UNSAFE_BUFFER_USAGE . |
Preprocessor
has been updated; false Preprocessor
is same as itself before the call. Definition at line 1605 of file Preprocessor.cpp.
References Begin.
|
inline |
Definition at line 1218 of file Preprocessor.h.
References D.
|
inline |
Set empty line handler.
Definition at line 1567 of file Preprocessor.h.
Referenced by clang::CodeGen::CoverageMappingModuleGen::setUpCoverageCallbacks().
|
inline |
Definition at line 1233 of file Preprocessor.h.
void Preprocessor::setLoadedMacroDirective | ( | IdentifierInfo * | II, |
MacroDirective * | ED, | ||
MacroDirective * | MD | ||
) |
Set a MacroDirective that was loaded from a PCH file.
Definition at line 98 of file PPMacroExpansion.cpp.
References clang::MacroDirective::isDefined(), clang::IdentifierInfo::setHasMacroDefinition(), and clang::MacroDirective::setPrevious().
|
inline |
Disables macro expansion everywhere except for preprocessor directives.
Definition at line 1835 of file Preprocessor.h.
Referenced by clang::DoPrintPreprocessedInput(), and clang::RewriteIncludesInInput().
|
inline |
Set the directory in which the main file should be considered to have been found, if it is not a real file.
Definition at line 2060 of file Preprocessor.h.
Referenced by prepareToBuildModule().
void Preprocessor::SetPoisonReason | ( | IdentifierInfo * | II, |
unsigned | DiagID | ||
) |
Specifies the reason for poisoning an identifier.
If that identifier is accessed while poisoned, then this reason will be used instead of the default "poisoned" diagnostic.
Definition at line 734 of file Preprocessor.cpp.
Referenced by clang::Parser::Initialize(), and Preprocessor().
|
inline |
Set the location of the currently-active #pragma clang arc_cf_code_audited begin.
An invalid location ends the pragma.
Definition at line 2024 of file Preprocessor.h.
References Loc.
|
inline |
Set the location of the currently-active #pragma clang assume_nonnull begin.
An invalid location ends the pragma.
Definition at line 2039 of file Preprocessor.h.
References Loc.
|
inline |
Definition at line 1267 of file Preprocessor.h.
|
inline |
Record the location of the unterminated #pragma clang assume_nonnull begin in the preamble.
Definition at line 2054 of file Preprocessor.h.
References Loc.
|
inline |
Set the predefines for this Preprocessor.
These predefines are automatically injected when parsing the main file.
Definition at line 1536 of file Preprocessor.h.
References P.
Referenced by createASTReader(), clang::CompilerInstance::createPCHExternalASTSource(), and clang::InitializePreprocessor().
|
inline |
Sets whether the preprocessor is responsible for producing output or if it is producing tokens to be consumed by Parse and Sema.
Definition at line 1280 of file Preprocessor.h.
|
inline |
Definition at line 1346 of file Preprocessor.h.
Referenced by clang::CodeGen::CoverageMappingModuleGen::setUpCoverageCallbacks().
|
inline |
Definition at line 2827 of file Preprocessor.h.
References s.
|
inline |
Definition at line 2831 of file Preprocessor.h.
References s.
Instruct the preprocessor to skip part of the main source file.
Bytes | The number of bytes in the preamble to skip. |
StartOfLine | Whether skipping these bytes puts the lexer at the start of a line. |
Definition at line 2068 of file Preprocessor.h.
Referenced by clang::FrontendAction::BeginSourceFile(), and clang::InitializePreprocessor().
|
inline |
Definition at line 1270 of file Preprocessor.h.
Referenced by clang::DependencyFileGenerator::attachToPreprocessor().
|
inline |
Register a function that would be called on each token in the final expanded token stream.
This also reports annotation tokens produced by the parser.
Definition at line 1342 of file Preprocessor.h.
Referenced by clang::MacroExpansionContext::registerForPreprocessor(), clang::CodeGen::CoverageMappingModuleGen::setUpCoverageCallbacks(), and clang::syntax::TokenCollector::TokenCollector().
|
inline |
Definition at line 2394 of file Preprocessor.h.
References clang::LangOptionsBase::FEM_UnsetOnCommandLine.
Referenced by Initialize().
void Preprocessor::SkipTokensWhileUsingPCH | ( | ) |
Skip tokens until after the #include of the through header or until after a #pragma hdrstop.
Skip tokens until after the #include of the through header or until after a #pragma hdrstop is seen.
Tokens in the predefines file and the main file may be skipped. If the end of the predefines file is reached, skipping continues into the main file. If the end of the main file is reached, it's a fatal error.
Definition at line 642 of file Preprocessor.cpp.
References Diag(), getPredefinesFileID(), and clang::Token::is().
Referenced by EnterMainSourceFile().
SourceLocation Preprocessor::SplitToken | ( | SourceLocation | TokLoc, |
unsigned | Length | ||
) |
Split the first Length characters out of the token starting at TokLoc and return a location pointing to the split token.
Re-lexing from the split token will return the split token rather than the original.
Definition at line 511 of file Preprocessor.cpp.
References clang::SourceLocation::getLocWithOffset(), getSourceManager(), clang::Invalid, Loc, and SM.
|
inline |
Update the current token to represent the provided identifier, in order to cache an action performed by typo correction.
Definition at line 1949 of file Preprocessor.h.
References clang::Token::getIdentifierInfo(), and isBacktrackEnabled().
bool Preprocessor::usingPCHWithPragmaHdrStop | ( | ) |
True if using a PCH with a #pragma hdrstop.
Definition at line 633 of file Preprocessor.cpp.
References clang::TU_Prefix, and TUKind.
Referenced by EnterMainSourceFile(), HandlePragmaHdrstop(), and Preprocessor().
bool Preprocessor::usingPCHWithThroughHeader | ( | ) |
True if using a PCH with a through header.
Definition at line 624 of file Preprocessor.cpp.
References clang::FileID::isValid(), clang::TU_Prefix, and TUKind.
Referenced by EnterMainSourceFile().
|
friend |
Definition at line 702 of file Preprocessor.h.
|
friend |
Definition at line 703 of file Preprocessor.h.
|
friend |
|
friend |
Definition at line 138 of file Preprocessor.h.
|
friend |
Definition at line 139 of file Preprocessor.h.
llvm::DenseMap<FileID, SafeBufferOptOutRegionsTy> clang::Preprocessor::LoadedRegions |
Definition at line 2978 of file Preprocessor.h.
Referenced by isSafeBufferOptOut().
const TranslationUnitKind clang::Preprocessor::TUKind |
The kind of translation unit we are processing.
Definition at line 295 of file Preprocessor.h.
Referenced by clang::CompilerInstance::createASTContext(), creatingPCHWithPragmaHdrStop(), creatingPCHWithThroughHeader(), HandleEndOfFile(), HandlePragmaOnce(), clang::Sema::Sema(), usingPCHWithPragmaHdrStop(), and usingPCHWithThroughHeader().