From 31aba425a01c8c957e662ccfaa71f923d0f0932a Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Thu, 20 Nov 2008 16:32:22 +0000 Subject: [PATCH] PTHLexer: - Rename 'CurToken' and 'LastToken' to 'CurTokenIdx' and 'LastTokenIdx' respectively. - Add helper methods GetToken(), AdvanceToken(), AtLastToken() to abstract away details of the token stream. This also allows us to easily replace their implementation later. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59733 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Lex/PTHLexer.h | 24 +++++++++++++++++++----- lib/Lex/PTHLexer.cpp | 30 +++++++++++------------------- 2 files changed, 30 insertions(+), 24 deletions(-) diff --git a/include/clang/Lex/PTHLexer.h b/include/clang/Lex/PTHLexer.h index 8c88d6f52f..8315a22f3f 100644 --- a/include/clang/Lex/PTHLexer.h +++ b/include/clang/Lex/PTHLexer.h @@ -26,10 +26,10 @@ class PTHLexer : public PreprocessorLexer { /// LastTokenIdx - The index of the last token in Tokens. This token /// will be an eof token. - unsigned LastToken; + unsigned LastTokenIdx; - /// CurToken - This is the index of the next token that Lex will return. - unsigned CurToken; + /// CurTokenIdx - This is the index of the next token that Lex will return. + unsigned CurTokenIdx; PTHLexer(const PTHLexer&); // DO NOT IMPLEMENT void operator=(const PTHLexer&); // DO NOT IMPLEMENT @@ -53,11 +53,25 @@ public: /// isNextPPTokenLParen - Return 1 if the next unexpanded token will return a /// tok::l_paren token, 0 if it is something else and 2 if there are no more /// tokens controlled by this lexer. - unsigned isNextPPTokenLParen(); - + unsigned isNextPPTokenLParen() { + return AtLastToken() ? 2 : GetToken().is(tok::l_paren); + } + /// IndirectLex - An indirect call to 'Lex' that can be invoked via /// the PreprocessorLexer interface. void IndirectLex(Token &Result) { Lex(Result); } + +private: + + /// AtLastToken - Returns true if the PTHLexer is at the last token. + bool AtLastToken() const { return CurTokenIdx == LastTokenIdx; } + + /// GetToken - Returns the next token. This method does not advance the + /// PTHLexer to the next token. + Token GetToken() { return Tokens[CurTokenIdx]; } + + /// AdvanceToken - Advances the PTHLexer to the next token. + void AdvanceToken() { ++CurTokenIdx; } }; } // end namespace clang diff --git a/lib/Lex/PTHLexer.cpp b/lib/Lex/PTHLexer.cpp index 4e975d9f48..16aca4aacb 100644 --- a/lib/Lex/PTHLexer.cpp +++ b/lib/Lex/PTHLexer.cpp @@ -20,19 +20,19 @@ PTHLexer::PTHLexer(Preprocessor& pp, SourceLocation fileloc, const Token *TokArray, unsigned NumTokens) : PreprocessorLexer(&pp, fileloc), Tokens(TokArray), - LastToken(NumTokens - 1), - CurToken(0) { + LastTokenIdx(NumTokens - 1), + CurTokenIdx(0) { assert(NumTokens >= 1); - assert(Tokens[LastToken].is(tok::eof)); + assert(Tokens[LastTokenIdx].is(tok::eof)); } void PTHLexer::Lex(Token& Tok) { LexNextToken: - if (CurToken == LastToken) { + if (AtLastToken()) { if (ParsingPreprocessorDirective) { ParsingPreprocessorDirective = false; - Tok = Tokens[LastToken]; + Tok = GetToken(); Tok.setKind(tok::eom); MIOpt.ReadToken(); return; @@ -45,7 +45,7 @@ LexNextToken: return; } - Tok = Tokens[CurToken]; + Tok = GetToken(); // Don't advance to the next token yet. Check if we are at the // start of a new line and we're processing a directive. If so, we @@ -58,7 +58,7 @@ LexNextToken: } // Advance to the next token. - ++CurToken; + AdvanceToken(); if (Tok.is(tok::hash)) { if (Tok.isAtStartOfLine() && !LexingRawMode) { @@ -80,7 +80,7 @@ LexNextToken: } void PTHLexer::setEOF(Token& Tok) { - Tok = Tokens[LastToken]; + Tok = Tokens[LastTokenIdx]; } void PTHLexer::DiscardToEndOfLine() { @@ -88,19 +88,11 @@ void PTHLexer::DiscardToEndOfLine() { "Must be in a preprocessing directive!"); // Already at end-of-file? - if (CurToken == LastToken) + if (AtLastToken()) return; // Find the first token that is not the start of the *current* line. - for ( ++CurToken; CurToken != LastToken ; ++CurToken ) - if (Tokens[CurToken].isAtStartOfLine()) + for (AdvanceToken(); !AtLastToken(); AdvanceToken()) + if (GetToken().isAtStartOfLine()) return; } - -unsigned PTHLexer::isNextPPTokenLParen() { - if (CurToken == LastToken) - return 2; - - return Tokens[CurToken].is(tok::l_paren); -} - -- 2.40.0