slang_diagnostic_buffer.h revision 462aefd62cc646d2ff753c1d003ef3cd7bbea26
1462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao#ifndef _SLANG_DIAGNOSTIC_BUFFER_HPP
2462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao#   define _SLANG_DIAGNOSTIC_BUFFER_HPP
3462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
4462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao#include <string>
5462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
6462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao#include "llvm/Support/raw_ostream.h"       /* for class llvm::raw_ostream and llvm::raw_string_ostream */
7462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
8462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao#include "clang/Basic/Diagnostic.h"     /* for class clang::Diagnostic, class clang::DiagnosticClient, class clang::DiagnosticInfo  */
9462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
10462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaonamespace llvm {
11462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
12462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaoclass raw_string_ostream;
13462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
14462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao}   /* namespace llvm */
15462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
16462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaonamespace slang {
17462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
18462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaousing namespace clang;
19462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
20462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao/* The diagnostics client instance (for reading the processed diagnostics) */
21462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaoclass DiagnosticBuffer : public DiagnosticClient {
22462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaoprivate:
23462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao    std::string mDiags;
24462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao    llvm::raw_string_ostream* mSOS;
25462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
26462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaopublic:
27462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao    DiagnosticBuffer();
28462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
29462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao    virtual void HandleDiagnostic(Diagnostic::Level DiagLevel, const DiagnosticInfo& Info);
30462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
31462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao    inline const std::string& str() const { mSOS->flush(); return mDiags; }
32462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
33462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao    inline void reset() { this->mSOS->str().clear(); return; }
34462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
35462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao    virtual ~DiagnosticBuffer();
36462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao};  /* class DiagnosticBuffer */
37462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
38462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
39462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao}   /* namespace slang */
40462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
41462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao#endif  /* _SLANG_DIAGNOSTIC_BUFFER_HPP */
42