clang  14.0.0git
Classes | Public Member Functions | Static Public Member Functions | Public Attributes | Friends | List of all members
clang::Preprocessor Class Reference

Engages in a tight little dance with the lexer to efficiently preprocess tokens. More...

#include "clang/Lex/Preprocessor.h"

Collaboration diagram for clang::Preprocessor:
Collaboration graph
[legend]

Classes

struct  PreambleSkipInfo
 
class  ResetMacroExpansionHelper
 

Public Member Functions

 Preprocessor (std::shared_ptr< PreprocessorOptions > PPOpts, DiagnosticsEngine &diags, LangOptions &opts, 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. More...
 
void InitializeForModelFile ()
 Initialize the preprocessor to parse a model file. More...
 
void FinalizeForModelFile ()
 Cleanup after model file parsing. More...
 
PreprocessorOptionsgetPreprocessorOpts () const
 Retrieve the preprocessor options used to initialize this preprocessor. More...
 
DiagnosticsEnginegetDiagnostics () const
 
void setDiagnostics (DiagnosticsEngine &D)
 
const LangOptionsgetLangOpts () const
 
const TargetInfogetTargetInfo () const
 
const TargetInfogetAuxTargetInfo () const
 
FileManagergetFileManager () const
 
SourceManagergetSourceManager () const
 
HeaderSearchgetHeaderSearchInfo () const
 
IdentifierTablegetIdentifierTable ()
 
const IdentifierTablegetIdentifierTable () const
 
SelectorTablegetSelectorTable ()
 
Builtin::ContextgetBuiltinInfo ()
 
llvm::BumpPtrAllocator & getPreprocessorAllocator ()
 
void setExternalSource (ExternalPreprocessorSource *Source)
 
ExternalPreprocessorSourcegetExternalSource () const
 
ModuleLoadergetModuleLoader () const
 Retrieve the module loader associated with this preprocessor. More...
 
bool hadModuleLoaderFatalFailure () const
 
unsigned getNumDirectives () const
 Retrieve the number of Directives that have been processed by the Preprocessor. More...
 
bool isParsingIfOrElifDirective () const
 True if we are currently preprocessing a if or #elif directive. More...
 
void SetCommentRetentionState (bool KeepComments, bool KeepMacroComments)
 Control whether the preprocessor retains comments in output. More...
 
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. More...
 
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. More...
 
bool isCurrentLexer (const PreprocessorLexer *L) const
 Return true if we are lexing directly from the specified lexer. More...
 
PreprocessorLexergetCurrentLexer () const
 Return the current lexer being lexed from. More...
 
PreprocessorLexergetCurrentFileLexer () const
 Return the current file lexer being lexed from. More...
 
ModulegetCurrentLexerSubmodule () const
 Return the submodule owning the file being lexed. More...
 
FileID getPredefinesFileID () const
 Returns the FileID for the preprocessor predefines. More...
 
unsigned getTokenCount () const
 Get the number of tokens processed so far. More...
 
unsigned getMaxTokens () const
 Get the max number of tokens before issuing a -Wmax-tokens warning. More...
 
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. More...
 
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. More...
 
MacroDefinition getMacroDefinition (const IdentifierInfo *II)
 
MacroDefinition getMacroDefinitionAtLoc (const IdentifierInfo *II, SourceLocation Loc)
 
MacroDirectivegetLocalMacroDirective (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. More...
 
const MacroInfogetMacroInfo (const IdentifierInfo *II) const
 
MacroInfogetMacroInfo (const IdentifierInfo *II)
 
MacroDirectivegetLocalMacroDirectiveHistory (const IdentifierInfo *II) const
 Given an identifier, return the latest non-imported macro directive for that identifier. More...
 
void appendMacroDirective (IdentifierInfo *II, MacroDirective *MD)
 Add a directive to the macro directive history for this identifier. More...
 
DefMacroDirectiveappendDefMacroDirective (IdentifierInfo *II, MacroInfo *MI, SourceLocation Loc)
 
DefMacroDirectiveappendDefMacroDirective (IdentifierInfo *II, MacroInfo *MI)
 
void setLoadedMacroDirective (IdentifierInfo *II, MacroDirective *ED, MacroDirective *MD)
 Set a MacroDirective that was loaded from a PCH file. More...
 
ModuleMacroaddModuleMacro (Module *Mod, IdentifierInfo *II, MacroInfo *Macro, ArrayRef< ModuleMacro * > Overrides, bool &IsNew)
 Register an exported macro for a module and identifier. More...
 
ModuleMacrogetModuleMacro (Module *Mod, const IdentifierInfo *II)
 
ArrayRef< ModuleMacro * > getLeafModuleMacros (const IdentifierInfo *II) const
 Get the list of leaf (non-overridden) module macros for a name. More...
 
ArrayRef< BuildingSubmoduleInfo > getBuildingSubmodules () const
 Get the list of submodules that we're currently building. More...
 
StringRef getLastMacroWithSpelling (SourceLocation Loc, ArrayRef< TokenValue > Tokens) const
 Return the name of the macro defined before Loc that has spelling Tokens. More...
 
const std::stringgetPredefines () const
 
void setPredefines (const char *P)
 Set the predefines for this Preprocessor. More...
 
void setPredefines (StringRef P)
 
IdentifierInfogetIdentifierInfo (StringRef Name) const
 Return information about the specified preprocessor identifier token. More...
 
void AddPragmaHandler (StringRef Namespace, PragmaHandler *Handler)
 Add the specified pragma handler to this preprocessor. More...
 
void AddPragmaHandler (PragmaHandler *Handler)
 
void RemovePragmaHandler (StringRef Namespace, PragmaHandler *Handler)
 Remove the specific pragma handler from this preprocessor. More...
 
void RemovePragmaHandler (PragmaHandler *Handler)
 
void IgnorePragmas ()
 Install empty handlers for all pragmas (making them ignored). More...
 
void setEmptylineHandler (EmptylineHandler *Handler)
 Set empty line handler. More...
 
EmptylineHandlergetEmptylineHandler () const
 
void addCommentHandler (CommentHandler *Handler)
 Add the specified comment handler to the preprocessor. More...
 
void removeCommentHandler (CommentHandler *Handler)
 Remove the specified comment handler. More...
 
void setCodeCompletionHandler (CodeCompletionHandler &Handler)
 Set the code completion handler to the given object. More...
 
CodeCompletionHandlergetCodeCompletionHandler () const
 Retrieve the current code-completion handler. More...
 
void clearCodeCompletionHandler ()
 Clear out the code completion handler. More...
 
void CodeCompleteIncludedFile (llvm::StringRef Dir, bool IsAngled)
 Hook used by the lexer to invoke the "included file" code completion point. More...
 
void CodeCompleteNaturalLanguage ()
 Hook used by the lexer to invoke the "natural language" code completion point. More...
 
void setCodeCompletionIdentifierInfo (IdentifierInfo *Filter)
 Set the code completion token for filtering purposes. More...
 
void setCodeCompletionTokenRange (const SourceLocation Start, const SourceLocation End)
 Set the code completion token range for detecting replacement range later on. More...
 
SourceRange getCodeCompletionTokenRange () const
 
StringRef getCodeCompletionFilter ()
 Get the code completion token for filtering purposes. More...
 
PreprocessingRecordgetPreprocessingRecord () const
 Retrieve the preprocessing record, or NULL if there is no preprocessing record. More...
 
void createPreprocessingRecord ()
 Create a new preprocessing record, which will keep track of all macro expansions, macro definitions, etc. More...
 
bool isPCHThroughHeader (const FileEntry *FE)
 Returns true if the FileEntry is the PCH through header. More...
 
bool creatingPCHWithThroughHeader ()
 True if creating a PCH with a through header. More...
 
bool usingPCHWithThroughHeader ()
 True if using a PCH with a through header. More...
 
bool creatingPCHWithPragmaHdrStop ()
 True if creating a PCH with a #pragma hdrstop. More...
 
bool usingPCHWithPragmaHdrStop ()
 True if using a PCH with a #pragma hdrstop. More...
 
void SkipTokensWhileUsingPCH ()
 Skip tokens until after the include of the through header or until after a #pragma hdrstop. More...
 
void HandleSkippedDirectiveWhileUsingPCH (Token &Result, SourceLocation HashLoc)
 Process directives while skipping until the through header or #pragma hdrstop is found. More...
 
void EnterMainSourceFile ()
 Enter the specified FileID as the main source file, which implicitly adds the builtin defines etc. More...
 
void EndSourceFile ()
 Inform the preprocessor callbacks that processing is complete. More...
 
bool EnterSourceFile (FileID FID, const DirectoryLookup *Dir, SourceLocation Loc)
 Add a source file to the top of the include stack and start lexing tokens from it instead of the current buffer. More...
 
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. More...
 
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. More...
 
void EnableBacktrackAtThisPos ()
 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. More...
 
void CommitBacktrackedTokens ()
 Disable the last EnableBacktrackAtThisPos call. More...
 
void Backtrack ()
 Make Preprocessor re-lex the tokens that were lexed since EnableBacktrackAtThisPos() was previously called. More...
 
bool isBacktrackEnabled () const
 True if EnableBacktrackAtThisPos() was called and caching of tokens is on. More...
 
void Lex (Token &Result)
 Lex the next token for this preprocessor. More...
 
bool LexHeaderName (Token &Result, bool AllowMacroExpansion=true)
 Lex a token, forming a header-name token if possible. More...
 
bool LexAfterModuleImport (Token &Result)
 Lex a token following the 'import' contextual keyword. More...
 
void CollectPpImportSuffix (SmallVectorImpl< Token > &Toks)
 Collect the tokens of a C++20 pp-import-suffix. More...
 
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. More...
 
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). More...
 
void LexNonComment (Token &Result)
 Lex a token. More...
 
void LexUnexpandedToken (Token &Result)
 Just like Lex, but disables macro expansion of identifier tokens. More...
 
void LexUnexpandedNonComment (Token &Result)
 Like LexNonComment, but this disables macro expansion of identifier tokens. More...
 
bool parseSimpleIntegerLiteral (Token &Tok, uint64_t &Value)
 Parses a simple integer literal to get its numeric value. More...
 
void SetMacroExpansionOnlyInDirectives ()
 Disables macro expansion everywhere except for preprocessor directives. More...
 
const TokenLookAhead (unsigned N)
 Peeks ahead N tokens and returns that token without consuming any tokens. More...
 
void RevertCachedTokens (unsigned N)
 When backtracking is enabled and tokens are cached, this allows to revert a specific number of tokens. More...
 
void EnterToken (const Token &Tok, bool IsReinject)
 Enters a token in the token stream to be lexed next. More...
 
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. More...
 
SourceLocation getLastCachedTokenLocation () const
 Get the location of the last cached token, suitable for setting the end location of an annotation token. More...
 
bool IsPreviousCachedToken (const Token &Tok) const
 Whether Tok is the most recent token (CachedLexPos - 1) in CachedTokens. More...
 
void ReplacePreviousCachedToken (ArrayRef< Token > NewToks)
 Replace token in CachedLexPos - 1 in CachedTokens by the tokens in NewToks. More...
 
void ReplaceLastTokenWithAnnotation (const Token &Tok)
 Replace the last token with an annotation token. More...
 
void EnterAnnotationToken (SourceRange Range, tok::TokenKind Kind, void *AnnotationVal)
 Enter an annotation token into the token stream. More...
 
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. More...
 
void TypoCorrectToken (const Token &Tok)
 Update the current token to represent the provided identifier, in order to cache an action performed by typo correction. More...
 
void recomputeCurLexerKind ()
 Recompute the current lexer kind based on the CurLexer/ CurTokenLexer pointers. More...
 
bool isIncrementalProcessingEnabled () const
 Returns true if incremental processing is enabled. More...
 
void enableIncrementalProcessing (bool value=true)
 Enables the incremental processing. More...
 
bool SetCodeCompletionPoint (const FileEntry *File, unsigned Line, unsigned Column)
 Specify the point at which code-completion will be performed. More...
 
bool isCodeCompletionEnabled () const
 Determine if we are performing code completion. More...
 
SourceLocation getCodeCompletionLoc () const
 Returns the location of the code-completion point. More...
 
SourceLocation getCodeCompletionFileLoc () const
 Returns the start location of the file of code-completion point. More...
 
bool isCodeCompletionReached () const
 Returns true if code-completion is enabled and we have hit the code-completion point. More...
 
void setCodeCompletionReached ()
 Note that we hit the code-completion point. More...
 
std::pair< IdentifierInfo *, SourceLocationgetPragmaARCCFCodeAuditedInfo () const
 The location of the currently-active #pragma clang arc_cf_code_audited begin. More...
 
void setPragmaARCCFCodeAuditedInfo (IdentifierInfo *Ident, SourceLocation Loc)
 Set the location of the currently-active #pragma clang arc_cf_code_audited begin. More...
 
SourceLocation getPragmaAssumeNonNullLoc () const
 The location of the currently-active #pragma clang assume_nonnull begin. More...
 
void setPragmaAssumeNonNullLoc (SourceLocation Loc)
 Set the location of the currently-active #pragma clang assume_nonnull begin. More...
 
void setMainFileDir (const DirectoryEntry *Dir)
 Set the directory in which the main file should be considered to have been found, if it is not a real file. More...
 
void setSkipMainFilePreamble (unsigned Bytes, bool StartOfLine)
 Instruct the preprocessor to skip part of the main source file. More...
 
DiagnosticBuilder Diag (SourceLocation Loc, unsigned DiagID) const
 Forwarding function for diagnostics. More...
 
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. More...
 
std::string getSpelling (const Token &Tok, bool *Invalid=nullptr) const
 Return the 'spelling' of the Tok token. More...
 
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. More...
 
StringRef getSpelling (const Token &Tok, SmallVectorImpl< char > &Buffer, bool *Invalid=nullptr) const
 Get the spelling of a token into a SmallVector. More...
 
bool getRawToken (SourceLocation Loc, Token &Result, bool IgnoreWhiteSpace=false)
 Relex the token at the specified location. More...
 
char getSpellingOfSingleCharacterNumericConstant (const Token &Tok, bool *Invalid=nullptr) const
 Given a Token Tok that is a numeric constant with length 1, return the character. More...
 
StringRef getImmediateMacroName (SourceLocation Loc)
 Retrieve the name of the immediate macro expansion. More...
 
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. More...
 
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. More...
 
SourceLocation getLocForEndOfToken (SourceLocation Loc, unsigned Offset=0)
 Computes the source location just past the end of the token at this source location. More...
 
bool isAtStartOfMacroExpansion (SourceLocation loc, SourceLocation *MacroBegin=nullptr) const
 Returns true if the given MacroID location points at the first token of the macro expansion. More...
 
bool isAtEndOfMacroExpansion (SourceLocation loc, SourceLocation *MacroEnd=nullptr) const
 Returns true if the given MacroID location points at the last token of the macro expansion. More...
 
void DumpToken (const Token &Tok, bool DumpFlags=false) const
 Print the token to stderr, used for debugging. More...
 
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. More...
 
void IncrementPasteCounter (bool isFast)
 Increment the counters for the number of token paste operations performed. More...
 
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. More...
 
IdentifierInfoLookUpIdentifierInfo (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. More...
 
void SetPoisonReason (IdentifierInfo *II, unsigned DiagID)
 Specifies the reason for poisoning an identifier. More...
 
void HandlePoisonedIdentifier (Token &Identifier)
 Display reason for poisoned identifier. More...
 
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. More...
 
bool HandleEndOfFile (Token &Result, SourceLocation Loc, bool isEndOfMacro=false)
 Callback invoked when the lexer hits the end of the current file. More...
 
bool HandleEndOfTokenLexer (Token &Result)
 Callback invoked when the current TokenLexer hits the end of its token stream. More...
 
void HandleDirective (Token &Result)
 Callback invoked when the lexer sees a # token at the start of a line. More...
 
SourceLocation CheckEndOfDirective (const char *DirType, bool EnableMacros=false)
 Ensure that the next token is a tok::eod token. More...
 
SourceRange DiscardUntilEndOfDirective ()
 Read and discard all tokens remaining on the current line until the tok::eod token is found. More...
 
bool SawDateOrTime () const
 Returns true if the preprocessor has seen a use of DATE or TIME in the file so far. More...
 
unsigned getCounterValue () const
 
void setCounterValue (unsigned V)
 
ModulegetCurrentModule ()
 Retrieves the module that we're currently building, if any. More...
 
MacroInfoAllocateMacroInfo (SourceLocation L)
 Allocate a new MacroInfo object with the provided SourceLocation. More...
 
bool GetIncludeFilenameSpelling (SourceLocation Loc, StringRef &Buffer)
 Turn the specified lexer token into a fully checked and spelled filename, e.g. More...
 
Optional< FileEntryRefLookupFile (SourceLocation FilenameLoc, StringRef Filename, bool isAngled, const DirectoryLookup *FromDir, const FileEntry *FromFile, const DirectoryLookup *&CurDir, SmallVectorImpl< char > *SearchPath, SmallVectorImpl< char > *RelativePath, ModuleMap::KnownHeader *SuggestedModule, bool *IsMapped, bool *IsFrameworkFound, bool SkipCache=false)
 Given a "foo" or <foo> reference, look up the indicated file. More...
 
const DirectoryLookupGetCurDirLookup ()
 Get the DirectoryLookup structure used to find the current FileEntry, if CurLexer is non-null and if applicable. More...
 
bool isInPrimaryFile () const
 Return true if we're in the top-level file, not in a #include. More...
 
bool LexOnOffSwitch (tok::OnOffSwitch &Result)
 Lex an on-off-switch (C99 6.10.6p2) and verify that it is followed by EOD. More...
 
bool CheckMacroName (Token &MacroNameTok, MacroUse isDefineUndef, bool *ShadowFlag=nullptr)
 
void EnterSubmodule (Module *M, SourceLocation ImportLoc, bool ForPragma)
 
ModuleLeaveSubmodule (bool ForPragma)
 
ModulegetModuleForLocation (SourceLocation Loc)
 Find the module that owns the source or header file that Loc points to. More...
 
const FileEntrygetHeaderToIncludeForDiagnostics (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). More...
 
bool isRecordingPreamble () const
 
bool hasRecordedPreamble () const
 
ArrayRef< PPConditionalInfogetPreambleConditionalStack () const
 
void setRecordedPreambleConditionalStack (ArrayRef< PPConditionalInfo > s)
 
void setReplayablePreambleConditionalStack (ArrayRef< PPConditionalInfo > s, llvm::Optional< PreambleSkipInfo > SkipInfo)
 
llvm::Optional< PreambleSkipInfogetPreambleSkipInfo () const
 
void HandlePragmaOnce (Token &OnceTok)
 HandlePragmaOnce - Handle #pragma once. OnceTok is the 'once'. More...
 
void HandlePragmaMark (Token &MarkTok)
 
void HandlePragmaPoison ()
 HandlePragmaPoison - Handle #pragma GCC poison. PoisonTok is the 'poison'. More...
 
void HandlePragmaSystemHeader (Token &SysHeaderTok)
 HandlePragmaSystemHeader - Implement #pragma GCC system_header. More...
 
void HandlePragmaIncludeInstead (Token &Tok)
 HandlePragmaIncludeInstead - Handle #pragma clang include_instead(header). More...
 
void HandlePragmaDependency (Token &DependencyTok)
 HandlePragmaDependency - Handle #pragma GCC dependency "foo" blah. More...
 
void HandlePragmaPushMacro (Token &Tok)
 Handle #pragma push_macro. More...
 
void HandlePragmaPopMacro (Token &Tok)
 Handle #pragma pop_macro. More...
 
void HandlePragmaIncludeAlias (Token &Tok)
 
void HandlePragmaModuleBuild (Token &Tok)
 
void HandlePragmaHdrstop (Token &Tok)
 
IdentifierInfoParsePragmaPushOrPopMacro (Token &Tok)
 ParsePragmaPushOrPopMacro - Handle parsing of pragma push_macro/pop_macro. More...
 
bool HandleComment (Token &result, SourceRange Comment)
 
void markMacroAsUsed (MacroInfo *MI)
 A macro is used, update information about macros that need unused warnings. More...
 
void addMacroDeprecationMsg (const IdentifierInfo *II, std::string Msg)
 
llvm::Optional< std::stringgetMacroDeprecationMsg (const IdentifierInfo *II)
 
void addRestrictExpansionMsg (const IdentifierInfo *II, std::string Msg, SourceLocation AnnotationLoc)
 
MsgLocationPair getRestrictExpansionMsg (const IdentifierInfo *II)
 
void emitMacroExpansionWarnings (const Token &Identifier)
 
PPCallbacksgetPPCallbacks () const
 
void addPPCallbacks (std::unique_ptr< PPCallbacks > C)
 

Static Public Member Functions

static bool checkModuleIsAvailable (const LangOptions &LangOpts, const TargetInfo &TargetInfo, DiagnosticsEngine &Diags, Module *M)
 Check that the given module is available, producing a diagnostic if not. More...
 

Public Attributes

const TranslationUnitKind TUKind
 The kind of translation unit we are processing. More...
 

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_iteratormacros (bool IncludeExternalMacros=true) const
 

Detailed Description

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 130 of file Preprocessor.h.

Member Typedef Documentation

◆ macro_iterator

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 1190 of file Preprocessor.h.

Constructor & Destructor Documentation

◆ Preprocessor()

Preprocessor::Preprocessor ( std::shared_ptr< PreprocessorOptions PPOpts,
DiagnosticsEngine diags,
LangOptions opts,
SourceManager SM,
HeaderSearch Headers,
ModuleLoader TheModuleLoader,
IdentifierInfoLookup IILookup = nullptr,
bool  OwnsHeaderSearch = false,
TranslationUnitKind  TUKind = TU_Complete 
)

◆ ~Preprocessor()

Preprocessor::~Preprocessor ( )

Definition at line 169 of file Preprocessor.cpp.

Member Function Documentation

◆ addCommentHandler()

void Preprocessor::addCommentHandler ( CommentHandler Handler)

Add the specified comment handler to the preprocessor.

Definition at line 1384 of file Preprocessor.cpp.

Referenced by clang::Parser::Parser(), and clang::CodeGen::CoverageMappingModuleGen::setUpCoverageCallbacks().

◆ addMacroDeprecationMsg()

void clang::Preprocessor::addMacroDeprecationMsg ( const IdentifierInfo II,
std::string  Msg 
)
inline

Definition at line 2405 of file Preprocessor.h.

◆ addModuleMacro()

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 132 of file PPMacroExpansion.cpp.

References clang::ModuleMacro::create(), clang::ModuleMacro::Profile(), and clang::IdentifierInfo::setHasMacroDefinition().

Referenced by LeaveSubmodule().

◆ addPPCallbacks()

void clang::Preprocessor::addPPCallbacks ( std::unique_ptr< PPCallbacks C)
inline

◆ AddPragmaHandler() [1/2]

void clang::Preprocessor::AddPragmaHandler ( PragmaHandler Handler)
inline

Definition at line 1229 of file Preprocessor.h.

References AddPragmaHandler().

◆ AddPragmaHandler() [2/2]

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 946 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().

◆ addRestrictExpansionMsg()

void clang::Preprocessor::addRestrictExpansionMsg ( const IdentifierInfo II,
std::string  Msg,
SourceLocation  AnnotationLoc 
)
inline

Definition at line 2416 of file Preprocessor.h.

◆ AdvanceToTokenCharacter()

SourceLocation clang::Preprocessor::AdvanceToTokenCharacter ( SourceLocation  TokStart,
unsigned  Char 
) const
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 1878 of file Preprocessor.h.

References clang::Lexer::AdvanceToTokenCharacter().

Referenced by GetLineValue().

◆ AllocateMacroInfo()

MacroInfo * Preprocessor::AllocateMacroInfo ( SourceLocation  L)

Allocate a new MacroInfo object with the provided SourceLocation.

Definition at line 58 of file PPDirectives.cpp.

◆ AnnotateCachedTokens()

void clang::Preprocessor::AnnotateCachedTokens ( const Token Tok)
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 1557 of file Preprocessor.h.

References clang::Token::isAnnotation(), and isBacktrackEnabled().

Referenced by clang::Parser::TryAnnotateTypeOrScopeToken(), and clang::Parser::TryAnnotateTypeOrScopeTokenAfterScopeSpec().

◆ appendDefMacroDirective() [1/2]

DefMacroDirective* clang::Preprocessor::appendDefMacroDirective ( IdentifierInfo II,
MacroInfo MI 
)
inline

◆ appendDefMacroDirective() [2/2]

DefMacroDirective* clang::Preprocessor::appendDefMacroDirective ( IdentifierInfo II,
MacroInfo MI,
SourceLocation  Loc 
)
inline

Definition at line 1151 of file Preprocessor.h.

References appendMacroDirective().

Referenced by appendDefMacroDirective(), and HandlePragmaPopMacro().

◆ appendMacroDirective()

void Preprocessor::appendMacroDirective ( IdentifierInfo II,
MacroDirective MD 
)

◆ Backtrack()

void Preprocessor::Backtrack ( )

Make Preprocessor re-lex the tokens that were lexed since EnableBacktrackAtThisPos() was previously called.

Definition at line 40 of file PPCaching.cpp.

References recomputeCurLexerKind().

◆ CheckEndOfDirective()

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.

Returns
The location of the end of the directive (the terminating newline).

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 370 of file PPDirectives.cpp.

References clang::FixItHint::CreateInsertion(), Diag(), DiscardUntilEndOfDirective(), clang::SourceRange::getEnd(), clang::Token::getLocation(), clang::Token::is(), Lex(), and LexUnexpandedToken().

◆ CheckMacroName()

bool Preprocessor::CheckMacroName ( Token MacroNameTok,
MacroUse  isDefineUndef,
bool ShadowFlag = nullptr 
)

◆ checkModuleIsAvailable()

bool Preprocessor::checkModuleIsAvailable ( const LangOptions LangOpts,
const TargetInfo TargetInfo,
DiagnosticsEngine Diags,
Module M 
)
static

Check that the given module is available, producing a diagnostic if not.

Returns
true if the check failed (because the module is not available). false if the module appears to be usable.

Definition at line 1748 of file PPDirectives.cpp.

References clang::Module::DefinitionLoc, clang::Module::UnresolvedHeaderDirective::FileName, clang::Module::UnresolvedHeaderDirective::FileNameLoc, clang::Module::getFullModuleName(), clang::Module::isAvailable(), clang::Module::UnresolvedHeaderDirective::IsUmbrella, clang::SourceLocation::isValid(), clang::Module::Name, and clang::DiagnosticsEngine::Report().

Referenced by prepareToBuildModule().

◆ clearCodeCompletionHandler()

void clang::Preprocessor::clearCodeCompletionHandler ( )
inline

Clear out the code completion handler.

Definition at line 1270 of file Preprocessor.h.

Referenced by clang::Parser::~Parser().

◆ CodeCompleteIncludedFile()

void Preprocessor::CodeCompleteIncludedFile ( llvm::StringRef  Dir,
bool  IsAngled 
)

Hook used by the lexer to invoke the "included file" code completion point.

Definition at line 443 of file Preprocessor.cpp.

References clang::CodeCompletionHandler::CodeCompleteIncludedFile(), and setCodeCompletionReached().

◆ CodeCompleteNaturalLanguage()

void Preprocessor::CodeCompleteNaturalLanguage ( )

Hook used by the lexer to invoke the "natural language" code completion point.

Definition at line 450 of file Preprocessor.cpp.

References clang::CodeCompletionHandler::CodeCompleteNaturalLanguage(), and setCodeCompletionReached().

Referenced by clang::Lexer::ReadToEndOfLine(), and clang::MacroArgs::StringifyArgument().

◆ CollectPpImportSuffix()

void Preprocessor::CollectPpImportSuffix ( SmallVectorImpl< Token > &  Toks)

Collect the tokens of a C++20 pp-import-suffix.

Definition at line 1077 of file Preprocessor.cpp.

References clang::comments::tok::eof, and Lex().

Referenced by LexAfterModuleImport().

◆ CommitBacktrackedTokens()

void Preprocessor::CommitBacktrackedTokens ( )

Disable the last EnableBacktrackAtThisPos call.

Definition at line 32 of file PPCaching.cpp.

◆ createPreprocessingRecord()

void Preprocessor::createPreprocessingRecord ( )

Create a new preprocessing record, which will keep track of all macro expansions, macro definitions, etc.

Definition at line 1441 of file Preprocessor.cpp.

References addPPCallbacks(), and getSourceManager().

◆ CreateString()

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 481 of file Preprocessor.cpp.

References clang::SourceManager::createExpansionLoc(), clang::Token::is(), clang::Token::isLiteral(), clang::SourceLocation::isValid(), clang::Token::setLength(), clang::Token::setLiteralData(), clang::Token::setLocation(), and clang::Token::setRawIdentifierData().

Referenced by ComputeDATE_TIME(), LexHeaderName(), ParsePragmaPushOrPopMacro(), and clang::MacroArgs::StringifyArgument().

◆ creatingPCHWithPragmaHdrStop()

bool Preprocessor::creatingPCHWithPragmaHdrStop ( )

True if creating a PCH with a #pragma hdrstop.

Definition at line 613 of file Preprocessor.cpp.

References clang::TU_Prefix, and TUKind.

Referenced by HandlePragmaHdrstop().

◆ creatingPCHWithThroughHeader()

bool Preprocessor::creatingPCHWithThroughHeader ( )

True if creating a PCH with a through header.

Definition at line 603 of file Preprocessor.cpp.

References clang::FileID::isValid(), clang::TU_Prefix, and TUKind.

Referenced by HandleEndOfFile().

◆ Diag() [1/2]

DiagnosticBuilder clang::Preprocessor::Diag ( const Token Tok,
unsigned  DiagID 
) const
inline

◆ Diag() [2/2]

DiagnosticBuilder clang::Preprocessor::Diag ( SourceLocation  Loc,
unsigned  DiagID 
) const
inline

◆ DiscardUntilEndOfDirective()

SourceRange Preprocessor::DiscardUntilEndOfDirective ( )

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 82 of file PPDirectives.cpp.

References clang::comments::tok::eof, clang::Token::getLocation(), clang::Token::isNot(), LexUnexpandedToken(), clang::SourceRange::setBegin(), and clang::SourceRange::setEnd().

Referenced by CheckEndOfDirective(), GetLineValue(), HandleDirective(), HandlePragmaModuleBuild(), HandleSkippedDirectiveWhileUsingPCH(), and ReadLineMarkerFlags().

◆ DumpLocation()

void Preprocessor::DumpLocation ( SourceLocation  Loc) const

Definition at line 255 of file Preprocessor.cpp.

References clang::SourceLocation::print().

Referenced by DumpToken().

◆ DumpMacro()

void Preprocessor::DumpMacro ( const MacroInfo MI) const

◆ dumpMacroInfo()

void Preprocessor::dumpMacroInfo ( const IdentifierInfo II)

◆ DumpToken()

void Preprocessor::DumpToken ( const Token Tok,
bool  DumpFlags = false 
) const

◆ emitMacroExpansionWarnings()

void clang::Preprocessor::emitMacroExpansionWarnings ( const Token Identifier)
inline

Definition at line 2426 of file Preprocessor.h.

References Identifier.

Referenced by EvaluateDefined().

◆ EnableBacktrackAtThisPos()

void Preprocessor::EnableBacktrackAtThisPos ( )

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.

Definition at line 25 of file PPCaching.cpp.

◆ enableIncrementalProcessing()

void clang::Preprocessor::enableIncrementalProcessing ( bool  value = true)
inline

Enables the incremental processing.

Definition at line 1621 of file Preprocessor.h.

Referenced by clang::IncrementalAction::ExecuteAction().

◆ EndSourceFile()

void Preprocessor::EndSourceFile ( )

Inform the preprocessor callbacks that processing is complete.

Definition at line 683 of file Preprocessor.cpp.

Referenced by clang::FrontendAction::EndSourceFile().

◆ EnterAnnotationToken()

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 1649 of file PPDirectives.cpp.

References clang::Token::setAnnotationEndLoc(), clang::Token::setAnnotationValue(), clang::Token::setKind(), clang::Token::setLocation(), and clang::Token::startToken().

◆ EnterMacro()

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.

Parameters
Argsspecifies the tokens input to a function-like macro.
ILEndspecifies the location of the ')' for a function-like macro or the identifier for an object-like macro.

Definition at line 126 of file PPLexerChange.cpp.

◆ EnterMainSourceFile()

void Preprocessor::EnterMainSourceFile ( )

◆ EnterSourceFile()

bool Preprocessor::EnterSourceFile ( FileID  FID,
const DirectoryLookup Dir,
SourceLocation  Loc 
)

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::SourceManager::getBufferName(), clang::SourceManager::getBufferOrNone(), clang::SourceManager::getFileEntryForID(), clang::SourceManager::getLocForStartOfFile(), clang::SourceLocation::getLocWithOffset(), getSourceManager(), isCodeCompletionEnabled(), and string().

Referenced by EnterMainSourceFile().

◆ EnterSubmodule()

void Preprocessor::EnterSubmodule ( Module M,
SourceLocation  ImportLoc,
bool  ForPragma 
)

◆ EnterToken()

void clang::Preprocessor::EnterToken ( const Token Tok,
bool  IsReinject 
)
inline

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 1535 of file Preprocessor.h.

Referenced by FixDigraph(), and clang::Parser::TryAnnotateTypeOrScopeToken().

◆ EnterTokenStream() [1/2]

void clang::Preprocessor::EnterTokenStream ( ArrayRef< Token Toks,
bool  DisableMacroExpansion,
bool  IsReinject 
)
inline

Definition at line 1385 of file Preprocessor.h.

◆ EnterTokenStream() [2/2]

void clang::Preprocessor::EnterTokenStream ( std::unique_ptr< Token[]>  Toks,
unsigned  NumToks,
bool  DisableMacroExpansion,
bool  IsReinject 
)
inline

Definition at line 1379 of file Preprocessor.h.

◆ FinalizeForModelFile()

void Preprocessor::FinalizeForModelFile ( )

Cleanup after model file parsing.

Definition at line 225 of file Preprocessor.cpp.

◆ FinishLexStringLiteral()

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 1323 of file Preprocessor.cpp.

References Diag(), clang::StringLiteralParser::GetString(), clang::StringLiteralParser::hadError, clang::StringLiteralParser::isAscii(), Lex(), LexUnexpandedToken(), clang::StringLiteralParser::Pascal, and string().

Referenced by LexStringLiteral().

◆ getAuxTargetInfo()

const TargetInfo* clang::Preprocessor::getAuxTargetInfo ( ) const
inline

Definition at line 939 of file Preprocessor.h.

◆ getBuildingSubmodules()

ArrayRef<BuildingSubmoduleInfo> clang::Preprocessor::getBuildingSubmodules ( ) const
inline

Get the list of submodules that we're currently building.

Definition at line 1182 of file Preprocessor.h.

◆ getBuiltinInfo()

Builtin::Context& clang::Preprocessor::getBuiltinInfo ( )
inline

◆ getCodeCompletionFileLoc()

SourceLocation clang::Preprocessor::getCodeCompletionFileLoc ( ) const
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 1655 of file Preprocessor.h.

◆ getCodeCompletionFilter()

StringRef clang::Preprocessor::getCodeCompletionFilter ( )
inline

Get the code completion token for filtering purposes.

Definition at line 1298 of file Preprocessor.h.

References clang::IdentifierInfo::getName().

◆ getCodeCompletionHandler()

CodeCompletionHandler* clang::Preprocessor::getCodeCompletionHandler ( ) const
inline

Retrieve the current code-completion handler.

Definition at line 1265 of file Preprocessor.h.

Referenced by EvaluateDefined(), and EvaluateValue().

◆ getCodeCompletionLoc()

SourceLocation clang::Preprocessor::getCodeCompletionLoc ( ) const
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 1649 of file Preprocessor.h.

◆ getCodeCompletionTokenRange()

SourceRange clang::Preprocessor::getCodeCompletionTokenRange ( ) const
inline

Definition at line 1293 of file Preprocessor.h.

◆ getCommentRetentionState()

bool clang::Preprocessor::getCommentRetentionState ( ) const
inline

◆ getCounterValue()

unsigned clang::Preprocessor::getCounterValue ( ) const
inline

Definition at line 2004 of file Preprocessor.h.

◆ GetCurDirLookup()

const DirectoryLookup* clang::Preprocessor::GetCurDirLookup ( )
inline

Get the DirectoryLookup structure used to find the current FileEntry, if CurLexer is non-null and if applicable.

This allows us to implement #include_next and find directory-specific properties.

Definition at line 2041 of file Preprocessor.h.

Referenced by EvaluateHasIncludeNext().

◆ getCurrentFileLexer()

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 HandlePragmaDependency(), HandlePragmaIncludeInstead(), HandlePragmaOnce(), HandlePragmaSystemHeader(), and LookupFile().

◆ getCurrentLexer()

PreprocessorLexer* clang::Preprocessor::getCurrentLexer ( ) const
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 1014 of file Preprocessor.h.

Referenced by EvaluateHasIncludeNext().

◆ getCurrentLexerSubmodule()

Module* clang::Preprocessor::getCurrentLexerSubmodule ( ) const
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 1024 of file Preprocessor.h.

Referenced by EvaluateHasIncludeNext().

◆ getCurrentModule()

Module * Preprocessor::getCurrentModule ( )

Retrieves the module that we're currently building, if any.

Definition at line 517 of file Preprocessor.cpp.

References getHeaderSearchInfo(), getLangOpts(), and clang::HeaderSearch::lookupModule().

Referenced by clang::Sema::ActOnEndOfTranslationUnit(), HandleEndOfFile(), LookupFile(), and markIdentifierFromAST().

◆ getDiagnostics()

DiagnosticsEngine& clang::Preprocessor::getDiagnostics ( ) const
inline

◆ getEmptylineHandler()

EmptylineHandler* clang::Preprocessor::getEmptylineHandler ( ) const
inline

Definition at line 1249 of file Preprocessor.h.

◆ getExternalSource()

ExternalPreprocessorSource* clang::Preprocessor::getExternalSource ( ) const
inline

Definition at line 954 of file Preprocessor.h.

Referenced by isTrivialSingleTokenExpansion().

◆ getFileManager()

FileManager& clang::Preprocessor::getFileManager ( ) const
inline

Definition at line 940 of file Preprocessor.h.

Referenced by EnableCodeCompletion().

◆ getHeaderSearchInfo()

HeaderSearch& clang::Preprocessor::getHeaderSearchInfo ( ) const
inline

◆ getHeaderToIncludeForDiagnostics()

const FileEntry * 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.

Parameters
IncLocThe location at which the missing effect was detected.
MLocA location within an unimported module at which the desired effect occurred.
Returns
A file that can be #included to provide the desired effect. Null if no such file could be determined or if a include is not appropriate (eg, if a module should be imported instead).

Definition at line 752 of file PPDirectives.cpp.

References clang::HeaderSearch::findAllModulesForHeader(), getHeaderSearchInfo(), getLangOpts(), getModuleForLocation(), getSourceManager(), clang::HeaderSearch::hasModuleMap(), clang::SourceManager::isInSystemHeader(), clang::SourceLocation::isInvalid(), SM, and clang::ModuleMap::TextualHeader.

Referenced by clang::Sema::diagnoseMissingImport().

◆ getIdentifierInfo()

IdentifierInfo* clang::Preprocessor::getIdentifierInfo ( StringRef  Name) const
inline

◆ getIdentifierTable() [1/2]

IdentifierTable& clang::Preprocessor::getIdentifierTable ( )
inline

◆ getIdentifierTable() [2/2]

const IdentifierTable& clang::Preprocessor::getIdentifierTable ( ) const
inline

Definition at line 945 of file Preprocessor.h.

◆ getImmediateMacroName()

StringRef clang::Preprocessor::getImmediateMacroName ( SourceLocation  Loc)
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 1812 of file Preprocessor.h.

References clang::Lexer::getImmediateMacroName(), and getLangOpts().

Referenced by lookThroughRangesV3Condition().

◆ GetIncludeFilenameSpelling()

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.

Returns
true if the input filename was in <>'s or false if it was in ""'s.

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 1601 of file PPDirectives.cpp.

References Diag().

Referenced by EvaluateHasIncludeCommon(), HandlePragmaIncludeAlias(), and LexHeader().

◆ getLangOpts()

const LangOptions& clang::Preprocessor::getLangOpts ( ) const
inline

◆ getLastCachedTokenLocation()

SourceLocation clang::Preprocessor::getLastCachedTokenLocation ( ) const
inline

Get the location of the last cached token, suitable for setting the end location of an annotation token.

Definition at line 1565 of file Preprocessor.h.

Referenced by IsPreviousCachedToken().

◆ getLastMacroWithSpelling()

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 351 of file Preprocessor.cpp.

Referenced by DiagnoseCallingConvCast(), clang::Sema::DiagnoseOwningPropertyGetterSynthesis(), and getFallthroughAttrSpelling().

◆ getLeafModuleMacros()

ArrayRef<ModuleMacro*> clang::Preprocessor::getLeafModuleMacros ( const IdentifierInfo II) const
inline

Get the list of leaf (non-overridden) module macros for a name.

Definition at line 1172 of file Preprocessor.h.

References clang::IdentifierInfo::isOutOfDate().

Referenced by indexPreprocessorModuleMacros().

◆ getLocalMacroDirective()

MacroDirective* clang::Preprocessor::getLocalMacroDirective ( const IdentifierInfo II) const
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 1119 of file Preprocessor.h.

References getLocalMacroDirectiveHistory(), and clang::IdentifierInfo::hasMacroDefinition().

◆ getLocalMacroDirectiveHistory()

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 63 of file PPMacroExpansion.cpp.

References clang::IdentifierInfo::hadMacroDefinition().

Referenced by checkConfigMacro(), and getLocalMacroDirective().

◆ getLocForEndOfToken()

SourceLocation clang::Preprocessor::getLocForEndOfToken ( SourceLocation  Loc,
unsigned  Offset = 0 
)
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.

Parameters
Offsetan 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 1845 of file Preprocessor.h.

References clang::Lexer::getLocForEndOfToken(), and Offset.

Referenced by clang::Sema::DiagnoseCommaOperator(), EvaluateHasIncludeCommon(), GenerateNewArgTokens(), clang::Parser::getEndOfPreviousToken(), and clang::Parser::ParseConstraintLogicalAndExpression().

◆ getMacroDefinition()

MacroDefinition clang::Preprocessor::getMacroDefinition ( const IdentifierInfo II)
inline

◆ getMacroDefinitionAtLoc()

MacroDefinition clang::Preprocessor::getMacroDefinitionAtLoc ( const IdentifierInfo II,
SourceLocation  Loc 
)
inline

Definition at line 1102 of file Preprocessor.h.

References clang::IdentifierInfo::hadMacroDefinition().

◆ getMacroDeprecationMsg()

llvm::Optional<std::string> clang::Preprocessor::getMacroDeprecationMsg ( const IdentifierInfo II)
inline

Definition at line 2409 of file Preprocessor.h.

◆ getMacroInfo() [1/2]

MacroInfo* clang::Preprocessor::getMacroInfo ( const IdentifierInfo II)
inline

◆ getMacroInfo() [2/2]

const MacroInfo* clang::Preprocessor::getMacroInfo ( const IdentifierInfo II) const
inline

◆ getMaxTokens()

unsigned clang::Preprocessor::getMaxTokens ( ) const
inline

Get the max number of tokens before issuing a -Wmax-tokens warning.

Definition at line 1047 of file Preprocessor.h.

Referenced by clang::Parser::ParseTopLevelDecl().

◆ getMaxTokensOverrideLoc()

SourceLocation clang::Preprocessor::getMaxTokensOverrideLoc ( ) const
inline

Definition at line 1054 of file Preprocessor.h.

Referenced by clang::Parser::ParseTopLevelDecl().

◆ getModuleForLocation()

Module * Preprocessor::getModuleForLocation ( SourceLocation  Loc)

◆ getModuleImportLoc()

SourceLocation clang::Preprocessor::getModuleImportLoc ( Module M) const
inline

Definition at line 1434 of file Preprocessor.h.

◆ getModuleLoader()

ModuleLoader& clang::Preprocessor::getModuleLoader ( ) const
inline

Retrieve the module loader associated with this preprocessor.

Definition at line 959 of file Preprocessor.h.

Referenced by clang::PCHGenerator::HandleTranslationUnit().

◆ getModuleMacro()

ModuleMacro * Preprocessor::getModuleMacro ( Module Mod,
const IdentifierInfo II 
)

Definition at line 174 of file PPMacroExpansion.cpp.

References clang::ModuleMacro::Profile().

◆ getNumDirectives()

unsigned clang::Preprocessor::getNumDirectives ( ) const
inline

Retrieve the number of Directives that have been processed by the Preprocessor.

Definition at line 967 of file Preprocessor.h.

◆ getPPCallbacks()

PPCallbacks* clang::Preprocessor::getPPCallbacks ( ) const
inline

Accessors for preprocessor callbacks.

Note that this class takes ownership of any PPCallbacks object given to it.

Definition at line 1034 of file Preprocessor.h.

Referenced by EvaluateDefined(), and EvaluateHasIncludeCommon().

◆ getPragmaARCCFCodeAuditedInfo()

std::pair<IdentifierInfo *, SourceLocation> clang::Preprocessor::getPragmaARCCFCodeAuditedInfo ( ) const
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 1676 of file Preprocessor.h.

Referenced by clang::Sema::AddCFAuditedAttribute().

◆ getPragmaAssumeNonNullLoc()

SourceLocation clang::Preprocessor::getPragmaAssumeNonNullLoc ( ) const
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 1691 of file Preprocessor.h.

◆ getPragmasEnabled()

bool clang::Preprocessor::getPragmasEnabled ( ) const
inline

Definition at line 985 of file Preprocessor.h.

◆ getPreambleConditionalStack()

ArrayRef<PPConditionalInfo> clang::Preprocessor::getPreambleConditionalStack ( ) const
inline

Definition at line 2341 of file Preprocessor.h.

◆ getPreambleSkipInfo()

llvm::Optional<PreambleSkipInfo> clang::Preprocessor::getPreambleSkipInfo ( ) const
inline

Definition at line 2356 of file Preprocessor.h.

◆ getPredefines()

const std::string& clang::Preprocessor::getPredefines ( ) const
inline

Definition at line 1210 of file Preprocessor.h.

◆ getPredefinesFileID()

FileID clang::Preprocessor::getPredefinesFileID ( ) const
inline

Returns the FileID for the preprocessor predefines.

Definition at line 1027 of file Preprocessor.h.

Referenced by checkConfigMacro(), HandleEndOfFile(), clang::RewriteIncludesInInput(), shouldIgnoreMacro(), and SkipTokensWhileUsingPCH().

◆ getPreprocessingRecord()

PreprocessingRecord* clang::Preprocessor::getPreprocessingRecord ( ) const
inline

Retrieve the preprocessing record, or NULL if there is no preprocessing record.

Definition at line 1306 of file Preprocessor.h.

Referenced by clang::ASTUnit::getLocalPreprocessingEntities().

◆ getPreprocessorAllocator()

llvm::BumpPtrAllocator& clang::Preprocessor::getPreprocessorAllocator ( )
inline

◆ getPreprocessorOpts()

PreprocessorOptions& clang::Preprocessor::getPreprocessorOpts ( ) const
inline

Retrieve the preprocessor options used to initialize this preprocessor.

Definition at line 932 of file Preprocessor.h.

◆ getRawToken()

bool clang::Preprocessor::getRawToken ( SourceLocation  Loc,
Token Result,
bool  IgnoreWhiteSpace = false 
)
inline

Relex the token at the specified location.

Returns
true if there was a failure, false on success.

Definition at line 1781 of file Preprocessor.h.

References clang::Lexer::getRawToken().

Referenced by UseNSOptionsMacro().

◆ getRestrictExpansionMsg()

MsgLocationPair clang::Preprocessor::getRestrictExpansionMsg ( const IdentifierInfo II)
inline

Definition at line 2422 of file Preprocessor.h.

◆ getSelectorTable()

SelectorTable& clang::Preprocessor::getSelectorTable ( )
inline

◆ getSourceManager()

SourceManager& clang::Preprocessor::getSourceManager ( ) const
inline

◆ getSpelling() [1/4]

std::string clang::Preprocessor::getSpelling ( const Token Tok,
bool Invalid = nullptr 
) const
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.

Parameters
InvalidIf non-null, will be set true if an error occurs.

Definition at line 1750 of file Preprocessor.h.

References clang::Lexer::getSpelling().

◆ getSpelling() [2/4]

unsigned clang::Preprocessor::getSpelling ( const Token Tok,
const char *&  Buffer,
bool Invalid = nullptr 
) const
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 1766 of file Preprocessor.h.

References clang::Lexer::getSpelling().

◆ getSpelling() [3/4]

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 459 of file Preprocessor.cpp.

References clang::Token::getIdentifierInfo(), clang::Token::getLength(), getSpelling(), clang::Token::hasUCN(), clang::Token::isNot(), and clang::Token::needsCleaning().

◆ getSpelling() [4/4]

StringRef clang::Preprocessor::getSpelling ( SourceLocation  loc,
SmallVectorImpl< char > &  buffer,
bool invalid = nullptr 
) const
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.

Parameters
bufferA buffer which will be used only if the token requires "cleaning", e.g. if it contains trigraphs or escaped newlines
invalidIf non-null, will be set true if an error occurs.

Definition at line 1736 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(), HandlePragmaIncludeInstead(), clang::MacroInfo::isIdenticalTo(), isMapModifier(), isMapType(), LexHeader(), LexHeaderName(), LookUpIdentifierInfo(), ParsePragmaPushOrPopMacro(), parseSimpleIntegerLiteral(), PrintMacroDefinition(), clang::RewriteMacrosInInput(), and clang::MacroArgs::StringifyArgument().

◆ getSpellingOfSingleCharacterNumericConstant()

char clang::Preprocessor::getSpellingOfSingleCharacterNumericConstant ( const Token Tok,
bool Invalid = nullptr 
) const
inline

Given a Token Tok that is a numeric constant with length 1, return the character.

Definition at line 1789 of file Preprocessor.h.

References clang::Token::getLength(), clang::Token::getLiteralData(), clang::Token::getLocation(), clang::Token::is(), and clang::Token::needsCleaning().

Referenced by clang::Sema::ActOnNumericConstant().

◆ GetSuppressIncludeNotFoundError()

bool clang::Preprocessor::GetSuppressIncludeNotFoundError ( )
inline

Definition at line 991 of file Preprocessor.h.

◆ getTargetInfo()

const TargetInfo& clang::Preprocessor::getTargetInfo ( ) const
inline

◆ getTokenCount()

unsigned clang::Preprocessor::getTokenCount ( ) const
inline

Get the number of tokens processed so far.

Definition at line 1044 of file Preprocessor.h.

Referenced by clang::Parser::ParseTopLevelDecl().

◆ getTotalMemory()

size_t Preprocessor::getTotalMemory ( ) const

Definition at line 321 of file Preprocessor.cpp.

Referenced by PrintStats().

◆ hadModuleLoaderFatalFailure()

bool clang::Preprocessor::hadModuleLoaderFatalFailure ( ) const
inline

Definition at line 961 of file Preprocessor.h.

References clang::ModuleLoader::HadFatalFailure.

◆ HandleComment()

bool Preprocessor::HandleComment ( Token result,
SourceRange  Comment 
)

Definition at line 1398 of file Preprocessor.cpp.

References getCommentRetentionState(), and Lex().

◆ HandleDirective()

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 999 of file PPDirectives.cpp.

References clang::CodeCompletionHandler::CodeCompleteDirective(), Diag(), DiscardUntilEndOfDirective(), clang::PreprocessorLexer::getConditionalStackDepth(), clang::MultipleIncludeOpt::getHasReadAnyTokensVal(), clang::Token::getIdentifierInfo(), clang::MultipleIncludeOpt::getImmediatelyAfterTopLevelIfndef(), clang::Decl::getKind(), getLangOpts(), clang::Token::getLocation(), clang::IdentifierInfo::getPPKeywordID(), HandleSkippedDirectiveWhileUsingPCH(), LexUnexpandedToken(), clang::PreprocessorLexer::MIOpt, clang::PreprocessorLexer::ParsingPreprocessorDirective, clang::PIK_HashPragma, clang::minimize_source_to_dependency_directives::pp___include_macros, clang::minimize_source_to_dependency_directives::pp_define, clang::minimize_source_to_dependency_directives::pp_elif, clang::minimize_source_to_dependency_directives::pp_elifdef, clang::minimize_source_to_dependency_directives::pp_elifndef, clang::minimize_source_to_dependency_directives::pp_else, clang::minimize_source_to_dependency_directives::pp_endif, clang::minimize_source_to_dependency_directives::pp_if, clang::minimize_source_to_dependency_directives::pp_ifdef, clang::minimize_source_to_dependency_directives::pp_ifndef, clang::minimize_source_to_dependency_directives::pp_import, clang::minimize_source_to_dependency_directives::pp_include, clang::minimize_source_to_dependency_directives::pp_include_next, clang::minimize_source_to_dependency_directives::pp_undef, clang::MultipleIncludeOpt::resetImmediatelyAfterTopLevelIfndef(), and setCodeCompletionReached().

◆ HandleEndOfFile()

bool Preprocessor::HandleEndOfFile ( Token Result,
SourceLocation  EndLoc,
bool  isEndOfMacro = false 
)

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 342 of file PPLexerChange.cpp.

References collectAllSubModulesWithUmbrellaHeader(), clang::FixItHint::CreateReplacement(), creatingPCHWithThroughHeader(), Diag(), clang::comments::tok::eof, clang::PPCallbacks::ExitFile, clang::HeaderSearch::FirstTimeLexingFile(), 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(), clang::Decl::getLocation(), clang::SourceManager::getLocForStartOfFile(), clang::SourceLocation::getLocWithOffset(), getMacroInfo(), clang::MultipleIncludeOpt::GetMacroLocation(), getPredefinesFileID(), clang::PreprocessorLexer::getSourceLocation(), isCodeCompletionEnabled(), isIncrementalProcessingEnabled(), isInPrimaryFile(), isMacroDefined(), isPCHThroughHeader(), clang::FileID::isValid(), clang::SourceLocation::isValid(), LeaveSubmodule(), clang::SourceManager::local_sloc_entry_size(), max(), clang::PreprocessorLexer::MIOpt, recomputeCurLexerKind(), RemoveTopOfLexerStack(), clang::HeaderSearch::SetFileControllingMacro(), clang::Decl::setLocation(), clang::SourceManager::setNumCreatedFIDsForFileID(), clang::TU_Complete, and TUKind.

Referenced by HandleEndOfTokenLexer().

◆ HandleEndOfTokenLexer()

bool Preprocessor::HandleEndOfTokenLexer ( Token Result)

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 589 of file PPLexerChange.cpp.

References HandleEndOfFile().

Referenced by HandleMicrosoftCommentPaste(), and clang::TokenLexer::Lex().

◆ HandleIdentifier()

bool Preprocessor::HandleIdentifier ( Token Identifier)

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').

Returns
true if we actually computed a token, false if we need to lex again.

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 796 of file Preprocessor.cpp.

References Diag(), clang::Token::DisableExpand, getFutureCompatDiagKind(), 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().

◆ HandleMicrosoftCommentPaste()

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 627 of file PPLexerChange.cpp.

References clang::comments::tok::eof, HandleEndOfTokenLexer(), clang::Token::is(), clang::Token::isNot(), Lex(), clang::PreprocessorLexer::LexingRawMode, and clang::PreprocessorLexer::ParsingPreprocessorDirective.

◆ HandlePoisonedIdentifier()

void Preprocessor::HandlePoisonedIdentifier ( Token Identifier)

Display reason for poisoned identifier.

Definition at line 749 of file Preprocessor.cpp.

References Diag(), and Identifier.

Referenced by HandleIdentifier(), clang::TokenLexer::Lex(), and MaybeHandlePoisonedIdentifier().

◆ HandlePragmaDependency()

void Preprocessor::HandlePragmaDependency ( Token DependencyTok)

HandlePragmaDependency - Handle #pragma GCC dependency "foo" blah.

Definition at line 575 of file Pragma.cpp.

References Diag(), clang::File, getCurrentFileLexer(), clang::PreprocessorLexer::getFileEntry(), clang::FileEntry::getModificationTime(), getSpelling(), clang::Token::isNot(), Lex(), LexHeader(), and string().

◆ HandlePragmaHdrstop()

void Preprocessor::HandlePragmaHdrstop ( Token Tok)

◆ HandlePragmaIncludeAlias()

void Preprocessor::HandlePragmaIncludeAlias ( Token Tok)

◆ HandlePragmaIncludeInstead()

void Preprocessor::HandlePragmaIncludeInstead ( Token Tok)

◆ HandlePragmaMark()

void Preprocessor::HandlePragmaMark ( Token MarkTok)

Definition at line 417 of file Pragma.cpp.

References clang::Token::getLocation().

◆ HandlePragmaModuleBuild()

void Preprocessor::HandlePragmaModuleBuild ( Token Tok)

◆ HandlePragmaOnce()

void Preprocessor::HandlePragmaOnce ( Token OnceTok)

HandlePragmaOnce - Handle #pragma once. OnceTok is the 'once'.

Definition at line 402 of file Pragma.cpp.

References Diag(), getCurrentFileLexer(), getLangOpts(), IsHeaderFile(), isInPrimaryFile(), clang::HeaderSearch::MarkFileIncludeOnce(), clang::TU_Prefix, and TUKind.

◆ HandlePragmaPoison()

void Preprocessor::HandlePragmaPoison ( )

◆ HandlePragmaPopMacro()

void Preprocessor::HandlePragmaPopMacro ( Token PopMacroTok)

Handle #pragma pop_macro.

The syntax is:

#pragma pop_macro("macro")

Definition at line 681 of file Pragma.cpp.

References appendDefMacroDirective(), appendMacroDirective(), Diag(), clang::Token::getLocation(), getMacroInfo(), clang::IdentifierInfo::getName(), and ParsePragmaPushOrPopMacro().

◆ HandlePragmaPushMacro()

void Preprocessor::HandlePragmaPushMacro ( Token PushMacroTok)

Handle #pragma push_macro.

The syntax is:

#pragma push_macro("macro")

Definition at line 658 of file Pragma.cpp.

References getMacroInfo(), ParsePragmaPushOrPopMacro(), and clang::MacroInfo::setIsAllowRedefinitionsWithoutWarning().

◆ HandlePragmaSystemHeader()

void Preprocessor::HandlePragmaSystemHeader ( Token SysHeaderTok)

◆ HandleSkippedDirectiveWhileUsingPCH()

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 974 of file PPDirectives.cpp.

References DiscardUntilEndOfDirective(), HandlePragmaHdrstop(), Lex(), clang::minimize_source_to_dependency_directives::pp_define, and clang::minimize_source_to_dependency_directives::pp_include.

Referenced by HandleDirective().

◆ hasRecordedPreamble()

bool clang::Preprocessor::hasRecordedPreamble ( ) const
inline

Definition at line 2337 of file Preprocessor.h.

◆ IgnorePragmas()

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 2119 of file Pragma.cpp.

References AddPragmaHandler().

Referenced by DoPrintMacros(), clang::PreprocessOnlyAction::ExecuteAction(), and clang::RewriteIncludesInInput().

◆ IncrementPasteCounter()

void clang::Preprocessor::IncrementPasteCounter ( bool  isFast)
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 1887 of file Preprocessor.h.

◆ Initialize()

void Preprocessor::Initialize ( const TargetInfo Target,
const TargetInfo AuxTarget = nullptr 
)

Initialize the preprocessor using information about the target.

Parameters
Targetis owned by the caller and must remain valid for the lifetime of the preprocessor.
AuxTargetis owned by the caller and must remain valid for the lifetime of the preprocessor.

Definition at line 195 of file Preprocessor.cpp.

References clang::IdentifierTable::AddKeywords(), clang::HeaderSearch::setTarget(), and clang::Target.

◆ InitializeForModelFile()

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 213 of file Preprocessor.cpp.

◆ isAtEndOfMacroExpansion()

bool clang::Preprocessor::isAtEndOfMacroExpansion ( SourceLocation  loc,
SourceLocation MacroEnd = nullptr 
) const
inline

Returns true if the given MacroID location points at the last token of the macro expansion.

Parameters
MacroEndIf non-null and function returns true, it is set to end location of the macro.

Definition at line 1865 of file Preprocessor.h.

References clang::Lexer::isAtEndOfMacroExpansion().

◆ isAtStartOfMacroExpansion()

bool clang::Preprocessor::isAtStartOfMacroExpansion ( SourceLocation  loc,
SourceLocation MacroBegin = nullptr 
) const
inline

Returns true if the given MacroID location points at the first token of the macro expansion.

Parameters
MacroBeginIf non-null and function returns true, it is set to begin location of the macro.

Definition at line 1854 of file Preprocessor.h.

References clang::Lexer::isAtStartOfMacroExpansion().

◆ isBacktrackEnabled()

bool clang::Preprocessor::isBacktrackEnabled ( ) const
inline

True if EnableBacktrackAtThisPos() was called and caching of tokens is on.

Definition at line 1421 of file Preprocessor.h.

Referenced by AnnotateCachedTokens(), ReplaceLastTokenWithAnnotation(), RevertCachedTokens(), and TypoCorrectToken().

◆ isCodeCompletionEnabled()

bool clang::Preprocessor::isCodeCompletionEnabled ( ) const
inline

◆ isCodeCompletionReached()

bool clang::Preprocessor::isCodeCompletionReached ( ) const
inline

Returns true if code-completion is enabled and we have hit the code-completion point.

Definition at line 1661 of file Preprocessor.h.

◆ isCurrentLexer()

bool clang::Preprocessor::isCurrentLexer ( const PreprocessorLexer L) const
inline

Return true if we are lexing directly from the specified lexer.

Definition at line 1006 of file Preprocessor.h.

◆ isIncrementalProcessingEnabled()

bool clang::Preprocessor::isIncrementalProcessingEnabled ( ) const
inline

Returns true if incremental processing is enabled.

Definition at line 1618 of file Preprocessor.h.

Referenced by clang::Sema::ActOnEndOfTranslationUnit(), HandleEndOfFile(), clang::IncrementalParser::Parse(), and clang::Parser::ParseTopLevelDecl().

◆ isInPrimaryFile()

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 EvaluateHasIncludeNext(), HandleEndOfFile(), HandlePragmaOnce(), and HandlePragmaSystemHeader().

◆ isMacroDefined() [1/2]

bool clang::Preprocessor::isMacroDefined ( const IdentifierInfo II)
inline

◆ isMacroDefined() [2/2]

bool clang::Preprocessor::isMacroDefined ( StringRef  Id)
inline

◆ isMacroDefinedInLocalModule()

bool clang::Preprocessor::isMacroDefinedInLocalModule ( const IdentifierInfo II,
Module M 
)
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 1076 of file Preprocessor.h.

References clang::IdentifierInfo::hasMacroDefinition().

Referenced by clang::HeaderSearch::ShouldEnterIncludeFile().

◆ isParsingIfOrElifDirective()

bool clang::Preprocessor::isParsingIfOrElifDirective ( ) const
inline

True if we are currently preprocessing a if or #elif directive.

Definition at line 972 of file Preprocessor.h.

Referenced by EvaluateHasIncludeCommon().

◆ isPCHThroughHeader()

bool Preprocessor::isPCHThroughHeader ( const FileEntry FE)

Returns true if the FileEntry is the PCH through header.

Definition at line 597 of file Preprocessor.cpp.

References clang::SourceManager::getFileEntryForID(), and clang::FileID::isValid().

Referenced by HandleEndOfFile().

◆ isPreprocessedOutput()

bool clang::Preprocessor::isPreprocessedOutput ( ) const
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 1003 of file Preprocessor.h.

◆ IsPreviousCachedToken()

bool Preprocessor::IsPreviousCachedToken ( const Token Tok) const

Whether Tok is the most recent token (CachedLexPos - 1) in CachedTokens.

Definition at line 139 of file PPCaching.cpp.

References clang::Token::getKind(), getLastCachedTokenLocation(), clang::Token::getLocation(), and getSourceManager().

◆ isRecordingPreamble()

bool clang::Preprocessor::isRecordingPreamble ( ) const
inline

Definition at line 2333 of file Preprocessor.h.

◆ LeaveSubmodule()

Module * Preprocessor::LeaveSubmodule ( bool  ForPragma)

◆ Lex()

void Preprocessor::Lex ( Token Result)

◆ LexAfterModuleImport()

bool Preprocessor::LexAfterModuleImport ( Token Result)

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 1131 of file Preprocessor.cpp.

References CollectPpImportSuffix(), Diag(), clang::comments::tok::eof, getIdentifierInfo(), clang::Decl::getKind(), getLangOpts(), clang::Decl::getLocation(), clang::ModuleLoader::HadFatalFailure, clang::Module::Hidden, clang::SourceLocation::isMacroID(), Lex(), LexHeaderName(), clang::ModuleLoader::loadModule(), makeModuleVisible(), clang::XRayInstrKind::None, recomputeCurLexerKind(), clang::Token::setIdentifierInfo(), clang::Token::setKind(), clang::Token::setLength(), clang::Token::setLocation(), clang::Token::startToken(), and string().

Referenced by Lex(), and SkipTokensWhileUsingPCH().

◆ LexHeaderName()

bool Preprocessor::LexHeaderName ( Token FilenameTok,
bool  AllowMacroExpansion = true 
)

Lex a token, forming a header-name token if possible.

Lex a header-name token (including one formed from header-name-tokens if AllowConcatenation is true).

Parameters
FilenameTokFilled 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.
AllowMacroExpansionIf true, allow the header name to be formed by macro expansion (concatenating tokens as necessary if the first token is a '<').
Returns
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 988 of file Preprocessor.cpp.

References CreateString(), Diag(), End, clang::comments::tok::eof, 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(), HandlePragmaIncludeAlias(), LexAfterModuleImport(), and LexHeader().

◆ LexNonComment()

void clang::Preprocessor::LexNonComment ( Token Result)
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 1462 of file Preprocessor.h.

References Lex().

Referenced by EvaluateDefined(), EvaluateDirectiveSubExpr(), EvaluateHasIncludeCommon(), and EvaluateValue().

◆ LexOnOffSwitch()

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 999 of file Pragma.cpp.

References Diag(), clang::Token::getIdentifierInfo(), clang::Token::isNot(), clang::IdentifierInfo::isStr(), LexUnexpandedToken(), clang::tok::OOS_DEFAULT, clang::tok::OOS_OFF, and clang::tok::OOS_ON.

◆ LexStringLiteral()

bool clang::Preprocessor::LexStringLiteral ( Token Result,
std::string String,
const char *  DiagnosticTag,
bool  AllowMacroExpansion 
)
inline

Lex a string literal, which may be the concatenation of multiple string literals and may even come from macro expansion.

Returns
true on success, false if a error diagnostic has been generated.

Definition at line 1441 of file Preprocessor.h.

References FinishLexStringLiteral(), Lex(), and LexUnexpandedToken().

Referenced by HandlePragmaHdrstop().

◆ LexUnexpandedNonComment()

void clang::Preprocessor::LexUnexpandedNonComment ( Token Result)
inline

Like LexNonComment, but this disables macro expansion of identifier tokens.

Definition at line 1482 of file Preprocessor.h.

References LexUnexpandedToken().

Referenced by EvaluateDefined().

◆ LexUnexpandedToken()

void clang::Preprocessor::LexUnexpandedToken ( Token Result)
inline

◆ LookAhead()

const Token& clang::Preprocessor::LookAhead ( unsigned  N)
inline

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 1506 of file Preprocessor.h.

Referenced by clang::Parser::NextToken(), and clang::Parser::ParseMSAsmIdentifier().

◆ LookupFile()

Optional< FileEntryRef > Preprocessor::LookupFile ( SourceLocation  FilenameLoc,
StringRef  Filename,
bool  isAngled,
const DirectoryLookup FromDir,
const FileEntry FromFile,
const DirectoryLookup *&  CurDir,
SmallVectorImpl< char > *  SearchPath,
SmallVectorImpl< char > *  RelativePath,
ModuleMap::KnownHeader SuggestedModule,
bool IsMapped,
bool IsFrameworkFound,
bool  SkipCache = false 
)

◆ LookUpIdentifierInfo()

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 696 of file Preprocessor.cpp.

References clang::expandUCNs(), getIdentifierInfo(), getSpelling(), clang::IdentifierInfo::getTokenID(), and Identifier.

Referenced by HandlePragmaPoison(), LexRawTokensFromMainFile(), and ParsePragmaPushOrPopMacro().

◆ macro_begin()

Preprocessor::macro_iterator Preprocessor::macro_begin ( bool  IncludeExternalMacros = true) const

Definition at line 307 of file Preprocessor.cpp.

References clang::ExternalPreprocessorSource::ReadDefinedMacros().

Referenced by DoPrintMacros(), and macros().

◆ macro_end()

Preprocessor::macro_iterator Preprocessor::macro_end ( bool  IncludeExternalMacros = true) const

Definition at line 334 of file Preprocessor.cpp.

References clang::ExternalPreprocessorSource::ReadDefinedMacros().

Referenced by DoPrintMacros(), and macros().

◆ macros()

llvm::iterator_range<macro_iterator> clang::Preprocessor::macros ( bool  IncludeExternalMacros = true) const
inline

Definition at line 1196 of file Preprocessor.h.

References macro_begin(), and macro_end().

Referenced by indexPreprocessorMacros(), and indexPreprocessorModuleMacros().

◆ makeModuleVisible()

void Preprocessor::makeModuleVisible ( Module M,
SourceLocation  Loc 
)

Definition at line 1306 of file Preprocessor.cpp.

References Diag().

Referenced by EnterSubmodule(), LeaveSubmodule(), and LexAfterModuleImport().

◆ markMacroAsUsed()

void Preprocessor::markMacroAsUsed ( MacroInfo MI)

A macro is used, update information about macros that need unused warnings.

Definition at line 1870 of file PPMacroExpansion.cpp.

References clang::MacroInfo::getDefinitionLoc(), clang::MacroInfo::isUsed(), clang::MacroInfo::isWarnIfUnused(), and clang::MacroInfo::setIsUsed().

Referenced by EvaluateDefined().

◆ MaybeHandlePoisonedIdentifier()

void clang::Preprocessor::MaybeHandlePoisonedIdentifier ( Token Identifier)
inline

Definition at line 1925 of file Preprocessor.h.

References HandlePoisonedIdentifier(), and Identifier.

◆ mightHavePendingAnnotationTokens()

bool clang::Preprocessor::mightHavePendingAnnotationTokens ( )
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 1601 of file Preprocessor.h.

◆ overrideMaxTokens()

void clang::Preprocessor::overrideMaxTokens ( unsigned  Value,
SourceLocation  Loc 
)
inline

Definition at line 1049 of file Preprocessor.h.

◆ ParsePragmaPushOrPopMacro()

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 603 of file Pragma.cpp.

References CreateString(), Diag(), clang::Token::getLocation(), getSpelling(), clang::Token::hasUDSuffix(), clang::Token::isNot(), Lex(), LookUpIdentifierInfo(), clang::Token::setKind(), clang::Token::startToken(), and string().

Referenced by HandlePragmaPopMacro(), and HandlePragmaPushMacro().

◆ parseSimpleIntegerLiteral()

bool Preprocessor::parseSimpleIntegerLiteral ( Token Tok,
uint64_t &  Value 
)

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 1364 of file Preprocessor.cpp.

References getDiagnostics(), clang::NumericLiteralParser::GetIntegerValue(), getLangOpts(), clang::Token::getLocation(), getSourceManager(), getSpelling(), getTargetInfo(), clang::NumericLiteralParser::hadError, clang::NumericLiteralParser::hasUDSuffix(), clang::Token::is(), clang::NumericLiteralParser::isIntegerLiteral(), and Lex().

◆ PoisonSEHIdentifiers()

void Preprocessor::PoisonSEHIdentifiers ( bool  Poison = true)

Definition at line 735 of file Preprocessor.cpp.

References clang::IdentifierInfo::setIsPoisoned().

◆ PrintStats()

void Preprocessor::PrintStats ( )

Definition at line 268 of file Preprocessor.cpp.

References getTotalMemory().

Referenced by clang::FrontendAction::EndSourceFile().

◆ recomputeCurLexerKind()

void Preprocessor::recomputeCurLexerKind ( )

Recompute the current lexer kind based on the CurLexer/ CurTokenLexer pointers.

Definition at line 378 of file Preprocessor.cpp.

Referenced by Backtrack(), HandleEndOfFile(), and LexAfterModuleImport().

◆ removeCommentHandler()

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 1391 of file Preprocessor.cpp.

Referenced by clang::Parser::~Parser().

◆ RemovePragmaHandler() [1/2]

void clang::Preprocessor::RemovePragmaHandler ( PragmaHandler Handler)
inline

Definition at line 1239 of file Preprocessor.h.

References RemovePragmaHandler().

◆ RemovePragmaHandler() [2/2]

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

  • 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.

Definition at line 977 of file Pragma.cpp.

References clang::PragmaHandler::getIfNamespace(), clang::PragmaNamespace::IsEmpty(), and clang::PragmaNamespace::RemovePragmaHandler().

Referenced by clang::DoPrintPreprocessedInput(), and RemovePragmaHandler().

◆ RemoveTopOfLexerStack()

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 610 of file PPLexerChange.cpp.

Referenced by HandleEndOfFile().

◆ ReplaceLastTokenWithAnnotation()

void clang::Preprocessor::ReplaceLastTokenWithAnnotation ( const Token Tok)
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 1589 of file Preprocessor.h.

References clang::Token::isAnnotation(), and isBacktrackEnabled().

◆ ReplacePreviousCachedToken()

void Preprocessor::ReplacePreviousCachedToken ( ArrayRef< Token NewToks)

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 157 of file PPCaching.cpp.

◆ RevertCachedTokens()

void clang::Preprocessor::RevertCachedTokens ( unsigned  N)
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 1519 of file Preprocessor.h.

References isBacktrackEnabled().

◆ SawDateOrTime()

bool clang::Preprocessor::SawDateOrTime ( ) const
inline

Returns true if the preprocessor has seen a use of DATE or TIME in the file so far.

Definition at line 2001 of file Preprocessor.h.

◆ setCodeCompletionHandler()

void clang::Preprocessor::setCodeCompletionHandler ( CodeCompletionHandler Handler)
inline

Set the code completion handler to the given object.

Definition at line 1260 of file Preprocessor.h.

Referenced by clang::Parser::Parser().

◆ setCodeCompletionIdentifierInfo()

void clang::Preprocessor::setCodeCompletionIdentifierInfo ( IdentifierInfo Filter)
inline

Set the code completion token for filtering purposes.

Definition at line 1283 of file Preprocessor.h.

References clang::tooling::Filter.

Referenced by Lex().

◆ SetCodeCompletionPoint()

bool Preprocessor::SetCodeCompletionPoint ( const FileEntry File,
unsigned  Line,
unsigned  Column 
)

Specify the point at which code-completion will be performed.

Parameters
Filethe 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.
Linethe line at which code completion should occur (1-based).
Columnthe column at which code completion should occur (1-based).
Returns
true if an error occurred, false otherwise.

Definition at line 387 of file Preprocessor.cpp.

References clang::File, and clang::SourceManager::getMemoryBufferForFileOrNone().

Referenced by EnableCodeCompletion().

◆ setCodeCompletionReached()

void clang::Preprocessor::setCodeCompletionReached ( )
inline

◆ setCodeCompletionTokenRange()

void clang::Preprocessor::setCodeCompletionTokenRange ( const SourceLocation  Start,
const SourceLocation  End 
)
inline

Set the code completion token range for detecting replacement range later on.

Definition at line 1289 of file Preprocessor.h.

References End.

Referenced by Lex().

◆ SetCommentRetentionState()

void clang::Preprocessor::SetCommentRetentionState ( bool  KeepComments,
bool  KeepMacroComments 
)
inline

Control whether the preprocessor retains comments in output.

Definition at line 977 of file Preprocessor.h.

Referenced by clang::DoPrintPreprocessedInput().

◆ setCounterValue()

void clang::Preprocessor::setCounterValue ( unsigned  V)
inline

Definition at line 2005 of file Preprocessor.h.

References V.

Referenced by clang::ASTUnit::LoadFromASTFile().

◆ setDiagnostics()

void clang::Preprocessor::setDiagnostics ( DiagnosticsEngine D)
inline

Definition at line 935 of file Preprocessor.h.

◆ setEmptylineHandler()

void clang::Preprocessor::setEmptylineHandler ( EmptylineHandler Handler)
inline

Set empty line handler.

Definition at line 1247 of file Preprocessor.h.

Referenced by clang::CodeGen::CoverageMappingModuleGen::setUpCoverageCallbacks().

◆ setExternalSource()

void clang::Preprocessor::setExternalSource ( ExternalPreprocessorSource Source)
inline

Definition at line 950 of file Preprocessor.h.

◆ setLoadedMacroDirective()

void Preprocessor::setLoadedMacroDirective ( IdentifierInfo II,
MacroDirective ED,
MacroDirective MD 
)

◆ SetMacroExpansionOnlyInDirectives()

void clang::Preprocessor::SetMacroExpansionOnlyInDirectives ( )
inline

Disables macro expansion everywhere except for preprocessor directives.

Definition at line 1494 of file Preprocessor.h.

Referenced by clang::RewriteIncludesInInput().

◆ setMainFileDir()

void clang::Preprocessor::setMainFileDir ( const DirectoryEntry Dir)
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 1703 of file Preprocessor.h.

Referenced by prepareToBuildModule().

◆ SetPoisonReason()

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 731 of file Preprocessor.cpp.

Referenced by clang::Parser::Initialize(), and Preprocessor().

◆ setPragmaARCCFCodeAuditedInfo()

void clang::Preprocessor::setPragmaARCCFCodeAuditedInfo ( IdentifierInfo Ident,
SourceLocation  Loc 
)
inline

Set the location of the currently-active #pragma clang arc_cf_code_audited begin.

An invalid location ends the pragma.

Definition at line 1682 of file Preprocessor.h.

◆ setPragmaAssumeNonNullLoc()

void clang::Preprocessor::setPragmaAssumeNonNullLoc ( SourceLocation  Loc)
inline

Set the location of the currently-active #pragma clang assume_nonnull begin.

An invalid location ends the pragma.

Definition at line 1697 of file Preprocessor.h.

◆ setPragmasEnabled()

void clang::Preprocessor::setPragmasEnabled ( bool  Enabled)
inline

Definition at line 984 of file Preprocessor.h.

◆ setPredefines() [1/2]

void clang::Preprocessor::setPredefines ( const char *  P)
inline

Set the predefines for this Preprocessor.

These predefines are automatically injected when parsing the main file.

Definition at line 1215 of file Preprocessor.h.

References P.

Referenced by createASTReader(), and clang::CompilerInstance::createPCHExternalASTSource().

◆ setPredefines() [2/2]

void clang::Preprocessor::setPredefines ( StringRef  P)
inline

Definition at line 1216 of file Preprocessor.h.

References P, and string().

◆ setPreprocessedOutput()

void clang::Preprocessor::setPreprocessedOutput ( bool  IsPreprocessedOutput)
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 997 of file Preprocessor.h.

◆ setPreprocessToken()

void clang::Preprocessor::setPreprocessToken ( bool  Preprocess)
inline

◆ setRecordedPreambleConditionalStack()

void clang::Preprocessor::setRecordedPreambleConditionalStack ( ArrayRef< PPConditionalInfo s)
inline

Definition at line 2345 of file Preprocessor.h.

References s.

◆ setReplayablePreambleConditionalStack()

void clang::Preprocessor::setReplayablePreambleConditionalStack ( ArrayRef< PPConditionalInfo s,
llvm::Optional< PreambleSkipInfo SkipInfo 
)
inline

Definition at line 2349 of file Preprocessor.h.

References s.

◆ setSkipMainFilePreamble()

void clang::Preprocessor::setSkipMainFilePreamble ( unsigned  Bytes,
bool  StartOfLine 
)
inline

Instruct the preprocessor to skip part of the main source file.

Parameters
BytesThe number of bytes in the preamble to skip.
StartOfLineWhether skipping these bytes puts the lexer at the start of a line.

Definition at line 1713 of file Preprocessor.h.

◆ SetSuppressIncludeNotFoundError()

void clang::Preprocessor::SetSuppressIncludeNotFoundError ( bool  Suppress)
inline

◆ setTokenWatcher()

void clang::Preprocessor::setTokenWatcher ( llvm::unique_function< void(const clang::Token &)>  F)
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 1059 of file Preprocessor.h.

Referenced by clang::MacroExpansionContext::registerForPreprocessor(), clang::CodeGen::CoverageMappingModuleGen::setUpCoverageCallbacks(), and clang::syntax::TokenCollector::TokenCollector().

◆ SkipTokensWhileUsingPCH()

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 626 of file Preprocessor.cpp.

References Diag(), clang::comments::tok::eof, getPredefinesFileID(), clang::Token::is(), and LexAfterModuleImport().

Referenced by EnterMainSourceFile().

◆ SplitToken()

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 501 of file Preprocessor.cpp.

References clang::SourceLocation::getLocWithOffset(), getSourceManager(), and SM.

◆ TypoCorrectToken()

void clang::Preprocessor::TypoCorrectToken ( const Token Tok)
inline

Update the current token to represent the provided identifier, in order to cache an action performed by typo correction.

Definition at line 1607 of file Preprocessor.h.

References clang::Token::getIdentifierInfo(), and isBacktrackEnabled().

◆ usingPCHWithPragmaHdrStop()

bool Preprocessor::usingPCHWithPragmaHdrStop ( )

True if using a PCH with a #pragma hdrstop.

Definition at line 617 of file Preprocessor.cpp.

References clang::TU_Prefix, and TUKind.

Referenced by EnterMainSourceFile(), HandlePragmaHdrstop(), and Preprocessor().

◆ usingPCHWithThroughHeader()

bool Preprocessor::usingPCHWithThroughHeader ( )

True if using a PCH with a through header.

Definition at line 608 of file Preprocessor.cpp.

References clang::FileID::isValid(), clang::TU_Prefix, and TUKind.

Referenced by EnterMainSourceFile().

Friends And Related Function Documentation

◆ ASTReader

friend class ASTReader
friend

Definition at line 454 of file Preprocessor.h.

◆ MacroArgs

friend class MacroArgs
friend

Definition at line 455 of file Preprocessor.h.

◆ TokenLexer::ExpandFunctionArguments

void TokenLexer::ExpandFunctionArguments ( )
friend

◆ VAOptDefinitionContext

friend class VAOptDefinitionContext
friend

Definition at line 131 of file Preprocessor.h.

◆ VariadicMacroScopeGuard

friend class VariadicMacroScopeGuard
friend

Definition at line 132 of file Preprocessor.h.

Member Data Documentation

◆ TUKind

const TranslationUnitKind clang::Preprocessor::TUKind

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