diff options
Diffstat (limited to 'lib/Lex/MacroInfo.cpp')
-rw-r--r-- | lib/Lex/MacroInfo.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/lib/Lex/MacroInfo.cpp b/lib/Lex/MacroInfo.cpp index 7a4964f7d2..ffe31f24d3 100644 --- a/lib/Lex/MacroInfo.cpp +++ b/lib/Lex/MacroInfo.cpp @@ -58,6 +58,18 @@ MacroInfo::MacroInfo(const MacroInfo &MI, llvm::BumpPtrAllocator &PPAllocator) setArgumentList(MI.ArgumentList, MI.NumArguments, PPAllocator); } +const MacroInfo *MacroInfo::findDefinitionAtLoc(SourceLocation L, + SourceManager &SM) const { + assert(L.isValid() && "SourceLocation is invalid."); + for (const MacroInfo *MI = this; MI; MI = MI->PreviousDefinition) { + if (MI->Location.isInvalid() || // For macros defined on the command line. + SM.isBeforeInTranslationUnit(MI->Location, L)) + return (MI->UndefLocation.isInvalid() || + SM.isBeforeInTranslationUnit(L, MI->UndefLocation)) ? MI : NULL; + } + return NULL; +} + unsigned MacroInfo::getDefinitionLengthSlow(SourceManager &SM) const { assert(!IsDefinitionLengthCached); IsDefinitionLengthCached = true; |