Introduce a new PresumedLoc class to represent the concept of a location
as reported to the user and as manipulated by #line.  This is what __FILE__,
__INCLUDE_LEVEL__, diagnostics and other things should follow (but not 
dependency generation!).  

This patch also includes several cleanups along the way: 

- SourceLocation now has a dump method, and several other places 
  that did similar things now use it.
- I cleaned up some code in AnalysisConsumer, but it should probably be
  simplified further now that NamedDecl is better.
- TextDiagnosticPrinter is now simplified and cleaned up a bit.

This patch is a prerequisite for #line, but does not actually provide 
any #line functionality.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@63098 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Basic/SourceLocation.cpp b/lib/Basic/SourceLocation.cpp
index f0c8274..5d48472 100644
--- a/lib/Basic/SourceLocation.cpp
+++ b/lib/Basic/SourceLocation.cpp
@@ -26,6 +26,29 @@
   return SourceLocation::getFromRawEncoding(D.ReadInt());   
 }
 
+void SourceLocation::dump(const SourceManager &SM) const {
+  if (!isValid()) {
+    fprintf(stderr, "<invalid loc>");
+    return;
+  }
+  
+  if (isFileID()) {
+    PresumedLoc PLoc = SM.getPresumedLoc(*this);
+    
+    // The instantiation and spelling pos is identical for file locs.
+    fprintf(stderr, "%s:%d:%d",
+            PLoc.getFilename(), PLoc.getLine(), PLoc.getColumn());
+    return;
+  }
+  
+  SM.getInstantiationLoc(*this).dump(SM);
+  
+  fprintf(stderr, " <Spelling=");
+  SM.getSpellingLoc(*this).dump(SM);
+  fprintf(stderr, ">");
+}
+
+
 void SourceRange::Emit(llvm::Serializer& S) const {
   B.Emit(S);
   E.Emit(S);
@@ -53,11 +76,6 @@
   return FullSourceLoc(SrcMgr->getSpellingLoc(*this), *SrcMgr);
 }
 
-FullSourceLoc FullSourceLoc::getIncludeLoc() const {
-  assert(isValid());
-  return FullSourceLoc(SrcMgr->getIncludeLoc(*this), *SrcMgr);
-}
-
 unsigned FullSourceLoc::getLineNumber() const {
   assert(isValid());
   return SrcMgr->getLineNumber(*this);
@@ -89,11 +107,6 @@
   return SrcMgr->getSpellingColumnNumber(*this);
 }
 
-const char* FullSourceLoc::getSourceName() const {
-  assert(isValid());
-  return SrcMgr->getSourceName(*this);
-}
-
 bool FullSourceLoc::isInSystemHeader() const {
   assert(isValid());
   return SrcMgr->isInSystemHeader(*this);
@@ -109,22 +122,3 @@
   return SrcMgr->getBuffer(SrcMgr->getFileID(*this));
 }
 
-void FullSourceLoc::dump() const {
-  if (!isValid()) {
-    fprintf(stderr, "Invalid Loc\n");
-    return;
-  }
-  
-  if (isFileID()) {
-    // The instantiation and spelling pos is identical for file locs.
-    fprintf(stderr, "File Loc from '%s': %d: %d\n",
-            getSourceName(), getInstantiationLineNumber(),
-            getInstantiationColumnNumber());
-  } else {
-    fprintf(stderr, "Macro Loc (\n  Spelling: ");
-    getSpellingLoc().dump();
-    fprintf(stderr, "  Instantiation: ");
-    getInstantiationLoc().dump();
-    fprintf(stderr, ")\n");
-  }
-}