/// 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
/// 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
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;
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
}
// Advance to the next token.
- ++CurToken;
+ AdvanceToken();
if (Tok.is(tok::hash)) {
if (Tok.isAtStartOfLine() && !LexingRawMode) {
}
void PTHLexer::setEOF(Token& Tok) {
- Tok = Tokens[LastToken];
+ Tok = Tokens[LastTokenIdx];
}
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);
-}
-