diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2012-12-08 02:21:11 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2012-12-08 02:21:11 +0000 |
commit | 222a7bbf0ded69b369d05dbeeceef0d86cbb0f37 (patch) | |
tree | 73f1dc8cb777595293075037865d46523d759c9b /clang/lib/Lex/PPExpressions.cpp | |
parent | 189aba9305ee27c376b2474a3379416569a6b350 (diff) | |
download | llvm-222a7bbf0ded69b369d05dbeeceef0d86cbb0f37.zip llvm-222a7bbf0ded69b369d05dbeeceef0d86cbb0f37.tar.gz llvm-222a7bbf0ded69b369d05dbeeceef0d86cbb0f37.tar.bz2 |
[Preprocessor] Enhance Ifdef/Ifndef/Defined preprocessor callbacks to also pass
a MacroInfo object if the identifier was a macro name.
llvm-svn: 169665
Diffstat (limited to 'clang/lib/Lex/PPExpressions.cpp')
-rw-r--r-- | clang/lib/Lex/PPExpressions.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/clang/lib/Lex/PPExpressions.cpp b/clang/lib/Lex/PPExpressions.cpp index 868f2dd..9b33c91 100644 --- a/clang/lib/Lex/PPExpressions.cpp +++ b/clang/lib/Lex/PPExpressions.cpp @@ -111,15 +111,21 @@ static bool EvaluateDefined(PPValue &Result, Token &PeekTok, DefinedTracker &DT, Result.Val = II->hasMacroDefinition(); Result.Val.setIsUnsigned(false); // Result is signed intmax_t. + MacroInfo *Macro = 0; // If there is a macro, mark it used. if (Result.Val != 0 && ValueLive) { - MacroInfo *Macro = PP.getMacroInfo(II); + Macro = PP.getMacroInfo(II); PP.markMacroAsUsed(Macro); } // Invoke the 'defined' callback. - if (PPCallbacks *Callbacks = PP.getPPCallbacks()) - Callbacks->Defined(PeekTok); + if (PPCallbacks *Callbacks = PP.getPPCallbacks()) { + MacroInfo *MI = Macro; + // Pass the MacroInfo for the macro name even if the value is dead. + if (!MI && Result.Val != 0) + MI = PP.getMacroInfo(II); + Callbacks->Defined(PeekTok, MI); + } // If we are in parens, ensure we have a trailing ). if (LParenLoc.isValid()) { |