[cfe-commits] r108175 - in /cfe/trunk: include/clang/Lex/Preprocessor.h lib/Lex/PPCaching.cpp
Chris Lattner
clattner at apple.com
Mon Jul 12 14:19:29 PDT 2010
On Jul 12, 2010, at 11:49 AM, Argyrios Kyrtzidis wrote:
> Author: akirtzidis
> Date: Mon Jul 12 13:49:30 2010
> New Revision: 108175
>
> URL: http://llvm.org/viewvc/llvm-project?rev=108175&view=rev
> Log:
> If we are past tok::eof and in caching lex mode, avoid caching repeated tok::eofs.
I'm confused about this: why is someone calling Lex after tok::eof got returned?
-Chris
>
> Modified:
> cfe/trunk/include/clang/Lex/Preprocessor.h
> cfe/trunk/lib/Lex/PPCaching.cpp
>
> Modified: cfe/trunk/include/clang/Lex/Preprocessor.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/Preprocessor.h?rev=108175&r1=108174&r2=108175&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Lex/Preprocessor.h (original)
> +++ cfe/trunk/include/clang/Lex/Preprocessor.h Mon Jul 12 13:49:30 2010
> @@ -871,7 +871,11 @@
> //===--------------------------------------------------------------------===//
> // Caching stuff.
> void CachingLex(Token &Result);
> - bool InCachingLexMode() const { return CurPPLexer == 0 && CurTokenLexer == 0;}
> + bool InCachingLexMode() const {
> + // If the Lexer pointers are 0 and IncludeMacroStack is empty, it means
> + // that we are past EOF, not that we are in CachingLex mode.
> + return CurPPLexer == 0 && CurTokenLexer == 0 && !IncludeMacroStack.empty();
> + }
> void EnterCachingLexMode();
> void ExitCachingLexMode() {
> if (InCachingLexMode())
>
> Modified: cfe/trunk/lib/Lex/PPCaching.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/PPCaching.cpp?rev=108175&r1=108174&r2=108175&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Lex/PPCaching.cpp (original)
> +++ cfe/trunk/lib/Lex/PPCaching.cpp Mon Jul 12 13:49:30 2010
> @@ -45,13 +45,19 @@
> }
>
> void Preprocessor::CachingLex(Token &Result) {
> + if (!InCachingLexMode())
> + return;
> +
> if (CachedLexPos < CachedTokens.size()) {
> Result = CachedTokens[CachedLexPos++];
> return;
> }
>
> ExitCachingLexMode();
> - Lex(Result);
> + // True if we consumed everything already.
> + bool PastEOF = CurPPLexer == 0 && CurTokenLexer == 0;
> + if (!PastEOF)
> + Lex(Result);
>
> if (!isBacktrackEnabled()) {
> // All cached tokens were consumed.
> @@ -60,10 +66,12 @@
> return;
> }
>
> - // Cache the lexed token.
> + // Cache the lexed token if it's not a repeated tok::eof.
> EnterCachingLexMode();
> - CachedTokens.push_back(Result);
> - ++CachedLexPos;
> + if (!PastEOF) {
> + CachedTokens.push_back(Result);
> + ++CachedLexPos;
> + }
> }
>
> void Preprocessor::EnterCachingLexMode() {
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list