summaryrefslogtreecommitdiffstats
path: root/include/llvm/Support/SourceMgr.h
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 /include/llvm/Support/SourceMgr.h
parente372333597fa2b59469182c5aa8d2296fdbf2847 (diff)
downloadexternal_llvm-099e198ae84c1a6cfe2a7c79ee9f47fa67caac8f.zip
external_llvm-099e198ae84c1a6cfe2a7c79ee9f47fa67caac8f.tar.gz
external_llvm-099e198ae84c1a6cfe2a7c79ee9f47fa67caac8f.tar.bz2
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 'include/llvm/Support/SourceMgr.h')
-rw-r--r--include/llvm/Support/SourceMgr.h108
1 files changed, 108 insertions, 0 deletions
diff --git a/include/llvm/Support/SourceMgr.h b/include/llvm/Support/SourceMgr.h
new file mode 100644
index 0000000..60bf780
--- /dev/null
+++ b/include/llvm/Support/SourceMgr.h
@@ -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