blob: 6c8bfdf11a41429322846677350fcb09688b873e [file] [log] [blame]
Shih-wei Liao462aefd2010-06-04 15:32:04 -07001#ifndef _SLANG_DIAGNOSTIC_BUFFER_HPP
2# define _SLANG_DIAGNOSTIC_BUFFER_HPP
3
Shih-wei Liao9ef2f782010-10-01 12:31:37 -07004#include "llvm/Support/raw_ostream.h"
5
6#include "clang/Basic/Diagnostic.h"
7
Shih-wei Liao462aefd2010-06-04 15:32:04 -07008#include <string>
9
Shih-wei Liao462aefd2010-06-04 15:32:04 -070010namespace llvm {
Shih-wei Liao462aefd2010-06-04 15:32:04 -070011class raw_string_ostream;
Shih-wei Liao9ef2f782010-10-01 12:31:37 -070012}
Shih-wei Liao462aefd2010-06-04 15:32:04 -070013
14namespace slang {
15
Shih-wei Liao9ef2f782010-10-01 12:31:37 -070016// The diagnostics client instance (for reading the processed diagnostics)
17class DiagnosticBuffer : public clang::DiagnosticClient {
18 private:
19 std::string mDiags;
20 llvm::raw_string_ostream* mSOS;
Shih-wei Liao462aefd2010-06-04 15:32:04 -070021
Shih-wei Liao9ef2f782010-10-01 12:31:37 -070022 public:
23 DiagnosticBuffer();
Shih-wei Liao462aefd2010-06-04 15:32:04 -070024
Shih-wei Liao9ef2f782010-10-01 12:31:37 -070025 virtual void HandleDiagnostic(clang::Diagnostic::Level DiagLevel,
26 const clang::DiagnosticInfo& Info);
Shih-wei Liao462aefd2010-06-04 15:32:04 -070027
Shih-wei Liao9ef2f782010-10-01 12:31:37 -070028 inline const std::string &str() const { mSOS->flush(); return mDiags; }
Shih-wei Liao462aefd2010-06-04 15:32:04 -070029
Shih-wei Liao9ef2f782010-10-01 12:31:37 -070030 inline void reset() { this->mSOS->str().clear(); return; }
Shih-wei Liao462aefd2010-06-04 15:32:04 -070031
Shih-wei Liao9ef2f782010-10-01 12:31:37 -070032 virtual ~DiagnosticBuffer();
33};
34}
Shih-wei Liao462aefd2010-06-04 15:32:04 -070035
Shih-wei Liao9ef2f782010-10-01 12:31:37 -070036#endif // _SLANG_DIAGNOSTIC_BUFFER_HPP