summaryrefslogtreecommitdiffstats
path: root/include/clang/Lex/PPCallbacks.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/clang/Lex/PPCallbacks.h')
-rw-r--r--include/clang/Lex/PPCallbacks.h509
1 files changed, 0 insertions, 509 deletions
diff --git a/include/clang/Lex/PPCallbacks.h b/include/clang/Lex/PPCallbacks.h
deleted file mode 100644
index 68b8f1c..0000000
--- a/include/clang/Lex/PPCallbacks.h
+++ /dev/null
@@ -1,509 +0,0 @@
-//===--- PPCallbacks.h - Callbacks for Preprocessor actions -----*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-///
-/// \file
-/// \brief Defines the PPCallbacks interface.
-///
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_LEX_PPCALLBACKS_H
-#define LLVM_CLANG_LEX_PPCALLBACKS_H
-
-#include "clang/Basic/DiagnosticIDs.h"
-#include "clang/Basic/SourceLocation.h"
-#include "clang/Lex/DirectoryLookup.h"
-#include "clang/Lex/ModuleLoader.h"
-#include "clang/Lex/Pragma.h"
-#include "llvm/ADT/StringRef.h"
-#include <string>
-
-namespace clang {
- class SourceLocation;
- class Token;
- class IdentifierInfo;
- class MacroDefinition;
- class MacroDirective;
- class MacroArgs;
-
-/// \brief This interface provides a way to observe the actions of the
-/// preprocessor as it does its thing.
-///
-/// Clients can define their hooks here to implement preprocessor level tools.
-class PPCallbacks {
-public:
- virtual ~PPCallbacks();
-
- enum FileChangeReason {
- EnterFile, ExitFile, SystemHeaderPragma, RenameFile
- };
-
- /// \brief Callback invoked whenever a source file is entered or exited.
- ///
- /// \param Loc Indicates the new location.
- /// \param PrevFID the file that was exited if \p Reason is ExitFile.
- virtual void FileChanged(SourceLocation Loc, FileChangeReason Reason,
- SrcMgr::CharacteristicKind FileType,
- FileID PrevFID = FileID()) {
- }
-
- /// \brief Callback invoked whenever a source file is skipped as the result
- /// of header guard optimization.
- ///
- /// \param SkippedFile The file that is skipped instead of entering \#include
- ///
- /// \param FilenameTok The file name token in \#include "FileName" directive
- /// or macro expanded file name token from \#include MACRO(PARAMS) directive.
- /// Note that FilenameTok contains corresponding quotes/angles symbols.
- virtual void FileSkipped(const FileEntry &SkippedFile,
- const Token &FilenameTok,
- SrcMgr::CharacteristicKind FileType) {
- }
-
- /// \brief Callback invoked whenever an inclusion directive results in a
- /// file-not-found error.
- ///
- /// \param FileName The name of the file being included, as written in the
- /// source code.
- ///
- /// \param RecoveryPath If this client indicates that it can recover from
- /// this missing file, the client should set this as an additional header
- /// search patch.
- ///
- /// \returns true to indicate that the preprocessor should attempt to recover
- /// by adding \p RecoveryPath as a header search path.
- virtual bool FileNotFound(StringRef FileName,
- SmallVectorImpl<char> &RecoveryPath) {
- return false;
- }
-
- /// \brief Callback invoked whenever an inclusion directive of
- /// any kind (\c \#include, \c \#import, etc.) has been processed, regardless
- /// of whether the inclusion will actually result in an inclusion.
- ///
- /// \param HashLoc The location of the '#' that starts the inclusion
- /// directive.
- ///
- /// \param IncludeTok The token that indicates the kind of inclusion
- /// directive, e.g., 'include' or 'import'.
- ///
- /// \param FileName The name of the file being included, as written in the
- /// source code.
- ///
- /// \param IsAngled Whether the file name was enclosed in angle brackets;
- /// otherwise, it was enclosed in quotes.
- ///
- /// \param FilenameRange The character range of the quotes or angle brackets
- /// for the written file name.
- ///
- /// \param File The actual file that may be included by this inclusion
- /// directive.
- ///
- /// \param SearchPath Contains the search path which was used to find the file
- /// in the file system. If the file was found via an absolute include path,
- /// SearchPath will be empty. For framework includes, the SearchPath and
- /// RelativePath will be split up. For example, if an include of "Some/Some.h"
- /// is found via the framework path
- /// "path/to/Frameworks/Some.framework/Headers/Some.h", SearchPath will be
- /// "path/to/Frameworks/Some.framework/Headers" and RelativePath will be
- /// "Some.h".
- ///
- /// \param RelativePath The path relative to SearchPath, at which the include
- /// file was found. This is equal to FileName except for framework includes.
- ///
- /// \param Imported The module, whenever an inclusion directive was
- /// automatically turned into a module import or null otherwise.
- ///
- virtual void InclusionDirective(SourceLocation HashLoc,
- const Token &IncludeTok,
- StringRef FileName,
- bool IsAngled,
- CharSourceRange FilenameRange,
- const FileEntry *File,
- StringRef SearchPath,
- StringRef RelativePath,
- const Module *Imported) {
- }
-
- /// \brief Callback invoked whenever there was an explicit module-import
- /// syntax.
- ///
- /// \param ImportLoc The location of import directive token.
- ///
- /// \param Path The identifiers (and their locations) of the module
- /// "path", e.g., "std.vector" would be split into "std" and "vector".
- ///
- /// \param Imported The imported module; can be null if importing failed.
- ///
- virtual void moduleImport(SourceLocation ImportLoc,
- ModuleIdPath Path,
- const Module *Imported) {
- }
-
- /// \brief Callback invoked when the end of the main file is reached.
- ///
- /// No subsequent callbacks will be made.
- virtual void EndOfMainFile() {
- }
-
- /// \brief Callback invoked when a \#ident or \#sccs directive is read.
- /// \param Loc The location of the directive.
- /// \param str The text of the directive.
- ///
- virtual void Ident(SourceLocation Loc, StringRef str) {
- }
-
- /// \brief Callback invoked when start reading any pragma directive.
- virtual void PragmaDirective(SourceLocation Loc,
- PragmaIntroducerKind Introducer) {
- }
-
- /// \brief Callback invoked when a \#pragma comment directive is read.
- virtual void PragmaComment(SourceLocation Loc, const IdentifierInfo *Kind,
- StringRef Str) {
- }
-
- /// \brief Callback invoked when a \#pragma detect_mismatch directive is
- /// read.
- virtual void PragmaDetectMismatch(SourceLocation Loc, StringRef Name,
- StringRef Value) {
- }
-
- /// \brief Callback invoked when a \#pragma clang __debug directive is read.
- /// \param Loc The location of the debug directive.
- /// \param DebugType The identifier following __debug.
- virtual void PragmaDebug(SourceLocation Loc, StringRef DebugType) {
- }
-
- /// \brief Determines the kind of \#pragma invoking a call to PragmaMessage.
- enum PragmaMessageKind {
- /// \brief \#pragma message has been invoked.
- PMK_Message,
-
- /// \brief \#pragma GCC warning has been invoked.
- PMK_Warning,
-
- /// \brief \#pragma GCC error has been invoked.
- PMK_Error
- };
-
- /// \brief Callback invoked when a \#pragma message directive is read.
- /// \param Loc The location of the message directive.
- /// \param Namespace The namespace of the message directive.
- /// \param Kind The type of the message directive.
- /// \param Str The text of the message directive.
- virtual void PragmaMessage(SourceLocation Loc, StringRef Namespace,
- PragmaMessageKind Kind, StringRef Str) {
- }
-
- /// \brief Callback invoked when a \#pragma gcc diagnostic push directive
- /// is read.
- virtual void PragmaDiagnosticPush(SourceLocation Loc,
- StringRef Namespace) {
- }
-
- /// \brief Callback invoked when a \#pragma gcc diagnostic pop directive
- /// is read.
- virtual void PragmaDiagnosticPop(SourceLocation Loc,
- StringRef Namespace) {
- }
-
- /// \brief Callback invoked when a \#pragma gcc diagnostic directive is read.
- virtual void PragmaDiagnostic(SourceLocation Loc, StringRef Namespace,
- diag::Severity mapping, StringRef Str) {}
-
- /// \brief Called when an OpenCL extension is either disabled or
- /// enabled with a pragma.
- virtual void PragmaOpenCLExtension(SourceLocation NameLoc,
- const IdentifierInfo *Name,
- SourceLocation StateLoc, unsigned State) {
- }
-
- /// \brief Callback invoked when a \#pragma warning directive is read.
- virtual void PragmaWarning(SourceLocation Loc, StringRef WarningSpec,
- ArrayRef<int> Ids) {
- }
-
- /// \brief Callback invoked when a \#pragma warning(push) directive is read.
- virtual void PragmaWarningPush(SourceLocation Loc, int Level) {
- }
-
- /// \brief Callback invoked when a \#pragma warning(pop) directive is read.
- virtual void PragmaWarningPop(SourceLocation Loc) {
- }
-
- /// \brief Called by Preprocessor::HandleMacroExpandedIdentifier when a
- /// macro invocation is found.
- virtual void MacroExpands(const Token &MacroNameTok,
- const MacroDefinition &MD, SourceRange Range,
- const MacroArgs *Args) {}
-
- /// \brief Hook called whenever a macro definition is seen.
- virtual void MacroDefined(const Token &MacroNameTok,
- const MacroDirective *MD) {
- }
-
- /// \brief Hook called whenever a macro \#undef is seen.
- ///
- /// MD is released immediately following this callback.
- virtual void MacroUndefined(const Token &MacroNameTok,
- const MacroDefinition &MD) {
- }
-
- /// \brief Hook called whenever the 'defined' operator is seen.
- /// \param MD The MacroDirective if the name was a macro, null otherwise.
- virtual void Defined(const Token &MacroNameTok, const MacroDefinition &MD,
- SourceRange Range) {
- }
-
- /// \brief Hook called when a source range is skipped.
- /// \param Range The SourceRange that was skipped. The range begins at the
- /// \#if/\#else directive and ends after the \#endif/\#else directive.
- virtual void SourceRangeSkipped(SourceRange Range) {
- }
-
- enum ConditionValueKind {
- CVK_NotEvaluated, CVK_False, CVK_True
- };
-
- /// \brief Hook called whenever an \#if is seen.
- /// \param Loc the source location of the directive.
- /// \param ConditionRange The SourceRange of the expression being tested.
- /// \param ConditionValue The evaluated value of the condition.
- ///
- // FIXME: better to pass in a list (or tree!) of Tokens.
- virtual void If(SourceLocation Loc, SourceRange ConditionRange,
- ConditionValueKind ConditionValue) {
- }
-
- /// \brief Hook called whenever an \#elif is seen.
- /// \param Loc the source location of the directive.
- /// \param ConditionRange The SourceRange of the expression being tested.
- /// \param ConditionValue The evaluated value of the condition.
- /// \param IfLoc the source location of the \#if/\#ifdef/\#ifndef directive.
- // FIXME: better to pass in a list (or tree!) of Tokens.
- virtual void Elif(SourceLocation Loc, SourceRange ConditionRange,
- ConditionValueKind ConditionValue, SourceLocation IfLoc) {
- }
-
- /// \brief Hook called whenever an \#ifdef is seen.
- /// \param Loc the source location of the directive.
- /// \param MacroNameTok Information on the token being tested.
- /// \param MD The MacroDefinition if the name was a macro, null otherwise.
- virtual void Ifdef(SourceLocation Loc, const Token &MacroNameTok,
- const MacroDefinition &MD) {
- }
-
- /// \brief Hook called whenever an \#ifndef is seen.
- /// \param Loc the source location of the directive.
- /// \param MacroNameTok Information on the token being tested.
- /// \param MD The MacroDefiniton if the name was a macro, null otherwise.
- virtual void Ifndef(SourceLocation Loc, const Token &MacroNameTok,
- const MacroDefinition &MD) {
- }
-
- /// \brief Hook called whenever an \#else is seen.
- /// \param Loc the source location of the directive.
- /// \param IfLoc the source location of the \#if/\#ifdef/\#ifndef directive.
- virtual void Else(SourceLocation Loc, SourceLocation IfLoc) {
- }
-
- /// \brief Hook called whenever an \#endif is seen.
- /// \param Loc the source location of the directive.
- /// \param IfLoc the source location of the \#if/\#ifdef/\#ifndef directive.
- virtual void Endif(SourceLocation Loc, SourceLocation IfLoc) {
- }
-};
-
-/// \brief Simple wrapper class for chaining callbacks.
-class PPChainedCallbacks : public PPCallbacks {
- virtual void anchor();
- std::unique_ptr<PPCallbacks> First, Second;
-
-public:
- PPChainedCallbacks(std::unique_ptr<PPCallbacks> _First,
- std::unique_ptr<PPCallbacks> _Second)
- : First(std::move(_First)), Second(std::move(_Second)) {}
-
- void FileChanged(SourceLocation Loc, FileChangeReason Reason,
- SrcMgr::CharacteristicKind FileType,
- FileID PrevFID) override {
- First->FileChanged(Loc, Reason, FileType, PrevFID);
- Second->FileChanged(Loc, Reason, FileType, PrevFID);
- }
-
- void FileSkipped(const FileEntry &SkippedFile,
- const Token &FilenameTok,
- SrcMgr::CharacteristicKind FileType) override {
- First->FileSkipped(SkippedFile, FilenameTok, FileType);
- Second->FileSkipped(SkippedFile, FilenameTok, FileType);
- }
-
- bool FileNotFound(StringRef FileName,
- SmallVectorImpl<char> &RecoveryPath) override {
- return First->FileNotFound(FileName, RecoveryPath) ||
- Second->FileNotFound(FileName, RecoveryPath);
- }
-
- void InclusionDirective(SourceLocation HashLoc, const Token &IncludeTok,
- StringRef FileName, bool IsAngled,
- CharSourceRange FilenameRange, const FileEntry *File,
- StringRef SearchPath, StringRef RelativePath,
- const Module *Imported) override {
- First->InclusionDirective(HashLoc, IncludeTok, FileName, IsAngled,
- FilenameRange, File, SearchPath, RelativePath,
- Imported);
- Second->InclusionDirective(HashLoc, IncludeTok, FileName, IsAngled,
- FilenameRange, File, SearchPath, RelativePath,
- Imported);
- }
-
- void moduleImport(SourceLocation ImportLoc, ModuleIdPath Path,
- const Module *Imported) override {
- First->moduleImport(ImportLoc, Path, Imported);
- Second->moduleImport(ImportLoc, Path, Imported);
- }
-
- void EndOfMainFile() override {
- First->EndOfMainFile();
- Second->EndOfMainFile();
- }
-
- void Ident(SourceLocation Loc, StringRef str) override {
- First->Ident(Loc, str);
- Second->Ident(Loc, str);
- }
-
- void PragmaComment(SourceLocation Loc, const IdentifierInfo *Kind,
- StringRef Str) override {
- First->PragmaComment(Loc, Kind, Str);
- Second->PragmaComment(Loc, Kind, Str);
- }
-
- void PragmaDetectMismatch(SourceLocation Loc, StringRef Name,
- StringRef Value) override {
- First->PragmaDetectMismatch(Loc, Name, Value);
- Second->PragmaDetectMismatch(Loc, Name, Value);
- }
-
- void PragmaMessage(SourceLocation Loc, StringRef Namespace,
- PragmaMessageKind Kind, StringRef Str) override {
- First->PragmaMessage(Loc, Namespace, Kind, Str);
- Second->PragmaMessage(Loc, Namespace, Kind, Str);
- }
-
- void PragmaDiagnosticPush(SourceLocation Loc, StringRef Namespace) override {
- First->PragmaDiagnosticPush(Loc, Namespace);
- Second->PragmaDiagnosticPush(Loc, Namespace);
- }
-
- void PragmaDiagnosticPop(SourceLocation Loc, StringRef Namespace) override {
- First->PragmaDiagnosticPop(Loc, Namespace);
- Second->PragmaDiagnosticPop(Loc, Namespace);
- }
-
- void PragmaDiagnostic(SourceLocation Loc, StringRef Namespace,
- diag::Severity mapping, StringRef Str) override {
- First->PragmaDiagnostic(Loc, Namespace, mapping, Str);
- Second->PragmaDiagnostic(Loc, Namespace, mapping, Str);
- }
-
- void PragmaOpenCLExtension(SourceLocation NameLoc, const IdentifierInfo *Name,
- SourceLocation StateLoc, unsigned State) override {
- First->PragmaOpenCLExtension(NameLoc, Name, StateLoc, State);
- Second->PragmaOpenCLExtension(NameLoc, Name, StateLoc, State);
- }
-
- void PragmaWarning(SourceLocation Loc, StringRef WarningSpec,
- ArrayRef<int> Ids) override {
- First->PragmaWarning(Loc, WarningSpec, Ids);
- Second->PragmaWarning(Loc, WarningSpec, Ids);
- }
-
- void PragmaWarningPush(SourceLocation Loc, int Level) override {
- First->PragmaWarningPush(Loc, Level);
- Second->PragmaWarningPush(Loc, Level);
- }
-
- void PragmaWarningPop(SourceLocation Loc) override {
- First->PragmaWarningPop(Loc);
- Second->PragmaWarningPop(Loc);
- }
-
- void MacroExpands(const Token &MacroNameTok, const MacroDefinition &MD,
- SourceRange Range, const MacroArgs *Args) override {
- First->MacroExpands(MacroNameTok, MD, Range, Args);
- Second->MacroExpands(MacroNameTok, MD, Range, Args);
- }
-
- void MacroDefined(const Token &MacroNameTok, const MacroDirective *MD) override {
- First->MacroDefined(MacroNameTok, MD);
- Second->MacroDefined(MacroNameTok, MD);
- }
-
- void MacroUndefined(const Token &MacroNameTok,
- const MacroDefinition &MD) override {
- First->MacroUndefined(MacroNameTok, MD);
- Second->MacroUndefined(MacroNameTok, MD);
- }
-
- void Defined(const Token &MacroNameTok, const MacroDefinition &MD,
- SourceRange Range) override {
- First->Defined(MacroNameTok, MD, Range);
- Second->Defined(MacroNameTok, MD, Range);
- }
-
- void SourceRangeSkipped(SourceRange Range) override {
- First->SourceRangeSkipped(Range);
- Second->SourceRangeSkipped(Range);
- }
-
- /// \brief Hook called whenever an \#if is seen.
- void If(SourceLocation Loc, SourceRange ConditionRange,
- ConditionValueKind ConditionValue) override {
- First->If(Loc, ConditionRange, ConditionValue);
- Second->If(Loc, ConditionRange, ConditionValue);
- }
-
- /// \brief Hook called whenever an \#elif is seen.
- void Elif(SourceLocation Loc, SourceRange ConditionRange,
- ConditionValueKind ConditionValue, SourceLocation IfLoc) override {
- First->Elif(Loc, ConditionRange, ConditionValue, IfLoc);
- Second->Elif(Loc, ConditionRange, ConditionValue, IfLoc);
- }
-
- /// \brief Hook called whenever an \#ifdef is seen.
- void Ifdef(SourceLocation Loc, const Token &MacroNameTok,
- const MacroDefinition &MD) override {
- First->Ifdef(Loc, MacroNameTok, MD);
- Second->Ifdef(Loc, MacroNameTok, MD);
- }
-
- /// \brief Hook called whenever an \#ifndef is seen.
- void Ifndef(SourceLocation Loc, const Token &MacroNameTok,
- const MacroDefinition &MD) override {
- First->Ifndef(Loc, MacroNameTok, MD);
- Second->Ifndef(Loc, MacroNameTok, MD);
- }
-
- /// \brief Hook called whenever an \#else is seen.
- void Else(SourceLocation Loc, SourceLocation IfLoc) override {
- First->Else(Loc, IfLoc);
- Second->Else(Loc, IfLoc);
- }
-
- /// \brief Hook called whenever an \#endif is seen.
- void Endif(SourceLocation Loc, SourceLocation IfLoc) override {
- First->Endif(Loc, IfLoc);
- Second->Endif(Loc, IfLoc);
- }
-};
-
-} // end namespace clang
-
-#endif
OpenPOWER on IntegriCloud