[cfe-commits] r48131 - /cfe/trunk/Lex/PPLexerChange.cpp

Chris Lattner sabre at nondot.org
Sun Mar 9 23:20:22 PDT 2008


Author: lattner
Date: Mon Mar 10 01:20:22 2008
New Revision: 48131

URL: http://llvm.org/viewvc/llvm-project?rev=48131&view=rev
Log:
add comments about some simple optimizations that may become 
more important if this api gets wider use.

Modified:
    cfe/trunk/Lex/PPLexerChange.cpp

Modified: cfe/trunk/Lex/PPLexerChange.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Lex/PPLexerChange.cpp?rev=48131&r1=48130&r2=48131&view=diff

==============================================================================
--- cfe/trunk/Lex/PPLexerChange.cpp (original)
+++ cfe/trunk/Lex/PPLexerChange.cpp Mon Mar 10 01:20:22 2008
@@ -68,6 +68,24 @@
 /// code paths if possible!
 ///
 Token Preprocessor::LookAhead(unsigned N) {
+  // FIXME: Optimize the case where multiple lookahead calls are used back to
+  // back.  Consider if the the parser contained (dynamically):
+  //    Lookahead(1); Lookahead(1); Lookahead(1)
+  // This would return the same token 3 times, but would end up making lots of
+  // token stream lexers to do it.  To handle this common case, see if the top
+  // of the lexer stack is a TokenStreamLexer with macro expansion disabled.  If
+  // so, see if it has 'N' tokens available in it.  If so, just return the
+  // token.
+  
+  // FIXME: Optimize the case when the parser does multiple nearby lookahead
+  // calls.  For example, consider:
+  //   Lookahead(0); Lookahead(1); Lookahead(2);
+  // The previous optimization won't apply, and there won't be any space left in
+  // the array that was previously new'd.  To handle this, always round up the
+  // size we new to a multiple of 16 tokens.  If the previous buffer has space
+  // left, we can just grow it.  This means we only have to do the new 1/16th as
+  // often.
+  
   Token *LookaheadTokens = new Token[N];
 
   // Read N+1 tokens into LookaheadTokens.  After this loop, Tok is the token





More information about the cfe-commits mailing list