diff options
author | Chris Lattner <sabre@nondot.org> | 2009-03-27 17:13:49 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-03-27 17:13:49 +0000 |
commit | 16629386f1326608dc1ff9f4ff785fb3fae0bfb3 (patch) | |
tree | df6dd406f9d745ac524b857208c41b0348b50344 /lib/Lex/PPDirectives.cpp | |
parent | 9b16da332bfad3a6e955f5874a1cc42348dec554 (diff) |
push line markers through -E mode.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67854 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Lex/PPDirectives.cpp')
-rw-r--r-- | lib/Lex/PPDirectives.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/lib/Lex/PPDirectives.cpp b/lib/Lex/PPDirectives.cpp index 5797b12ebc..c5dc7abd08 100644 --- a/lib/Lex/PPDirectives.cpp +++ b/lib/Lex/PPDirectives.cpp @@ -692,6 +692,10 @@ void Preprocessor::HandleLineDirective(Token &Tok) { } SourceMgr.AddLineNote(DigitTok.getLocation(), LineNo, FilenameID); + + if (Callbacks) + Callbacks->FileChanged(DigitTok.getLocation(), PPCallbacks::RenameFile, + SrcMgr::C_User); } /// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line @@ -823,6 +827,24 @@ void Preprocessor::HandleDigitDirective(Token &DigitTok) { SourceMgr.AddLineNote(DigitTok.getLocation(), LineNo, FilenameID, IsFileEntry, IsFileExit, IsSystemHeader, IsExternCHeader); + + // If the preprocessor has callbacks installed, notify them of the #line + // change. This is used so that the line marker comes out in -E mode for + // example. + if (Callbacks) { + PPCallbacks::FileChangeReason Reason = PPCallbacks::RenameFile; + if (IsFileEntry) + Reason = PPCallbacks::EnterFile; + else if (IsFileExit) + Reason = PPCallbacks::ExitFile; + SrcMgr::CharacteristicKind FileKind = SrcMgr::C_User; + if (IsExternCHeader) + FileKind = SrcMgr::C_ExternCSystem; + else if (IsSystemHeader) + FileKind = SrcMgr::C_System; + + Callbacks->FileChanged(DigitTok.getLocation(), Reason, FileKind); + } } |