aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-03-12 17:31:43 +0000
committerChris Lattner <sabre@nondot.org>2009-03-12 17:31:43 +0000
commitba9eee326434ba62b180271d3cc2999d94ee0de4 (patch)
tree69a32d9be0aecf261248104ed884c7c5da66ec0c
parenta0e500db61f5fcf3ff6de6af1494f0cea9f6f8db (diff)
add a callback for macro expansion, based on a patch by Paolo Bolzoni!
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@66799 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/clang/Lex/PPCallbacks.h5
-rw-r--r--lib/Lex/PPMacroExpansion.cpp2
2 files changed, 7 insertions, 0 deletions
diff --git a/include/clang/Lex/PPCallbacks.h b/include/clang/Lex/PPCallbacks.h
index bf03bb81f2..cd7c5e4215 100644
--- a/include/clang/Lex/PPCallbacks.h
+++ b/include/clang/Lex/PPCallbacks.h
@@ -21,6 +21,7 @@
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
@@ -54,6 +55,10 @@ public:
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
diff --git a/lib/Lex/PPMacroExpansion.cpp b/lib/Lex/PPMacroExpansion.cpp
index 84056c3f4b..712918b7c3 100644
--- a/lib/Lex/PPMacroExpansion.cpp
+++ b/lib/Lex/PPMacroExpansion.cpp
@@ -150,6 +150,8 @@ bool Preprocessor::isNextPPTokenLParen() {
/// 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.