22 #ifndef PPTRACE_PPCALLBACKSTRACKER_H 23 #define PPTRACE_PPCALLBACKSTRACKER_H 25 #include "clang/Lex/PPCallbacks.h" 26 #include "clang/Lex/Preprocessor.h" 27 #include "clang/Basic/SourceManager.h" 28 #include "llvm/ADT/ArrayRef.h" 29 #include "llvm/ADT/SmallSet.h" 30 #include "llvm/ADT/StringRef.h" 39 : Name(Name), Value(Value) {}
82 std::vector<CallbackCall> &CallbackCalls,
83 clang::Preprocessor &PP);
89 void FileChanged(clang::SourceLocation
Loc,
90 clang::PPCallbacks::FileChangeReason Reason,
91 clang::SrcMgr::CharacteristicKind FileType,
92 clang::FileID PrevFID = clang::FileID())
override;
93 void FileSkipped(
const clang::FileEntry &SkippedFile,
94 const clang::Token &FilenameTok,
95 clang::SrcMgr::CharacteristicKind FileType)
override;
96 bool FileNotFound(llvm::StringRef
FileName,
97 llvm::SmallVectorImpl<char> &RecoveryPath)
override;
98 void InclusionDirective(clang::SourceLocation HashLoc,
99 const clang::Token &IncludeTok,
100 llvm::StringRef FileName,
bool IsAngled,
101 clang::CharSourceRange FilenameRange,
102 const clang::FileEntry *
File,
103 llvm::StringRef SearchPath,
104 llvm::StringRef RelativePath,
105 const clang::Module *Imported,
106 clang::SrcMgr::CharacteristicKind FileType)
override;
107 void moduleImport(clang::SourceLocation ImportLoc, clang::ModuleIdPath
Path,
108 const clang::Module *Imported)
override;
109 void EndOfMainFile()
override;
110 void Ident(clang::SourceLocation Loc, llvm::StringRef str)
override;
111 void PragmaDirective(clang::SourceLocation Loc,
112 clang::PragmaIntroducerKind Introducer)
override;
113 void PragmaComment(clang::SourceLocation Loc,
114 const clang::IdentifierInfo *
Kind,
115 llvm::StringRef Str)
override;
116 void PragmaDetectMismatch(clang::SourceLocation Loc, llvm::StringRef
Name,
117 llvm::StringRef
Value)
override;
118 void PragmaDebug(clang::SourceLocation Loc,
119 llvm::StringRef DebugType)
override;
120 void PragmaMessage(clang::SourceLocation Loc, llvm::StringRef Namespace,
121 clang::PPCallbacks::PragmaMessageKind Kind,
122 llvm::StringRef Str)
override;
123 void PragmaDiagnosticPush(clang::SourceLocation Loc,
124 llvm::StringRef Namespace)
override;
125 void PragmaDiagnosticPop(clang::SourceLocation Loc,
126 llvm::StringRef Namespace)
override;
127 void PragmaDiagnostic(clang::SourceLocation Loc, llvm::StringRef Namespace,
128 clang::diag::Severity mapping,
129 llvm::StringRef Str)
override;
130 void PragmaOpenCLExtension(clang::SourceLocation NameLoc,
131 const clang::IdentifierInfo *Name,
132 clang::SourceLocation StateLoc,
133 unsigned State)
override;
134 void PragmaWarning(clang::SourceLocation Loc, llvm::StringRef WarningSpec,
135 llvm::ArrayRef<int> Ids)
override;
136 void PragmaWarningPush(clang::SourceLocation Loc,
int Level)
override;
137 void PragmaWarningPop(clang::SourceLocation Loc)
override;
138 void MacroExpands(
const clang::Token &MacroNameTok,
139 const clang::MacroDefinition &
MD, clang::SourceRange
Range,
140 const clang::MacroArgs *Args)
override;
141 void MacroDefined(
const clang::Token &MacroNameTok,
142 const clang::MacroDirective *MD)
override;
143 void MacroUndefined(
const clang::Token &MacroNameTok,
144 const clang::MacroDefinition &MD,
145 const clang::MacroDirective *Undef)
override;
146 void Defined(
const clang::Token &MacroNameTok,
147 const clang::MacroDefinition &MD,
148 clang::SourceRange Range)
override;
149 void SourceRangeSkipped(clang::SourceRange Range,
150 clang::SourceLocation EndifLoc)
override;
151 void If(clang::SourceLocation Loc, clang::SourceRange ConditionRange,
153 void Elif(clang::SourceLocation Loc, clang::SourceRange ConditionRange,
154 ConditionValueKind ConditionValue, clang::SourceLocation IfLoc)
override;
155 void Ifdef(clang::SourceLocation Loc,
const clang::Token &MacroNameTok,
156 const clang::MacroDefinition &MD)
override;
157 void Ifndef(clang::SourceLocation Loc,
const clang::Token &MacroNameTok,
158 const clang::MacroDefinition &MD)
override;
159 void Else(clang::SourceLocation Loc,
160 clang::SourceLocation IfLoc)
override;
161 void Endif(clang::SourceLocation Loc,
162 clang::SourceLocation IfLoc)
override;
167 void beginCallback(
const char *Name);
170 void append(
const char *Str);
173 void appendArgument(
const char *Name,
bool Value);
176 void appendArgument(
const char *Name,
int Value);
179 void appendArgument(
const char *Name,
const char *Value);
182 void appendArgument(
const char *Name, llvm::StringRef Value);
185 void appendArgument(
const char *Name,
const std::string &Value);
188 void appendArgument(
const char *Name,
const clang::Token &Value);
191 void appendArgument(
const char *Name,
int Value,
const char *
const Strings[]);
194 void appendArgument(
const char *Name, clang::FileID Value);
197 void appendArgument(
const char *Name,
const clang::FileEntry *Value);
200 void appendArgument(
const char *Name, clang::SourceLocation Value);
203 void appendArgument(
const char *Name, clang::SourceRange Value);
206 void appendArgument(
const char *Name, clang::CharSourceRange Value);
209 void appendArgument(
const char *Name, clang::ModuleIdPath Value);
212 void appendArgument(
const char *Name,
const clang::IdentifierInfo *Value);
215 void appendArgument(
const char *Name,
const clang::MacroDirective *Value);
218 void appendArgument(
const char *Name,
const clang::MacroDefinition &Value);
221 void appendArgument(
const char *Name,
const clang::MacroArgs *Value);
224 void appendArgument(
const char *Name,
const clang::Module *Value);
227 void appendQuotedArgument(
const char *Name,
const std::string &Value);
230 void appendFilePathArgument(
const char *Name, llvm::StringRef Value);
246 clang::Preprocessor &
PP;
249 #endif // PPTRACE_PPCALLBACKSTRACKER_H SourceLocation Loc
'#' location in the include directive
This class represents one callback function argument by name and value.
static std::string getSourceString(clang::Preprocessor &PP, clang::SourceRange Range)
std::vector< Argument > Arguments
CallbackCall(llvm::StringRef Name)
This class overrides the PPCallbacks class for tracking preprocessor activity by means of its callbac...
std::vector< CallbackCall > & CallbackCalls
Callback trace information.
std::vector< HeaderHandle > Path
llvm::SmallSet< std::string, 4 > & Ignore
Names of callbacks to ignore.
bool IsAngled
true if this was an include with angle brackets
This class represents one callback call by name and an array of arguments.
Argument(llvm::StringRef Name, llvm::StringRef Value)
clang::PPCallbacks::ConditionValueKind ConditionValue
std::vector< llvm::StringRef > Strings
static GeneratorRegistry::Add< MDGenerator > MD(MDGenerator::Format, "Generator for MD output.")
CharSourceRange Range
SourceRange for the file name.
bool DisableTrace
Inhibit trace while this is set.