aboutsummaryrefslogtreecommitdiffstats
path: root/include/llvm/Support/SourceMgr.h
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-07-02 22:24:20 +0000
committerChris Lattner <sabre@nondot.org>2009-07-02 22:24:20 +0000
commit2f510aed9cbd24dca1fdc5aabe27325e5ade9e1a (patch)
tree0eef4089f7d6dcd6687658ba20d4d9f0cc5aed9b /include/llvm/Support/SourceMgr.h
parentb50ea5c48f8b1ce259e034ca5c16dc14af1a582c (diff)
downloadexternal_llvm-2f510aed9cbd24dca1fdc5aabe27325e5ade9e1a.zip
external_llvm-2f510aed9cbd24dca1fdc5aabe27325e5ade9e1a.tar.gz
external_llvm-2f510aed9cbd24dca1fdc5aabe27325e5ade9e1a.tar.bz2
add an explicit class for holding llvm::SourceMgr diagnostics and use
it to print them. This gives us column numbers in the diag line. Before: t.s:4: error: unexpected token in argument list mov %eax %edx ^ now: t.s:4:11: error: unexpected token in argument list mov %eax %edx ^ git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@74732 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/Support/SourceMgr.h')
-rw-r--r--include/llvm/Support/SourceMgr.h42
1 files changed, 36 insertions, 6 deletions
diff --git a/include/llvm/Support/SourceMgr.h b/include/llvm/Support/SourceMgr.h
index 23044a8..0260d2d 100644
--- a/include/llvm/Support/SourceMgr.h
+++ b/include/llvm/Support/SourceMgr.h
@@ -7,9 +7,9 @@
//
//===----------------------------------------------------------------------===//
//
-// 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.
+// This file declares the SMLoc, SMDiagnostic and SourceMgr classes. This
+// provides a simple substrate for diagnostics, #include handling, and other low
+// level things for simple parsers.
//
//===----------------------------------------------------------------------===//
@@ -23,6 +23,8 @@
namespace llvm {
class MemoryBuffer;
class SourceMgr;
+ class SMDiagnostic;
+ class raw_ostream;
class SMLoc {
const char *Ptr;
@@ -44,8 +46,8 @@ public:
}
};
-/// SourceMgr - This owns the files read by tblgen, handles include stacks,
-/// and handles printing of diagnostics.
+/// SourceMgr - This owns the files read by a parser, handles include stacks,
+/// and handles diagnostic wrangling.
class SourceMgr {
struct SrcBuffer {
/// Buffer - The memory buffer for the file.
@@ -117,7 +119,35 @@ public:
void PrintMessage(SMLoc Loc, const std::string &Msg, const char *Type) const;
private:
- void PrintIncludeStack(SMLoc IncludeLoc) const;
+ void PrintIncludeStack(SMLoc IncludeLoc, raw_ostream &OS) const;
+};
+
+
+/// SMDiagnostic - Instances of this class encapsulate one diagnostic report,
+/// allowing printing to a raw_ostream as a caret diagnostic.
+class SMDiagnostic {
+ std::string Filename;
+ int LineNo, ColumnNo;
+ std::string Message, LineContents;
+public:
+ SMDiagnostic() : LineNo(0), ColumnNo(0) {}
+ SMDiagnostic(const std::string &FN, int Line, int Col,
+ const std::string &Msg, const std::string &LineStr)
+ : Filename(FN), LineNo(Line), ColumnNo(Col), Message(Msg),
+ LineContents(LineStr) {}
+ SMDiagnostic(const SMDiagnostic &RHS) {
+ operator=(RHS);
+ }
+
+ void operator=(const SMDiagnostic &E) {
+ Filename = E.Filename;
+ LineNo = E.LineNo;
+ ColumnNo = E.ColumnNo;
+ Message = E.Message;
+ LineContents = E.LineContents;
+ }
+
+ void Print(const char *ProgName, raw_ostream &S);
};
} // end llvm namespace