aboutsummaryrefslogtreecommitdiff
path: root/utils/TableGen/TGSourceMgr.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-06-21 03:36:54 +0000
committerChris Lattner <sabre@nondot.org>2009-06-21 03:36:54 +0000
commit099e198ae84c1a6cfe2a7c79ee9f47fa67caac8f (patch)
tree8de47c36016cb9a098f87d7e74b19b3ed13533db /utils/TableGen/TGSourceMgr.cpp
parente372333597fa2b59469182c5aa8d2296fdbf2847 (diff)
move TGSourceMgr class out of TableGen into libsupport.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73842 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/TableGen/TGSourceMgr.cpp')
-rw-r--r--utils/TableGen/TGSourceMgr.cpp105
1 files changed, 0 insertions, 105 deletions
diff --git a/utils/TableGen/TGSourceMgr.cpp b/utils/TableGen/TGSourceMgr.cpp
deleted file mode 100644
index 42bc75246c..0000000000
--- a/utils/TableGen/TGSourceMgr.cpp
+++ /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";
-}