zonr | 6315f76 | 2010-10-05 15:35:14 +0800 | [diff] [blame] | 1 | #ifndef _SLANG_DIAGNOSTIC_BUFFER_H |
2 | #define _SLANG_DIAGNOSTIC_BUFFER_H | ||||
Shih-wei Liao | 462aefd | 2010-06-04 15:32:04 -0700 | [diff] [blame] | 3 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 4 | #include "llvm/Support/raw_ostream.h" |
5 | |||||
6 | #include "clang/Basic/Diagnostic.h" | ||||
7 | |||||
Shih-wei Liao | 462aefd | 2010-06-04 15:32:04 -0700 | [diff] [blame] | 8 | #include <string> |
9 | |||||
Shih-wei Liao | 462aefd | 2010-06-04 15:32:04 -0700 | [diff] [blame] | 10 | namespace llvm { |
zonr | 6315f76 | 2010-10-05 15:35:14 +0800 | [diff] [blame] | 11 | class raw_string_ostream; |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 12 | } |
Shih-wei Liao | 462aefd | 2010-06-04 15:32:04 -0700 | [diff] [blame] | 13 | |
14 | namespace slang { | ||||
15 | |||||
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 16 | // The diagnostics client instance (for reading the processed diagnostics) |
17 | class DiagnosticBuffer : public clang::DiagnosticClient { | ||||
18 | private: | ||||
19 | std::string mDiags; | ||||
zonr | 6315f76 | 2010-10-05 15:35:14 +0800 | [diff] [blame] | 20 | llvm::raw_string_ostream *mSOS; |
Shih-wei Liao | 462aefd | 2010-06-04 15:32:04 -0700 | [diff] [blame] | 21 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 22 | public: |
23 | DiagnosticBuffer(); | ||||
Shih-wei Liao | 462aefd | 2010-06-04 15:32:04 -0700 | [diff] [blame] | 24 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 25 | virtual void HandleDiagnostic(clang::Diagnostic::Level DiagLevel, |
26 | const clang::DiagnosticInfo& Info); | ||||
Shih-wei Liao | 462aefd | 2010-06-04 15:32:04 -0700 | [diff] [blame] | 27 | |
zonr | 6315f76 | 2010-10-05 15:35:14 +0800 | [diff] [blame] | 28 | inline const std::string &str() const { |
29 | mSOS->flush(); | ||||
30 | return mDiags; | ||||
31 | } | ||||
Shih-wei Liao | 462aefd | 2010-06-04 15:32:04 -0700 | [diff] [blame] | 32 | |
zonr | 6315f76 | 2010-10-05 15:35:14 +0800 | [diff] [blame] | 33 | inline void reset() { |
34 | this->mSOS->str().clear(); | ||||
35 | return; | ||||
36 | } | ||||
Shih-wei Liao | 462aefd | 2010-06-04 15:32:04 -0700 | [diff] [blame] | 37 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 38 | virtual ~DiagnosticBuffer(); |
39 | }; | ||||
40 | } | ||||
Shih-wei Liao | 462aefd | 2010-06-04 15:32:04 -0700 | [diff] [blame] | 41 | |
zonr | 6315f76 | 2010-10-05 15:35:14 +0800 | [diff] [blame] | 42 | #endif // _SLANG_DIAGNOSTIC_BUFFER_H |