move TGSourceMgr class out of TableGen into libsupport.
authorChris Lattner <sabre@nondot.org>
Sun, 21 Jun 2009 03:36:54 +0000 (03:36 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 21 Jun 2009 03:36:54 +0000 (03:36 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73842 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Support/SourceMgr.h [new file with mode: 0644]
lib/Support/SourceMgr.cpp [new file with mode: 0644]
utils/TableGen/Record.h
utils/TableGen/TGLexer.cpp
utils/TableGen/TGParser.h
utils/TableGen/TGSourceMgr.cpp [deleted file]
utils/TableGen/TGSourceMgr.h [deleted file]

diff --git a/include/llvm/Support/SourceMgr.h b/include/llvm/Support/SourceMgr.h
new file mode 100644 (file)
index 0000000..60bf780
--- /dev/null
@@ -0,0 +1,108 @@
+//===- SourceMgr.h - Manager for Source Buffers & Diagnostics ---*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file declares the SourceMgr class.  This class is used as a simple
+// substrate for diagnostics, #include handling, and other low level things for
+// simple parsers.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef TGSOURCEMGR_H
+#define TGSOURCEMGR_H
+
+#include <string>
+#include <vector>
+#include <cassert>
+
+namespace llvm {
+  class MemoryBuffer;
+  class TGSourceMgr;
+  
+class TGLoc {
+  const char *Ptr;
+public:
+  TGLoc() : Ptr(0) {}
+  TGLoc(const TGLoc &RHS) : Ptr(RHS.Ptr) {}
+  
+  bool operator==(const TGLoc &RHS) const { return RHS.Ptr == Ptr; }
+  bool operator!=(const TGLoc &RHS) const { return RHS.Ptr != Ptr; }
+
+  const char *getPointer() const { return Ptr; }
+  
+  static TGLoc getFromPointer(const char *Ptr) {
+    TGLoc L;
+    L.Ptr = Ptr;
+    return L;
+  }
+};
+
+/// TGSourceMgr - This owns the files read by tblgen, handles include stacks,
+/// and handles printing of diagnostics.
+class TGSourceMgr {
+  struct SrcBuffer {
+    /// Buffer - The memory buffer for the file.
+    MemoryBuffer *Buffer;
+    
+    /// IncludeLoc - This is the location of the parent include, or null if at
+    /// the top level.
+    TGLoc IncludeLoc;
+  };
+  
+  /// Buffers - This is all of the buffers that we are reading from.
+  std::vector<SrcBuffer> Buffers;
+  
+  TGSourceMgr(const TGSourceMgr&);    // DO NOT IMPLEMENT
+  void operator=(const TGSourceMgr&); // DO NOT IMPLEMENT
+public:
+  TGSourceMgr() {}
+  ~TGSourceMgr();
+  
+  const SrcBuffer &getBufferInfo(unsigned i) const {
+    assert(i < Buffers.size() && "Invalid Buffer ID!");
+    return Buffers[i];
+  }
+
+  const MemoryBuffer *getMemoryBuffer(unsigned i) const {
+    assert(i < Buffers.size() && "Invalid Buffer ID!");
+    return Buffers[i].Buffer;
+  }
+  
+  TGLoc getParentIncludeLoc(unsigned i) const {
+    assert(i < Buffers.size() && "Invalid Buffer ID!");
+    return Buffers[i].IncludeLoc;
+  }
+  
+  unsigned AddNewSourceBuffer(MemoryBuffer *F, TGLoc IncludeLoc) {
+    SrcBuffer NB;
+    NB.Buffer = F;
+    NB.IncludeLoc = IncludeLoc;
+    Buffers.push_back(NB);
+    return Buffers.size()-1;
+  }
+  
+  /// FindBufferContainingLoc - Return the ID of the buffer containing the
+  /// specified location, returning -1 if not found.
+  int FindBufferContainingLoc(TGLoc Loc) const;
+  
+  /// FindLineNumber - Find the line number for the specified location in the
+  /// specified file.  This is not a fast method.
+  unsigned FindLineNumber(TGLoc Loc, int BufferID = -1) const;
+  
+  
+  /// PrintError - Emit an error message about the specified location with the
+  /// specified string.
+  void PrintError(TGLoc ErrorLoc, const std::string &Msg) const;
+  
+private:
+  void PrintIncludeStack(TGLoc IncludeLoc) const;
+};
+  
+}  // end llvm namespace
+
+#endif
diff --git a/lib/Support/SourceMgr.cpp b/lib/Support/SourceMgr.cpp
new file mode 100644 (file)
index 0000000..e745207
--- /dev/null
@@ -0,0 +1,107 @@
+//===- SourceMgr.cpp - Manager for Simple Source Buffers & Diagnostics ----===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file implements the SourceMgr class.  This class is used as a simple
+// substrate for diagnostics, #include handling, and other low level things for
+// simple parsers.
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/Support/SourceMgr.h"
+#include "llvm/Support/MemoryBuffer.h"
+#include "llvm/Support/raw_ostream.h"
+using namespace llvm;
+
+TGSourceMgr::~TGSourceMgr() {
+  while (!Buffers.empty()) {
+    delete Buffers.back().Buffer;
+    Buffers.pop_back();
+  }
+}
+
+/// FindBufferContainingLoc - Return the ID of the buffer containing the
+/// specified location, returning -1 if not found.
+int TGSourceMgr::FindBufferContainingLoc(TGLoc Loc) const {
+  for (unsigned i = 0, e = Buffers.size(); i != e; ++i)
+    if (Loc.getPointer() >= Buffers[i].Buffer->getBufferStart() &&
+        // Use <= here so that a pointer to the null at the end of the buffer
+        // is included as part of the buffer.
+        Loc.getPointer() <= Buffers[i].Buffer->getBufferEnd())
+      return i;
+  return -1;
+}
+
+/// FindLineNumber - Find the line number for the specified location in the
+/// specified file.  This is not a fast method.
+unsigned TGSourceMgr::FindLineNumber(TGLoc Loc, int BufferID) const {
+  if (BufferID == -1) BufferID = FindBufferContainingLoc(Loc);
+  assert(BufferID != -1 && "Invalid Location!");
+  
+  MemoryBuffer *Buff = getBufferInfo(BufferID).Buffer;
+  
+  // Count the number of \n's between the start of the file and the specified
+  // location.
+  unsigned LineNo = 1;
+  
+  const char *Ptr = Buff->getBufferStart();
+
+  for (; TGLoc::getFromPointer(Ptr) != Loc; ++Ptr)
+    if (*Ptr == '\n') ++LineNo;
+  return LineNo;
+}
+
+void TGSourceMgr::PrintIncludeStack(TGLoc IncludeLoc) const {
+  if (IncludeLoc == TGLoc()) return;  // Top of stack.
+  
+  int CurBuf = FindBufferContainingLoc(IncludeLoc);
+  assert(CurBuf != -1 && "Invalid or unspecified location!");
+
+  PrintIncludeStack(getBufferInfo(CurBuf).IncludeLoc);
+  
+  errs() << "Included from "
+         << getBufferInfo(CurBuf).Buffer->getBufferIdentifier()
+         << ":" << FindLineNumber(IncludeLoc, CurBuf) << ":\n";
+}
+
+
+void TGSourceMgr::PrintError(TGLoc ErrorLoc, const std::string &Msg) const {
+  raw_ostream &OS = errs();
+  
+  // First thing to do: find the current buffer containing the specified
+  // location.
+  int CurBuf = FindBufferContainingLoc(ErrorLoc);
+  assert(CurBuf != -1 && "Invalid or unspecified location!");
+  
+  PrintIncludeStack(getBufferInfo(CurBuf).IncludeLoc);
+  
+  MemoryBuffer *CurMB = getBufferInfo(CurBuf).Buffer;
+  
+  
+  OS << "Parsing " << CurMB->getBufferIdentifier() << ":"
+     << FindLineNumber(ErrorLoc, CurBuf) << ": ";
+  
+  OS << Msg << "\n";
+  
+  // Scan backward to find the start of the line.
+  const char *LineStart = ErrorLoc.getPointer();
+  while (LineStart != CurMB->getBufferStart() && 
+         LineStart[-1] != '\n' && LineStart[-1] != '\r')
+    --LineStart;
+  // Get the end of the line.
+  const char *LineEnd = ErrorLoc.getPointer();
+  while (LineEnd != CurMB->getBufferEnd() && 
+         LineEnd[0] != '\n' && LineEnd[0] != '\r')
+    ++LineEnd;
+  // Print out the line.
+  OS << std::string(LineStart, LineEnd) << "\n";
+  // Print out spaces before the caret.
+  for (const char *Pos = LineStart; Pos != ErrorLoc.getPointer(); ++Pos)
+    OS << (*Pos == '\t' ? '\t' : ' ');
+  OS << "^\n";
+}
index ac06cae809db1942280f6de8f60cc62f31b7223d..18b10eabdc05d4f4a95a3a592c4a2c9fdf46e177 100644 (file)
@@ -15,7 +15,7 @@
 #ifndef RECORD_H
 #define RECORD_H
 
-#include "TGSourceMgr.h"
+#include "llvm/Support/SourceMgr.h"
 #include "llvm/Support/DataTypes.h"
 #include <map>
 #include <ostream>
index 758d499a8b5f317a40417555a72f871f8d5bebd4..1941a599e8b4bd295098d4c86872e8a745a8d4d1 100644 (file)
@@ -12,7 +12,7 @@
 //===----------------------------------------------------------------------===//
 
 #include "TGLexer.h"
-#include "TGSourceMgr.h"
+#include "llvm/Support/SourceMgr.h"
 #include "llvm/Support/Streams.h"
 #include "llvm/Support/MemoryBuffer.h"
 #include <ostream>
index 3af467d16ab0257e269fe715c64af24202450314..c618708ee97845704d3c90ba3e9c975a3a498705 100644 (file)
@@ -15,7 +15,7 @@
 #define TGPARSER_H
 
 #include "TGLexer.h"
-#include "TGSourceMgr.h"
+#include "llvm/Support/SourceMgr.h"
 #include <map>
 
 namespace llvm {
diff --git a/utils/TableGen/TGSourceMgr.cpp b/utils/TableGen/TGSourceMgr.cpp
deleted file mode 100644 (file)
index 42bc752..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-//===- TGSourceMgr.cpp - Manager for Source Buffers & Diagnostics ---------===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements the TGSourceMgr class.
-//
-//===----------------------------------------------------------------------===//
-
-#include "TGSourceMgr.h"
-#include "llvm/Support/MemoryBuffer.h"
-#include "llvm/Support/raw_ostream.h"
-using namespace llvm;
-
-TGSourceMgr::~TGSourceMgr() {
-  while (!Buffers.empty()) {
-    delete Buffers.back().Buffer;
-    Buffers.pop_back();
-  }
-}
-
-/// FindBufferContainingLoc - Return the ID of the buffer containing the
-/// specified location, returning -1 if not found.
-int TGSourceMgr::FindBufferContainingLoc(TGLoc Loc) const {
-  for (unsigned i = 0, e = Buffers.size(); i != e; ++i)
-    if (Loc.getPointer() >= Buffers[i].Buffer->getBufferStart() &&
-        // Use <= here so that a pointer to the null at the end of the buffer
-        // is included as part of the buffer.
-        Loc.getPointer() <= Buffers[i].Buffer->getBufferEnd())
-      return i;
-  return -1;
-}
-
-/// FindLineNumber - Find the line number for the specified location in the
-/// specified file.  This is not a fast method.
-unsigned TGSourceMgr::FindLineNumber(TGLoc Loc, int BufferID) const {
-  if (BufferID == -1) BufferID = FindBufferContainingLoc(Loc);
-  assert(BufferID != -1 && "Invalid Location!");
-  
-  MemoryBuffer *Buff = getBufferInfo(BufferID).Buffer;
-  
-  // Count the number of \n's between the start of the file and the specified
-  // location.
-  unsigned LineNo = 1;
-  
-  const char *Ptr = Buff->getBufferStart();
-
-  for (; TGLoc::getFromPointer(Ptr) != Loc; ++Ptr)
-    if (*Ptr == '\n') ++LineNo;
-  return LineNo;
-}
-
-void TGSourceMgr::PrintIncludeStack(TGLoc IncludeLoc) const {
-  if (IncludeLoc == TGLoc()) return;  // Top of stack.
-  
-  int CurBuf = FindBufferContainingLoc(IncludeLoc);
-  assert(CurBuf != -1 && "Invalid or unspecified location!");
-
-  PrintIncludeStack(getBufferInfo(CurBuf).IncludeLoc);
-  
-  errs() << "Included from "
-         << getBufferInfo(CurBuf).Buffer->getBufferIdentifier()
-         << ":" << FindLineNumber(IncludeLoc, CurBuf) << ":\n";
-}
-
-
-void TGSourceMgr::PrintError(TGLoc ErrorLoc, const std::string &Msg) const {
-  raw_ostream &OS = errs();
-  
-  // First thing to do: find the current buffer containing the specified
-  // location.
-  int CurBuf = FindBufferContainingLoc(ErrorLoc);
-  assert(CurBuf != -1 && "Invalid or unspecified location!");
-  
-  PrintIncludeStack(getBufferInfo(CurBuf).IncludeLoc);
-  
-  MemoryBuffer *CurMB = getBufferInfo(CurBuf).Buffer;
-  
-  
-  OS << "Parsing " << CurMB->getBufferIdentifier() << ":"
-     << FindLineNumber(ErrorLoc, CurBuf) << ": ";
-  
-  OS << Msg << "\n";
-  
-  // Scan backward to find the start of the line.
-  const char *LineStart = ErrorLoc.getPointer();
-  while (LineStart != CurMB->getBufferStart() && 
-         LineStart[-1] != '\n' && LineStart[-1] != '\r')
-    --LineStart;
-  // Get the end of the line.
-  const char *LineEnd = ErrorLoc.getPointer();
-  while (LineEnd != CurMB->getBufferEnd() && 
-         LineEnd[0] != '\n' && LineEnd[0] != '\r')
-    ++LineEnd;
-  // Print out the line.
-  OS << std::string(LineStart, LineEnd) << "\n";
-  // Print out spaces before the caret.
-  for (const char *Pos = LineStart; Pos != ErrorLoc.getPointer(); ++Pos)
-    OS << (*Pos == '\t' ? '\t' : ' ');
-  OS << "^\n";
-}
diff --git a/utils/TableGen/TGSourceMgr.h b/utils/TableGen/TGSourceMgr.h
deleted file mode 100644 (file)
index 69fb74c..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-//===- TGSourceMgr.h - Manager for Source Buffers & Diagnostics -*- C++ -*-===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file declares the TGSourceMgr class.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef TGSOURCEMGR_H
-#define TGSOURCEMGR_H
-
-#include <string>
-#include <vector>
-#include <cassert>
-
-namespace llvm {
-  class MemoryBuffer;
-  class TGSourceMgr;
-  
-class TGLoc {
-  const char *Ptr;
-public:
-  TGLoc() : Ptr(0) {}
-  TGLoc(const TGLoc &RHS) : Ptr(RHS.Ptr) {}
-  
-  bool operator==(const TGLoc &RHS) const { return RHS.Ptr == Ptr; }
-  bool operator!=(const TGLoc &RHS) const { return RHS.Ptr != Ptr; }
-
-  const char *getPointer() const { return Ptr; }
-  
-  static TGLoc getFromPointer(const char *Ptr) {
-    TGLoc L;
-    L.Ptr = Ptr;
-    return L;
-  }
-};
-
-/// TGSourceMgr - This owns the files read by tblgen, handles include stacks,
-/// and handles printing of diagnostics.
-class TGSourceMgr {
-  struct SrcBuffer {
-    /// Buffer - The memory buffer for the file.
-    MemoryBuffer *Buffer;
-    
-    /// IncludeLoc - This is the location of the parent include, or null if at
-    /// the top level.
-    TGLoc IncludeLoc;
-  };
-  
-  /// Buffers - This is all of the buffers that we are reading from.
-  std::vector<SrcBuffer> Buffers;
-  
-  TGSourceMgr(const TGSourceMgr&);    // DO NOT IMPLEMENT
-  void operator=(const TGSourceMgr&); // DO NOT IMPLEMENT
-public:
-  TGSourceMgr() {}
-  ~TGSourceMgr();
-  
-  const SrcBuffer &getBufferInfo(unsigned i) const {
-    assert(i < Buffers.size() && "Invalid Buffer ID!");
-    return Buffers[i];
-  }
-
-  const MemoryBuffer *getMemoryBuffer(unsigned i) const {
-    assert(i < Buffers.size() && "Invalid Buffer ID!");
-    return Buffers[i].Buffer;
-  }
-  
-  TGLoc getParentIncludeLoc(unsigned i) const {
-    assert(i < Buffers.size() && "Invalid Buffer ID!");
-    return Buffers[i].IncludeLoc;
-  }
-  
-  unsigned AddNewSourceBuffer(MemoryBuffer *F, TGLoc IncludeLoc) {
-    SrcBuffer NB;
-    NB.Buffer = F;
-    NB.IncludeLoc = IncludeLoc;
-    Buffers.push_back(NB);
-    return Buffers.size()-1;
-  }
-  
-  /// FindBufferContainingLoc - Return the ID of the buffer containing the
-  /// specified location, returning -1 if not found.
-  int FindBufferContainingLoc(TGLoc Loc) const;
-  
-  /// FindLineNumber - Find the line number for the specified location in the
-  /// specified file.  This is not a fast method.
-  unsigned FindLineNumber(TGLoc Loc, int BufferID = -1) const;
-  
-  
-  /// PrintError - Emit an error message about the specified location with the
-  /// specified string.
-  void PrintError(TGLoc ErrorLoc, const std::string &Msg) const;
-  
-private:
-  void PrintIncludeStack(TGLoc IncludeLoc) const;
-};
-  
-}  // end llvm namespace
-
-#endif