forked from OSchip/llvm-project
parent
9880a2cb2f
commit
5965a28a4b
|
@ -77,8 +77,9 @@ public:
|
|||
/// with the specified preprocessor managing the lexing process. This lexer
|
||||
/// assumes that the associated file buffer and Preprocessor objects will
|
||||
/// outlive it, so it doesn't take ownership of either of them.
|
||||
Lexer(SourceLocation FileLoc, Preprocessor &PP);
|
||||
Lexer(SourceLocation FileLoc, Preprocessor &PP,
|
||||
const char *BufStart = 0, const char *BufEnd = 0);
|
||||
const char *BufStart, const char *BufEnd);
|
||||
|
||||
/// Lexer constructor - Create a new raw lexer object. This object is only
|
||||
/// suitable for calls to 'LexRawToken'. This lexer assumes that the text
|
||||
|
@ -310,6 +311,7 @@ private:
|
|||
/// getCharAndSizeSlow - Handle the slow/uncommon case of the getCharAndSize
|
||||
/// method.
|
||||
char getCharAndSizeSlow(const char *Ptr, unsigned &Size, Token *Tok = 0);
|
||||
public:
|
||||
|
||||
/// getCharAndSizeNoWarn - Like the getCharAndSize method, but does not ever
|
||||
/// emit a warning.
|
||||
|
@ -325,6 +327,7 @@ private:
|
|||
Size = 0;
|
||||
return getCharAndSizeSlowNoWarn(Ptr, Size, Features);
|
||||
}
|
||||
private:
|
||||
|
||||
/// getCharAndSizeSlowNoWarn - Same as getCharAndSizeSlow, but never emits a
|
||||
/// diagnostic.
|
||||
|
|
|
@ -90,6 +90,28 @@ void Lexer::InitLexer(const char *BufStart, const char *BufPtr,
|
|||
ExtendedTokenMode = 0;
|
||||
}
|
||||
|
||||
/// Lexer constructor - Create a new lexer object for the specified buffer
|
||||
/// with the specified preprocessor managing the lexing process. This lexer
|
||||
/// assumes that the associated file buffer and Preprocessor objects will
|
||||
/// outlive it, so it doesn't take ownership of either of them.
|
||||
Lexer::Lexer(SourceLocation fileloc, Preprocessor &PP)
|
||||
// FIXME: This is really horrible and only needed for _Pragma lexers, split this
|
||||
// out of the main lexer path!
|
||||
: PreprocessorLexer(&PP,
|
||||
PP.getSourceManager().getCanonicalFileID(
|
||||
PP.getSourceManager().getSpellingLoc(fileloc))),
|
||||
FileLoc(fileloc),
|
||||
Features(PP.getLangOptions()) {
|
||||
|
||||
SourceManager &SourceMgr = PP.getSourceManager();
|
||||
const llvm::MemoryBuffer *InputFile = SourceMgr.getBuffer(getFileID());
|
||||
|
||||
InitLexer(InputFile->getBufferStart(), InputFile->getBufferStart(),
|
||||
InputFile->getBufferEnd());
|
||||
|
||||
// Default to keeping comments if the preprocessor wants them.
|
||||
SetCommentRetentionState(PP.getCommentRetentionState());
|
||||
}
|
||||
|
||||
/// Lexer constructor - Create a new lexer object for the specified buffer
|
||||
/// with the specified preprocessor managing the lexing process. This lexer
|
||||
|
@ -105,16 +127,8 @@ Lexer::Lexer(SourceLocation fileloc, Preprocessor &PP,
|
|||
FileLoc(fileloc),
|
||||
Features(PP.getLangOptions()) {
|
||||
|
||||
SourceManager &SourceMgr = PP.getSourceManager();
|
||||
const llvm::MemoryBuffer *InputFile = SourceMgr.getBuffer(getFileID());
|
||||
|
||||
// BufferPtr and BufferEnd can start out somewhere inside the current buffer.
|
||||
// If unspecified, they starts at the start/end of the buffer.
|
||||
const char *BufStart = InputFile->getBufferStart();
|
||||
if (BufPtr == 0) BufPtr = BufStart;
|
||||
if (BufEnd == 0) BufEnd = InputFile->getBufferEnd();
|
||||
|
||||
InitLexer(BufStart, BufPtr, BufEnd);
|
||||
InitLexer(PP.getSourceManager().getBuffer(getFileID())->getBufferStart(),
|
||||
BufPtr, BufEnd);
|
||||
|
||||
// Default to keeping comments if the preprocessor wants them.
|
||||
SetCommentRetentionState(PP.getCommentRetentionState());
|
||||
|
|
Loading…
Reference in New Issue