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)
override;
106 void moduleImport(clang::SourceLocation ImportLoc, clang::ModuleIdPath
Path,
107 const clang::Module *Imported)
override;
108 void EndOfMainFile()
override;
109 void Ident(clang::SourceLocation Loc, llvm::StringRef str)
override;
110 void PragmaDirective(clang::SourceLocation Loc,
111 clang::PragmaIntroducerKind Introducer)
override;
112 void PragmaComment(clang::SourceLocation Loc,
113 const clang::IdentifierInfo *
Kind,
114 llvm::StringRef Str)
override;
115 void PragmaDetectMismatch(clang::SourceLocation Loc, llvm::StringRef
Name,
116 llvm::StringRef
Value)
override;
117 void PragmaDebug(clang::SourceLocation Loc,
118 llvm::StringRef DebugType)
override;
119 void PragmaMessage(clang::SourceLocation Loc, llvm::StringRef Namespace,
120 clang::PPCallbacks::PragmaMessageKind Kind,
121 llvm::StringRef Str)
override;
122 void PragmaDiagnosticPush(clang::SourceLocation Loc,
123 llvm::StringRef Namespace)
override;
124 void PragmaDiagnosticPop(clang::SourceLocation Loc,
125 llvm::StringRef Namespace)
override;
126 void PragmaDiagnostic(clang::SourceLocation Loc, llvm::StringRef Namespace,
127 clang::diag::Severity mapping,
128 llvm::StringRef Str)
override;
129 void PragmaOpenCLExtension(clang::SourceLocation NameLoc,
130 const clang::IdentifierInfo *Name,
131 clang::SourceLocation StateLoc,
132 unsigned State)
override;
133 void PragmaWarning(clang::SourceLocation Loc, llvm::StringRef WarningSpec,
134 llvm::ArrayRef<int> Ids)
override;
135 void PragmaWarningPush(clang::SourceLocation Loc,
int Level)
override;
136 void PragmaWarningPop(clang::SourceLocation Loc)
override;
137 void MacroExpands(
const clang::Token &MacroNameTok,
138 const clang::MacroDefinition &MD, clang::SourceRange
Range,
139 const clang::MacroArgs *Args)
override;
140 void MacroDefined(
const clang::Token &MacroNameTok,
141 const clang::MacroDirective *MD)
override;
142 void MacroUndefined(
const clang::Token &MacroNameTok,
143 const clang::MacroDefinition &MD,
144 const clang::MacroDirective *Undef)
override;
145 void Defined(
const clang::Token &MacroNameTok,
146 const clang::MacroDefinition &MD,
147 clang::SourceRange Range)
override;
148 void SourceRangeSkipped(clang::SourceRange Range,
149 clang::SourceLocation EndifLoc)
override;
150 void If(clang::SourceLocation Loc, clang::SourceRange ConditionRange,
152 void Elif(clang::SourceLocation Loc, clang::SourceRange ConditionRange,
153 ConditionValueKind ConditionValue, clang::SourceLocation IfLoc)
override;
154 void Ifdef(clang::SourceLocation Loc,
const clang::Token &MacroNameTok,
155 const clang::MacroDefinition &MD)
override;
156 void Ifndef(clang::SourceLocation Loc,
const clang::Token &MacroNameTok,
157 const clang::MacroDefinition &MD)
override;
158 void Else(clang::SourceLocation Loc,
159 clang::SourceLocation IfLoc)
override;
160 void Endif(clang::SourceLocation Loc,
161 clang::SourceLocation IfLoc)
override;
166 void beginCallback(
const char *Name);
169 void append(
const char *Str);
172 void appendArgument(
const char *Name,
bool Value);
175 void appendArgument(
const char *Name,
int Value);
178 void appendArgument(
const char *Name,
const char *Value);
181 void appendArgument(
const char *Name, llvm::StringRef Value);
184 void appendArgument(
const char *Name,
const std::string &Value);
187 void appendArgument(
const char *Name,
const clang::Token &Value);
190 void appendArgument(
const char *Name,
int Value,
const char *
const Strings[]);
193 void appendArgument(
const char *Name, clang::FileID Value);
196 void appendArgument(
const char *Name,
const clang::FileEntry *Value);
199 void appendArgument(
const char *Name, clang::SourceLocation Value);
202 void appendArgument(
const char *Name, clang::SourceRange Value);
205 void appendArgument(
const char *Name, clang::CharSourceRange Value);
208 void appendArgument(
const char *Name, clang::ModuleIdPath Value);
211 void appendArgument(
const char *Name,
const clang::IdentifierInfo *Value);
214 void appendArgument(
const char *Name,
const clang::MacroDirective *Value);
217 void appendArgument(
const char *Name,
const clang::MacroDefinition &Value);
220 void appendArgument(
const char *Name,
const clang::MacroArgs *Value);
223 void appendArgument(
const char *Name,
const clang::Module *Value);
226 void appendQuotedArgument(
const char *Name,
const std::string &Value);
229 void appendFilePathArgument(
const char *Name, llvm::StringRef Value);
245 clang::Preprocessor &
PP;
248 #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
CharSourceRange Range
SourceRange for the file name.
bool DisableTrace
Inhibit trace while this is set.