diff options
| author | Chris Lattner <sabre@nondot.org> | 2009-03-12 17:31:43 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2009-03-12 17:31:43 +0000 |
| commit | cf35ce9d0de3d3d6221dd6b9b0f7865bc307021a (patch) | |
| tree | ec51c9149ece246e568dd292a9972e03d407a840 | |
| parent | b0a553b9259768b13eeea60f57489d992d259f21 (diff) | |
| download | bcm5719-llvm-cf35ce9d0de3d3d6221dd6b9b0f7865bc307021a.tar.gz bcm5719-llvm-cf35ce9d0de3d3d6221dd6b9b0f7865bc307021a.zip | |
add a callback for macro expansion, based on a patch by Paolo Bolzoni!
llvm-svn: 66799
| -rw-r--r-- | clang/include/clang/Lex/PPCallbacks.h | 5 | ||||
| -rw-r--r-- | clang/lib/Lex/PPMacroExpansion.cpp | 2 |
2 files changed, 7 insertions, 0 deletions
diff --git a/clang/include/clang/Lex/PPCallbacks.h b/clang/include/clang/Lex/PPCallbacks.h index bf03bb81f22..cd7c5e42156 100644 --- a/clang/include/clang/Lex/PPCallbacks.h +++ b/clang/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/clang/lib/Lex/PPMacroExpansion.cpp b/clang/lib/Lex/PPMacroExpansion.cpp index 84056c3f4b5..712918b7c3b 100644 --- a/clang/lib/Lex/PPMacroExpansion.cpp +++ b/clang/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. |

