1 //===- llvm/Support/DiagnosticPrinter.h - Diagnostic Printer ----*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file declares the main interface for printer backend diagnostic. 11 // 12 // Clients of the backend diagnostics should overload this interface based 13 // on their needs. 14 //===----------------------------------------------------------------------===// 15 16 #ifndef LLVM_IR_DIAGNOSTICPRINTER_H 17 #define LLVM_IR_DIAGNOSTICPRINTER_H 18 19 #include <string> 20 21 namespace llvm { 22 // Forward declarations. 23 class Module; 24 class raw_ostream; 25 class SMDiagnostic; 26 class StringRef; 27 class Twine; 28 class Value; 29 30 /// \brief Interface for custom diagnostic printing. 31 class DiagnosticPrinter { 32 public: ~DiagnosticPrinter()33 virtual ~DiagnosticPrinter() {} 34 35 // Simple types. 36 virtual DiagnosticPrinter &operator<<(char C) = 0; 37 virtual DiagnosticPrinter &operator<<(unsigned char C) = 0; 38 virtual DiagnosticPrinter &operator<<(signed char C) = 0; 39 virtual DiagnosticPrinter &operator<<(StringRef Str) = 0; 40 virtual DiagnosticPrinter &operator<<(const char *Str) = 0; 41 virtual DiagnosticPrinter &operator<<(const std::string &Str) = 0; 42 virtual DiagnosticPrinter &operator<<(unsigned long N) = 0; 43 virtual DiagnosticPrinter &operator<<(long N) = 0; 44 virtual DiagnosticPrinter &operator<<(unsigned long long N) = 0; 45 virtual DiagnosticPrinter &operator<<(long long N) = 0; 46 virtual DiagnosticPrinter &operator<<(const void *P) = 0; 47 virtual DiagnosticPrinter &operator<<(unsigned int N) = 0; 48 virtual DiagnosticPrinter &operator<<(int N) = 0; 49 virtual DiagnosticPrinter &operator<<(double N) = 0; 50 virtual DiagnosticPrinter &operator<<(const Twine &Str) = 0; 51 52 // IR related types. 53 virtual DiagnosticPrinter &operator<<(const Value &V) = 0; 54 virtual DiagnosticPrinter &operator<<(const Module &M) = 0; 55 56 // Other types. 57 virtual DiagnosticPrinter &operator<<(const SMDiagnostic &Diag) = 0; 58 }; 59 60 /// \brief Basic diagnostic printer that uses an underlying raw_ostream. 61 class DiagnosticPrinterRawOStream : public DiagnosticPrinter { 62 protected: 63 raw_ostream &Stream; 64 65 public: DiagnosticPrinterRawOStream(raw_ostream & Stream)66 DiagnosticPrinterRawOStream(raw_ostream &Stream) : Stream(Stream) {} 67 68 // Simple types. 69 DiagnosticPrinter &operator<<(char C) override; 70 DiagnosticPrinter &operator<<(unsigned char C) override; 71 DiagnosticPrinter &operator<<(signed char C) override; 72 DiagnosticPrinter &operator<<(StringRef Str) override; 73 DiagnosticPrinter &operator<<(const char *Str) override; 74 DiagnosticPrinter &operator<<(const std::string &Str) override; 75 DiagnosticPrinter &operator<<(unsigned long N) override; 76 DiagnosticPrinter &operator<<(long N) override; 77 DiagnosticPrinter &operator<<(unsigned long long N) override; 78 DiagnosticPrinter &operator<<(long long N) override; 79 DiagnosticPrinter &operator<<(const void *P) override; 80 DiagnosticPrinter &operator<<(unsigned int N) override; 81 DiagnosticPrinter &operator<<(int N) override; 82 DiagnosticPrinter &operator<<(double N) override; 83 DiagnosticPrinter &operator<<(const Twine &Str) override; 84 85 // IR related types. 86 DiagnosticPrinter &operator<<(const Value &V) override; 87 DiagnosticPrinter &operator<<(const Module &M) override; 88 89 // Other types. 90 DiagnosticPrinter &operator<<(const SMDiagnostic &Diag) override; 91 }; 92 } // End namespace llvm 93 94 #endif 95