Shih-wei Liao | 462aefd | 2010-06-04 15:32:04 -0700 | [diff] [blame] | 1 | #ifndef _SLANG_DIAGNOSTIC_BUFFER_HPP |
| 2 | # define _SLANG_DIAGNOSTIC_BUFFER_HPP |
| 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 { |
Shih-wei Liao | 462aefd | 2010-06-04 15:32:04 -0700 | [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; |
| 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 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame^] | 28 | inline const std::string &str() const { mSOS->flush(); return mDiags; } |
Shih-wei Liao | 462aefd | 2010-06-04 15:32:04 -0700 | [diff] [blame] | 29 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame^] | 30 | inline void reset() { this->mSOS->str().clear(); return; } |
Shih-wei Liao | 462aefd | 2010-06-04 15:32:04 -0700 | [diff] [blame] | 31 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame^] | 32 | virtual ~DiagnosticBuffer(); |
| 33 | }; |
| 34 | } |
Shih-wei Liao | 462aefd | 2010-06-04 15:32:04 -0700 | [diff] [blame] | 35 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame^] | 36 | #endif // _SLANG_DIAGNOSTIC_BUFFER_HPP |