namespace clang {
class SourceLocation;
class IdentifierInfo;
+ class MacroInfo;
/// PPCallbacks - This interface provides a way to observe the actions of the
/// preprocessor as it does its thing. Clients can define their hooks here to
const std::string &Str) {
}
+ /// MacroExpands - This is called Preprocessor::HandleMacroExpandedIdentifier
+ /// when a macro invocation is found.
+ virtual void MacroExpands(const Token &Id, const MacroInfo* MI) {
+ }
};
} // end namespace clang
/// expanded as a macro, handle it and return the next token as 'Identifier'.
bool Preprocessor::HandleMacroExpandedIdentifier(Token &Identifier,
MacroInfo *MI) {
+ if (Callbacks) Callbacks->MacroExpands(Identifier, MI);
+
// If this is a macro exapnsion in the "#if !defined(x)" line for the file,
// then the macro could expand to different things in other contexts, we need
// to disable the optimization in this case.