diff options
Diffstat (limited to 'lib/Lex/Lexer.cpp')
-rw-r--r-- | lib/Lex/Lexer.cpp | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/lib/Lex/Lexer.cpp b/lib/Lex/Lexer.cpp index 351b63f6bb..74ac55cf2e 100644 --- a/lib/Lex/Lexer.cpp +++ b/lib/Lex/Lexer.cpp @@ -1309,6 +1309,18 @@ bool Lexer::LexEndOfFile(Token &Result, const char *CurPtr) { SetCommentRetentionState(PP->getCommentRetentionState()); return true; // Have a token. } + + // If we are in raw mode, return this event as an EOF token. Let the caller + // that put us in raw mode handle the event. + if (isLexingRawMode()) { + Result.startToken(); + BufferPtr = BufferEnd; + FormTokenWithChars(Result, BufferEnd, tok::eof); + return true; + } + + // Otherwise, check if we are code-completing, then issue diagnostics for + // unterminated #if and missing newline. if (IsEofCodeCompletion) { // We're at the end of the file, but we've been asked to conside the @@ -1316,23 +1328,12 @@ bool Lexer::LexEndOfFile(Token &Result, const char *CurPtr) { // code-completion token. Result.startToken(); FormTokenWithChars(Result, CurPtr, tok::code_completion); - + // Only do the eof -> code_completion translation once. IsEofCodeCompletion = false; return true; } - // If we are in raw mode, return this event as an EOF token. Let the caller - // that put us in raw mode handle the event. - if (isLexingRawMode()) { - Result.startToken(); - BufferPtr = BufferEnd; - FormTokenWithChars(Result, BufferEnd, tok::eof); - return true; - } - - // Otherwise, issue diagnostics for unterminated #if and missing newline. - // If we are in a #if directive, emit an error. while (!ConditionalStack.empty()) { PP->Diag(ConditionalStack.back().IfLoc, |