diff options
author | Ted Kremenek <kremenek@apple.com> | 2008-11-19 22:21:33 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2008-11-19 22:21:33 +0000 |
commit | 17ff58a63197b398ae52697b088dc0fb8b255519 (patch) | |
tree | 3ec5398531f63a338509278b9d8ce6861047a0b0 | |
parent | 41938c8493b4380df738263166b746eacb33c309 (diff) |
When using a PTHLexer, use DiscardToEndOfLine() instead of ReadToEndOfLine().
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59668 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/clang/Lex/PTHLexer.h | 4 | ||||
-rw-r--r-- | lib/Lex/PPDirectives.cpp | 13 | ||||
-rw-r--r-- | lib/Lex/PPMacroExpansion.cpp | 2 | ||||
-rw-r--r-- | lib/Lex/PTHLexer.cpp | 7 | ||||
-rw-r--r-- | lib/Lex/Pragma.cpp | 5 |
5 files changed, 24 insertions, 7 deletions
diff --git a/include/clang/Lex/PTHLexer.h b/include/clang/Lex/PTHLexer.h index 2985b24cb5..bdaba760cf 100644 --- a/include/clang/Lex/PTHLexer.h +++ b/include/clang/Lex/PTHLexer.h @@ -56,6 +56,10 @@ public: /// the virtual location encodes where we should *claim* the characters came /// from. Currently this is only used by _Pragma handling. SourceLocation getFileLoc() const { return FileLoc; } + + /// ReadToEndOfLine - Read the rest of the current preprocessor line as an + /// uninterpreted string. This switches the lexer out of directive mode. + void DiscardToEndOfLine(); }; } // end namespace clang diff --git a/lib/Lex/PPDirectives.cpp b/lib/Lex/PPDirectives.cpp index a1216b15bc..68f4957499 100644 --- a/lib/Lex/PPDirectives.cpp +++ b/lib/Lex/PPDirectives.cpp @@ -473,10 +473,15 @@ void Preprocessor::HandleUserDiagnosticDirective(Token &Tok, // tokens. For example, this is allowed: "#warning ` 'foo". GCC does // collapse multiple consequtive white space between tokens, but this isn't // specified by the standard. - std::string Message = CurLexer->ReadToEndOfLine(); - - unsigned DiagID = isWarning ? diag::pp_hash_warning : diag::err_pp_hash_error; - Diag(Tok, DiagID) << Message; + + if (CurLexer) { + std::string Message = CurLexer->ReadToEndOfLine(); + unsigned DiagID = isWarning ? diag::pp_hash_warning : diag::err_pp_hash_error; + Diag(Tok, DiagID) << Message; + } + else { + CurPTHLexer->DiscardToEndOfLine(); + } } /// HandleIdentSCCSDirective - Handle a #ident/#sccs directive. diff --git a/lib/Lex/PPMacroExpansion.cpp b/lib/Lex/PPMacroExpansion.cpp index 1d4d85a897..abb21cb474 100644 --- a/lib/Lex/PPMacroExpansion.cpp +++ b/lib/Lex/PPMacroExpansion.cpp @@ -111,7 +111,7 @@ bool Preprocessor::isNextPPTokenLParen() { // We have run off the end. If it's a source file we don't // examine enclosing ones (C99 5.1.1.2p4). Otherwise walk up the // macro stack. - if (CurLexer) + if (CurPPLexer) return false; for (unsigned i = IncludeMacroStack.size(); i != 0; --i) { IncludeStackInfo &Entry = IncludeMacroStack[i-1]; diff --git a/lib/Lex/PTHLexer.cpp b/lib/Lex/PTHLexer.cpp index d22285cae5..15d5603969 100644 --- a/lib/Lex/PTHLexer.cpp +++ b/lib/Lex/PTHLexer.cpp @@ -76,3 +76,10 @@ void PTHLexer::setEOF(Token& Tok) { Tok = Tokens[NumTokens]; // NumTokens is already adjusted, so this isn't // an overflow. } + +void PTHLexer::DiscardToEndOfLine() { + assert(ParsingPreprocessorDirective && ParsingFilename == false && + "Must be in a preprocessing directive!"); + + assert (0 && "Not implemented."); +} diff --git a/lib/Lex/Pragma.cpp b/lib/Lex/Pragma.cpp index d4c5c6b835..0e0841da9a 100644 --- a/lib/Lex/Pragma.cpp +++ b/lib/Lex/Pragma.cpp @@ -193,8 +193,9 @@ void Preprocessor::HandlePragmaOnce(Token &OnceTok) { } void Preprocessor::HandlePragmaMark() { - assert(CurLexer && "No current lexer?"); - CurLexer->ReadToEndOfLine(); + assert(CurPPLexer && "No current lexer?"); + if (CurLexer) CurLexer->ReadToEndOfLine(); + else CurPTHLexer->DiscardToEndOfLine(); } |