#ifndef ERRORS_HH #define ERRORS_HH #include "location.hh" #include #include #include #include namespace src { class Errors { public: virtual ~Errors() = default; virtual void err(Location loc, std::string_view msg) = 0; virtual void warn(Location loc, std::string_view msg) = 0; #if !defined(NDEBUG) virtual void dbg(Location loc, std::string_view msg) = 0; #else void dbg(Location, std::string_view) {} #endif [[nodiscard]] virtual uint64_t errors() const = 0; [[nodiscard]] virtual uint64_t warnings() const = 0; protected: Errors() = default; Errors(Errors const&) = delete; Errors& operator=(Errors const&) = delete; }; class ErrorsOutput { public: virtual ~ErrorsOutput() = default; virtual void println(std::string_view line) = 0; protected: ErrorsOutput() = default; ErrorsOutput(ErrorsOutput const&) = delete; ErrorsOutput& operator=(ErrorsOutput const&) = delete; }; [[nodiscard]] std::unique_ptr file_errors( std::string filename, std::shared_ptr output = nullptr); [[nodiscard]] std::unique_ptr ignore_errors(); [[nodiscard]] std::unique_ptr errors_output_ios(std::ostream& out); } // namespace src #endif // ERRORS_HH