Change how raw lexers are handled: instead of creating them and then
using LexRawToken, create one and use LexFromRawLexer.  This avoids
twiddling the RawLexer flag around and simplifies some code (even 
speeding raw lexing up a tiny bit).

This change also improves the token paster to use a Lexer on the stack
instead of new/deleting it. 



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57393 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Lex/Lexer.cpp b/lib/Lex/Lexer.cpp
index c99dc1d..e930f3d 100644
--- a/lib/Lex/Lexer.cpp
+++ b/lib/Lex/Lexer.cpp
@@ -104,15 +104,16 @@
 }
 
 /// Lexer constructor - Create a new raw lexer object.  This object is only
-/// suitable for calls to 'LexRawToken'.  This lexer assumes that the
-/// associated file buffer will outlive it, so it doesn't take ownership of it.
+/// 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 *BufStart, const char *BufEnd)
+             const char *BufStart, const char *BufEnd,
+             const llvm::MemoryBuffer *FromFile)
   : FileLoc(fileloc), PP(0), Features(features) {
   Is_PragmaLexer = false;
   InitCharacterInfo();
   
-  BufferStart = BufStart;
+  BufferStart = FromFile ? FromFile->getBufferStart() : BufStart;
   BufferPtr = BufStart;
   BufferEnd = BufEnd;
   
@@ -192,7 +193,7 @@
   // Create a lexer starting at the beginning of this token.
   Lexer TheLexer(Loc, LangOpts, StrData, BufEnd);
   Token TheTok;
-  TheLexer.LexRawToken(TheTok);
+  TheLexer.LexFromRawLexer(TheTok);
   return TheTok.getLength();
 }