make the verbose raw-lexer ctor fully explicit instead of having

embedded magic.

llvm-svn: 62417
This commit is contained in:
Chris Lattner 2009-01-17 07:42:27 +00:00
parent 1db27eefa1
commit fcf6452eb4
3 changed files with 8 additions and 15 deletions

View File

@ -84,8 +84,7 @@ public:
/// suitable for calls to 'LexRawToken'. This lexer assumes that the text
/// range will outlive it, so it doesn't take ownership of it.
Lexer(SourceLocation FileLoc, const LangOptions &Features,
const char *BufStart, const char *BufEnd,
const llvm::MemoryBuffer *FromFile = 0);
const char *BufStart, const char *BufPtr, 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

View File

@ -124,15 +124,9 @@ Lexer::Lexer(SourceLocation fileloc, Preprocessor &PP,
/// suitable for calls to 'LexRawToken'. This lexer assumes that the text
/// range will outlive it, so it doesn't take ownership of it.
Lexer::Lexer(SourceLocation fileloc, const LangOptions &features,
const char *BufPtr, const char *BufEnd,
const llvm::MemoryBuffer *FromFile)
const char *BufStart, const char *BufPtr, const char *BufEnd)
: FileLoc(fileloc), Features(features) {
// If a MemoryBuffer was specified, use its start as BufferStart. This affects
// the source location objects produced by this lexer.
const char *BufStart = BufPtr;
if (FromFile) BufStart = FromFile->getBufferStart();
InitLexer(BufStart, BufPtr, BufEnd);
// We *are* in raw mode.
@ -197,7 +191,7 @@ unsigned Lexer::MeasureTokenLength(SourceLocation Loc,
// all obviously single-char tokens. This could use
// Lexer::isObviouslySimpleCharacter for example to handle identifiers or
// something.
const char *BufEnd = SM.getBufferData(Loc).second;
std::pair<const char *,const char *> Buffer = SM.getBufferData(Loc);
// Create a langops struct and enable trigraphs. This is sufficient for
// measuring tokens.
@ -205,7 +199,7 @@ unsigned Lexer::MeasureTokenLength(SourceLocation Loc,
LangOpts.Trigraphs = true;
// Create a lexer starting at the beginning of this token.
Lexer TheLexer(Loc, LangOpts, StrData, BufEnd);
Lexer TheLexer(Loc, LangOpts, Buffer.first, StrData, Buffer.second);
Token TheTok;
TheLexer.LexFromRawLexer(TheTok);
return TheTok.getLength();

View File

@ -392,11 +392,11 @@ bool TokenLexer::PasteTokens(Token &Tok) {
SourceManager &SourceMgr = PP.getSourceManager();
const char *ResultStrData = SourceMgr.getCharacterData(ResultTokLoc);
const llvm::MemoryBuffer *Buffer = SourceMgr.getBuffer(ResultTokLoc);
// Make a lexer object so that we lex and expand the paste result.
Lexer TL(ResultTokLoc, PP.getLangOptions(), ResultStrData,
ResultStrData+LHSLen+RHSLen /*don't include null*/, Buffer);
Lexer TL(ResultTokLoc, PP.getLangOptions(),
SourceMgr.getBufferData(ResultTokLoc).first,
ResultStrData,
ResultStrData+LHSLen+RHSLen /*don't include null*/);
// Lex a token in raw mode. This way it won't look up identifiers
// automatically, lexing off the end will return an eof token, and