blob: 3ed48be6f4895e8dc2228ac848f53edae9d05e39 [file] [log] [blame]
zonr6315f762010-10-05 15:35:14 +08001#ifndef _SLANG_DIAGNOSTIC_BUFFER_H
2#define _SLANG_DIAGNOSTIC_BUFFER_H
Shih-wei Liao462aefd2010-06-04 15:32:04 -07003
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 {
zonr6315f762010-10-05 15:35:14 +080011 class 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;
zonr6315f762010-10-05 15:35:14 +080020 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
zonr6315f762010-10-05 15:35:14 +080028 inline const std::string &str() const {
29 mSOS->flush();
30 return mDiags;
31 }
Shih-wei Liao462aefd2010-06-04 15:32:04 -070032
zonr6315f762010-10-05 15:35:14 +080033 inline void reset() {
34 this->mSOS->str().clear();
35 return;
36 }
Shih-wei Liao462aefd2010-06-04 15:32:04 -070037
Shih-wei Liao9ef2f782010-10-01 12:31:37 -070038 virtual ~DiagnosticBuffer();
39};
40}
Shih-wei Liao462aefd2010-06-04 15:32:04 -070041
zonr6315f762010-10-05 15:35:14 +080042#endif // _SLANG_DIAGNOSTIC_BUFFER_H