Current Path : /compat/linux/proc/68247/root/usr/src/contrib/llvm/tools/clang/include/clang/Lex/ |
FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64 |
Current File : //compat/linux/proc/68247/root/usr/src/contrib/llvm/tools/clang/include/clang/Lex/PTHLexer.h |
//===--- PTHLexer.h - Lexer based on Pre-tokenized input --------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // This file defines the PTHLexer interface. // //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_PTHLEXER_H #define LLVM_CLANG_PTHLEXER_H #include "clang/Lex/PreprocessorLexer.h" namespace clang { class PTHManager; class PTHSpellingSearch; class PTHLexer : public PreprocessorLexer { SourceLocation FileStartLoc; /// TokBuf - Buffer from PTH file containing raw token data. const unsigned char* TokBuf; /// CurPtr - Pointer into current offset of the token buffer where /// the next token will be read. const unsigned char* CurPtr; /// LastHashTokPtr - Pointer into TokBuf of the last processed '#' /// token that appears at the start of a line. const unsigned char* LastHashTokPtr; /// PPCond - Pointer to a side table in the PTH file that provides a /// a consise summary of the preproccessor conditional block structure. /// This is used to perform quick skipping of conditional blocks. const unsigned char* PPCond; /// CurPPCondPtr - Pointer inside PPCond that refers to the next entry /// to process when doing quick skipping of preprocessor blocks. const unsigned char* CurPPCondPtr; PTHLexer(const PTHLexer&); // DO NOT IMPLEMENT void operator=(const PTHLexer&); // DO NOT IMPLEMENT /// ReadToken - Used by PTHLexer to read tokens TokBuf. void ReadToken(Token& T); bool LexEndOfFile(Token &Result); /// PTHMgr - The PTHManager object that created this PTHLexer. PTHManager& PTHMgr; Token EofToken; protected: friend class PTHManager; /// Create a PTHLexer for the specified token stream. PTHLexer(Preprocessor& pp, FileID FID, const unsigned char *D, const unsigned char* ppcond, PTHManager &PM); public: ~PTHLexer() {} /// Lex - Return the next token. void Lex(Token &Tok); void getEOF(Token &Tok); /// DiscardToEndOfLine - Read the rest of the current preprocessor line as an /// uninterpreted string. This switches the lexer out of directive mode. void DiscardToEndOfLine(); /// 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() { // isNextPPTokenLParen is not on the hot path, and all we care about is // whether or not we are at a token with kind tok::eof or tok::l_paren. // Just read the first byte from the current token pointer to determine // its kind. tok::TokenKind x = (tok::TokenKind)*CurPtr; return x == tok::eof ? 2 : x == tok::l_paren; } /// IndirectLex - An indirect call to 'Lex' that can be invoked via /// the PreprocessorLexer interface. void IndirectLex(Token &Result) { Lex(Result); } /// getSourceLocation - Return a source location for the token in /// the current file. SourceLocation getSourceLocation(); /// SkipBlock - Used by Preprocessor to skip the current conditional block. bool SkipBlock(); }; } // end namespace clang #endif