Check in the long promised SourceLocation rewrite.  This lays the
ground work for implementing #line, and fixes the "out of macro ID's" 
problem.

There is nothing particularly tricky about the code, other than the
very performance sensitive SourceManager::getFileID() method.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@62978 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Lex/TokenLexer.cpp b/lib/Lex/TokenLexer.cpp
index dd5352c..ea4ce66 100644
--- a/lib/Lex/TokenLexer.cpp
+++ b/lib/Lex/TokenLexer.cpp
@@ -314,8 +314,9 @@
   // that captures all of this.
   if (InstantiateLoc.isValid()) {   // Don't do this for token streams.
     SourceManager &SrcMgr = PP.getSourceManager();
-    Tok.setLocation(SrcMgr.getInstantiationLoc(Tok.getLocation(), 
-                                               InstantiateLoc));
+    Tok.setLocation(SrcMgr.createInstantiationLoc(Tok.getLocation(), 
+                                                  InstantiateLoc,
+                                                  Tok.getLength()));
   }
   
   // If this is the first token, set the lexical properties of the token to
@@ -398,7 +399,7 @@
              "Should be a raw location into scratch buffer");
       SourceManager &SourceMgr = PP.getSourceManager();
       std::pair<FileID, unsigned> LocInfo =
-        SourceMgr.getDecomposedFileLoc(ResultTokLoc);
+        SourceMgr.getDecomposedLoc(ResultTokLoc);
       
       const char *ScratchBufStart =SourceMgr.getBufferData(LocInfo.first).first;