15f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//===--- TextDiagnosticPrinter.h - Text Diagnostic Client -------*- 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 prints the diagnostics to
115f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// standard error.
125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//
135f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//===----------------------------------------------------------------------===//
145f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
15d37ee16367bbf8058799148d958cbf4fbabc9fb7Daniel Dunbar#ifndef LLVM_CLANG_FRONTEND_TEXT_DIAGNOSTIC_PRINTER_H_
16d37ee16367bbf8058799148d958cbf4fbabc9fb7Daniel Dunbar#define LLVM_CLANG_FRONTEND_TEXT_DIAGNOSTIC_PRINTER_H_
175f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
187bfaaaecb3113f955db31e8d8a51acffd1bc0c27Nico Weber#include "clang/Basic/Diagnostic.h"
1921a869aace45586125238fde88c477b330618a0bChandler Carruth#include "clang/Basic/LLVM.h"
2002c23ebf41ae2f70da0ba7337e05c51fbfe35f7fDouglas Gregor#include "llvm/ADT/IntrusiveRefCntPtr.h"
2130a2e16f6c27f888dd11eba6bbbae1e980078fcbChandler Carruth#include "llvm/ADT/OwningPtr.h"
22a03a5b5a84989b1cbd3917b967e8fe64f99cfa80Chris Lattner
235f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencernamespace clang {
24eace8743030d2979251a0c5ae247371cfd9056e5Daniel Dunbarclass DiagnosticOptions;
252c78b873f4f3823ae859c15674cb3d76c8554113Chris Lattnerclass LangOptions;
2621a869aace45586125238fde88c477b330618a0bChandler Carruthclass TextDiagnostic;
275f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
2878ad0b98848c17a0a11847fa1d456e2dfec8aa2fDavid Blaikieclass TextDiagnosticPrinter : public DiagnosticConsumer {
298cc488fefb2fb04bc8d5398da29f0182f97934cfChris Lattner  raw_ostream &OS;
30cfa88f893915ceb8ae4ce2f17c46c24a4d67502fDmitri Gribenko  IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts;
31eace8743030d2979251a0c5ae247371cfd9056e5Daniel Dunbar
3221a869aace45586125238fde88c477b330618a0bChandler Carruth  /// \brief Handle to the currently active text diagnostic emitter.
336f42b62b6194f53bcbc349f5d17388e1936535d7Dylan Noblesmith  OwningPtr<TextDiagnostic> TextDiag;
342c78b873f4f3823ae859c15674cb3d76c8554113Chris Lattner
35b96b6709fbf5044ab06223ebfefccd58d7aaa88bDaniel Dunbar  /// A string to prefix to error messages.
36b96b6709fbf5044ab06223ebfefccd58d7aaa88bDaniel Dunbar  std::string Prefix;
37b96b6709fbf5044ab06223ebfefccd58d7aaa88bDaniel Dunbar
3821a869aace45586125238fde88c477b330618a0bChandler Carruth  unsigned OwnsOutputStream : 1;
3921a869aace45586125238fde88c477b330618a0bChandler Carruth
405f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerpublic:
4102c23ebf41ae2f70da0ba7337e05c51fbfe35f7fDouglas Gregor  TextDiagnosticPrinter(raw_ostream &os, DiagnosticOptions *diags,
42aea364195b81f933515e8968b5254a1195eb0337Daniel Dunbar                        bool OwnsOutputStream = false);
43aea364195b81f933515e8968b5254a1195eb0337Daniel Dunbar  virtual ~TextDiagnosticPrinter();
445f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
45b96b6709fbf5044ab06223ebfefccd58d7aaa88bDaniel Dunbar  /// setPrefix - Set the diagnostic printer prefix string, which will be
46b96b6709fbf5044ab06223ebfefccd58d7aaa88bDaniel Dunbar  /// printed at the start of any diagnostics. If empty, no prefix string is
47b96b6709fbf5044ab06223ebfefccd58d7aaa88bDaniel Dunbar  /// used.
48b96b6709fbf5044ab06223ebfefccd58d7aaa88bDaniel Dunbar  void setPrefix(std::string Value) { Prefix = Value; }
49b96b6709fbf5044ab06223ebfefccd58d7aaa88bDaniel Dunbar
5021a869aace45586125238fde88c477b330618a0bChandler Carruth  void BeginSourceFile(const LangOptions &LO, const Preprocessor *PP);
5121a869aace45586125238fde88c477b330618a0bChandler Carruth  void EndSourceFile();
5221a869aace45586125238fde88c477b330618a0bChandler Carruth  void HandleDiagnostic(DiagnosticsEngine::Level Level, const Diagnostic &Info);
535f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer};
545f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
556c1cb9916e9988dcdd65b9266dbe24afd173427aDouglas Gregor} // end namespace clang
565f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
575f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#endif
58