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 21namespace llvm { 22// Forward declarations. 23class Module; 24class raw_ostream; 25class StringRef; 26class Twine; 27class Value; 28 29/// \brief Interface for custom diagnostic printing. 30class DiagnosticPrinter { 31public: 32 virtual ~DiagnosticPrinter() {} 33 34 // Simple types. 35 virtual DiagnosticPrinter &operator<<(char C) = 0; 36 virtual DiagnosticPrinter &operator<<(unsigned char C) = 0; 37 virtual DiagnosticPrinter &operator<<(signed char C) = 0; 38 virtual DiagnosticPrinter &operator<<(StringRef Str) = 0; 39 virtual DiagnosticPrinter &operator<<(const char *Str) = 0; 40 virtual DiagnosticPrinter &operator<<(const std::string &Str) = 0; 41 virtual DiagnosticPrinter &operator<<(unsigned long N) = 0; 42 virtual DiagnosticPrinter &operator<<(long N) = 0; 43 virtual DiagnosticPrinter &operator<<(unsigned long long N) = 0; 44 virtual DiagnosticPrinter &operator<<(long long N) = 0; 45 virtual DiagnosticPrinter &operator<<(const void *P) = 0; 46 virtual DiagnosticPrinter &operator<<(unsigned int N) = 0; 47 virtual DiagnosticPrinter &operator<<(int N) = 0; 48 virtual DiagnosticPrinter &operator<<(double N) = 0; 49 virtual DiagnosticPrinter &operator<<(const Twine &Str) = 0; 50 51 // IR related types. 52 virtual DiagnosticPrinter &operator<<(const Value &V) = 0; 53 virtual DiagnosticPrinter &operator<<(const Module &M) = 0; 54}; 55 56/// \brief Basic diagnostic printer that uses an underlying raw_ostream. 57class DiagnosticPrinterRawOStream : public DiagnosticPrinter { 58protected: 59 raw_ostream &Stream; 60 61public: 62 DiagnosticPrinterRawOStream(raw_ostream &Stream) : Stream(Stream) {}; 63 64 // Simple types. 65 DiagnosticPrinter &operator<<(char C) override; 66 DiagnosticPrinter &operator<<(unsigned char C) override; 67 DiagnosticPrinter &operator<<(signed char C) override; 68 DiagnosticPrinter &operator<<(StringRef Str) override; 69 DiagnosticPrinter &operator<<(const char *Str) override; 70 DiagnosticPrinter &operator<<(const std::string &Str) override; 71 DiagnosticPrinter &operator<<(unsigned long N) override; 72 DiagnosticPrinter &operator<<(long N) override; 73 DiagnosticPrinter &operator<<(unsigned long long N) override; 74 DiagnosticPrinter &operator<<(long long N) override; 75 DiagnosticPrinter &operator<<(const void *P) override; 76 DiagnosticPrinter &operator<<(unsigned int N) override; 77 DiagnosticPrinter &operator<<(int N) override; 78 DiagnosticPrinter &operator<<(double N) override; 79 DiagnosticPrinter &operator<<(const Twine &Str) override; 80 81 // IR related types. 82 DiagnosticPrinter &operator<<(const Value &V) override; 83 DiagnosticPrinter &operator<<(const Module &M) override; 84}; 85} // End namespace llvm 86 87#endif 88