From: Ted Kremenek Date: Thu, 20 Nov 2008 01:29:45 +0000 (+0000) Subject: - Default initialize ParsingPreprocessorDirective, ParsingFilename, and X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=452e37837a48b2f0ced144784277fd4d28cbede9;p=clang - Default initialize ParsingPreprocessorDirective, ParsingFilename, and LexingRawMode in the ctor of PreprocessorLexer. - PTHLexer: Use "LastToken" instead of "NumToken" git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59690 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Lex/PTHLexer.h b/include/clang/Lex/PTHLexer.h index da1db2d165..96049b74f2 100644 --- a/include/clang/Lex/PTHLexer.h +++ b/include/clang/Lex/PTHLexer.h @@ -11,29 +11,24 @@ // //===----------------------------------------------------------------------===// -#ifndef LLVM_CLANG_PTHLexer_H -#define LLVM_CLANG_PTHLexer_H +#ifndef LLVM_CLANG_PTHLEXER_H +#define LLVM_CLANG_PTHLEXER_H #include "clang/Lex/PreprocessorLexer.h" namespace clang { class PTHLexer : public PreprocessorLexer { - /// FileLoc - Location for the start of the file. - /// - SourceLocation FileLoc; - /// Tokens - This is the pointer to an array of tokens that the macro is /// defined to, with arguments expanded for function-like macros. If this is /// a token stream, these are the tokens we are returning. const Token *Tokens; - /// NumTokens - This is the length of the Tokens array. - /// - unsigned NumTokens; + /// LastTokenIdx - The index of the last token in Tokens. This token + /// will be an eof token. + unsigned LastToken; - /// CurToken - This is the next token that Lex will return. - /// + /// CurToken - This is the index of the next token that Lex will return. unsigned CurToken; PTHLexer(const PTHLexer&); // DO NOT IMPLEMENT @@ -51,12 +46,6 @@ public: void setEOF(Token &Tok); - /// getFileLoc - Return the File Location for the file we are lexing out of. - /// The physical location encodes the location where the characters come from, - /// the virtual location encodes where we should *claim* the characters came - /// from. Currently this is only used by _Pragma handling. - SourceLocation getFileLoc() const { return FileLoc; } - /// DiscardToEndOfLine - Read the rest of the current preprocessor line as an /// uninterpreted string. This switches the lexer out of directive mode. void DiscardToEndOfLine(); diff --git a/include/clang/Lex/PreprocessorLexer.h b/include/clang/Lex/PreprocessorLexer.h index df8049e214..5d976ff08d 100644 --- a/include/clang/Lex/PreprocessorLexer.h +++ b/include/clang/Lex/PreprocessorLexer.h @@ -68,7 +68,12 @@ protected: friend class Preprocessor; PreprocessorLexer(Preprocessor* pp, SourceLocation L); - PreprocessorLexer() : PP(0), FileID(0) {} + + PreprocessorLexer() + : PP(0), FileID(0), + ParsingPreprocessorDirective(false), + ParsingFilename(false), + LexingRawMode(false) {} virtual ~PreprocessorLexer(); diff --git a/lib/Lex/PTHLexer.cpp b/lib/Lex/PTHLexer.cpp index 5adcd9f6a1..936a03ac0f 100644 --- a/lib/Lex/PTHLexer.cpp +++ b/lib/Lex/PTHLexer.cpp @@ -17,21 +17,19 @@ using namespace clang; PTHLexer::PTHLexer(Preprocessor& pp, SourceLocation fileloc, - const Token *TokArray, unsigned NumToks) - : PreprocessorLexer(&pp, fileloc), FileLoc(fileloc), - Tokens(TokArray), NumTokens(NumToks), CurToken(0) { + const Token *TokArray, unsigned NumTokens) + : PreprocessorLexer(&pp, fileloc), + Tokens(TokArray), + LastToken(NumTokens - 1), + CurToken(0) { - assert (Tokens[NumTokens-1].is(tok::eof)); - --NumTokens; - - LexingRawMode = false; - ParsingPreprocessorDirective = false; - ParsingFilename = false; + assert (NumTokens >= 1); + assert (Tokens[LastToken].is(tok::eof)); } void PTHLexer::Lex(Token& Tok) { - if (CurToken == NumTokens) { + if (CurToken == LastToken) { // If we hit the end of the file while parsing a preprocessor directive, // end the preprocessor directive first. The next token returned will // then be the end of file. @@ -73,8 +71,7 @@ void PTHLexer::Lex(Token& Tok) { } void PTHLexer::setEOF(Token& Tok) { - Tok = Tokens[NumTokens]; // NumTokens is already adjusted, so this isn't - // an overflow. + Tok = Tokens[LastToken]; } void PTHLexer::DiscardToEndOfLine() { @@ -82,17 +79,17 @@ void PTHLexer::DiscardToEndOfLine() { "Must be in a preprocessing directive!"); // Already at end-of-file? - if (CurToken == NumTokens) + if (CurToken == LastToken) return; // Find the first token that is not the start of the *current* line. - for ( ++CurToken; CurToken != NumTokens ; ++CurToken ) + for ( ++CurToken; CurToken != LastToken ; ++CurToken ) if (Tokens[CurToken].isAtStartOfLine()) return; } unsigned PTHLexer::isNextPPTokenLParen() { - if (CurToken == NumTokens) + if (CurToken == LastToken) return 2; return Tokens[CurToken].is(tok::l_paren); diff --git a/lib/Lex/PreprocessorLexer.cpp b/lib/Lex/PreprocessorLexer.cpp index 2ce181ef83..1916f298db 100644 --- a/lib/Lex/PreprocessorLexer.cpp +++ b/lib/Lex/PreprocessorLexer.cpp @@ -19,7 +19,10 @@ using namespace clang; PreprocessorLexer::PreprocessorLexer(Preprocessor* pp, SourceLocation L) - : PP(pp), FileID(pp->getSourceManager().getPhysicalLoc(L).getFileID()) {} + : PP(pp), FileID(pp->getSourceManager().getPhysicalLoc(L).getFileID()), + ParsingPreprocessorDirective(false), + ParsingFilename(false), + LexingRawMode(false) {} PreprocessorLexer::~PreprocessorLexer() {}