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