15f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//===--- TextDiagnosticBuffer.h - Buffer Text Diagnostics -------*- C++ -*-===//
25f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//
35f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//                     The LLVM Compiler Infrastructure
45f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//
50bc735ffcfb223c0186419547abaa5c84482663eChris Lattner// This file is distributed under the University of Illinois Open Source
60bc735ffcfb223c0186419547abaa5c84482663eChris Lattner// License. See LICENSE.TXT for details.
75f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//
85f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//===----------------------------------------------------------------------===//
95f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//
105f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// This is a concrete diagnostic client, which buffers the diagnostic messages.
115f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//
125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//===----------------------------------------------------------------------===//
135f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
14d37ee16367bbf8058799148d958cbf4fbabc9fb7Daniel Dunbar#ifndef LLVM_CLANG_FRONTEND_TEXT_DIAGNOSTIC_BUFFER_H_
15d37ee16367bbf8058799148d958cbf4fbabc9fb7Daniel Dunbar#define LLVM_CLANG_FRONTEND_TEXT_DIAGNOSTIC_BUFFER_H_
165f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
177bfaaaecb3113f955db31e8d8a51acffd1bc0c27Nico Weber#include "clang/Basic/Diagnostic.h"
185f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include <vector>
195f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
205f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencernamespace clang {
215f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
225f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerclass Preprocessor;
235f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerclass SourceManager;
245f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
2578ad0b98848c17a0a11847fa1d456e2dfec8aa2fDavid Blaikieclass TextDiagnosticBuffer : public DiagnosticConsumer {
265f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerpublic:
275f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer  typedef std::vector<std::pair<SourceLocation, std::string> > DiagList;
285f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer  typedef DiagList::iterator iterator;
295f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer  typedef DiagList::const_iterator const_iterator;
305f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerprivate:
316bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  DiagList Errors, Warnings, Remarks, Notes;
325f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerpublic:
335f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer  const_iterator err_begin() const  { return Errors.begin(); }
345f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer  const_iterator err_end() const    { return Errors.end(); }
355f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
365f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer  const_iterator warn_begin() const { return Warnings.begin(); }
375f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer  const_iterator warn_end() const   { return Warnings.end(); }
385f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
396bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  const_iterator remark_begin() const { return Remarks.begin(); }
406bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  const_iterator remark_end() const   { return Remarks.end(); }
416bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
42233f74b29b2864d5984e13f3ae10a21404ef82e8Douglas Gregor  const_iterator note_begin() const { return Notes.begin(); }
43233f74b29b2864d5984e13f3ae10a21404ef82e8Douglas Gregor  const_iterator note_end() const   { return Notes.end(); }
44233f74b29b2864d5984e13f3ae10a21404ef82e8Douglas Gregor
45651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  void HandleDiagnostic(DiagnosticsEngine::Level DiagLevel,
46651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines                        const Diagnostic &Info) override;
47c238955f09f3bce9386e6553d5d12f79e8cc2b08Daniel Dunbar
48c238955f09f3bce9386e6553d5d12f79e8cc2b08Daniel Dunbar  /// FlushDiagnostics - Flush the buffered diagnostics to an given
49c238955f09f3bce9386e6553d5d12f79e8cc2b08Daniel Dunbar  /// diagnostic engine.
50d6471f7c1921c7802804ce3ff6fe9768310f72b9David Blaikie  void FlushDiagnostics(DiagnosticsEngine &Diags) const;
515f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer};
525f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
535f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer} // end namspace clang
545f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
555f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#endif
56