diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-09-27 17:32:05 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-09-27 17:32:05 +0000 |
commit | 18bcfd5595cd7b4c0c627d762f236665e45bb68d (patch) | |
tree | 8c4749a949bec4be9428a14c73ec419042979727 /clang/lib/Lex/PPDirectives.cpp | |
parent | e241bad92bc51f30aa3180d2a80d784d9adac302 (diff) | |
download | bcm5719-llvm-18bcfd5595cd7b4c0c627d762f236665e45bb68d.tar.gz bcm5719-llvm-18bcfd5595cd7b4c0c627d762f236665e45bb68d.zip |
Introduce a callback to PPCallbacks for lines skipped by the preprocessor.
Patch by Jason Haslam!
llvm-svn: 140612
Diffstat (limited to 'clang/lib/Lex/PPDirectives.cpp')
-rw-r--r-- | clang/lib/Lex/PPDirectives.cpp | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/clang/lib/Lex/PPDirectives.cpp b/clang/lib/Lex/PPDirectives.cpp index b242c8ba7eb..fc147e420e1 100644 --- a/clang/lib/Lex/PPDirectives.cpp +++ b/clang/lib/Lex/PPDirectives.cpp @@ -193,7 +193,8 @@ void Preprocessor::CheckEndOfDirective(const char *DirType, bool EnableMacros) { /// the first valid token. void Preprocessor::SkipExcludedConditionalBlock(SourceLocation IfTokenLoc, bool FoundNonSkipPortion, - bool FoundElse) { + bool FoundElse, + SourceLocation ElseLoc) { ++NumSkipped; assert(CurTokenLexer == 0 && CurPPLexer && "Lexing a macro, not a file?"); @@ -389,6 +390,11 @@ void Preprocessor::SkipExcludedConditionalBlock(SourceLocation IfTokenLoc, // of the file, just stop skipping and return to lexing whatever came after // the #if block. CurPPLexer->LexingRawMode = false; + + if (Callbacks) { + SourceLocation BeginLoc = ElseLoc.isValid() ? ElseLoc : IfTokenLoc; + Callbacks->SourceRangeSkipped(SourceRange(BeginLoc, Tok.getLocation())); + } } void Preprocessor::PTHSkipExcludedConditionalBlock() { @@ -1817,7 +1823,7 @@ void Preprocessor::HandleElseDirective(Token &Result) { // Finally, skip the rest of the contents of this block. SkipExcludedConditionalBlock(CI.IfLoc, /*Foundnonskip*/true, - /*FoundElse*/true); + /*FoundElse*/true, Result.getLocation()); if (Callbacks) Callbacks->Else(); @@ -1850,7 +1856,8 @@ void Preprocessor::HandleElifDirective(Token &ElifToken) { // Finally, skip the rest of the contents of this block. SkipExcludedConditionalBlock(CI.IfLoc, /*Foundnonskip*/true, - /*FoundElse*/CI.FoundElse); + /*FoundElse*/CI.FoundElse, + ElifToken.getLocation()); if (Callbacks) Callbacks->Elif(SourceRange(ConditionalBegin, ConditionalEnd)); |