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