#ifndef COMPILER_STREAMERRORHANDLER_H_INCLUDED #define COMPILER_STREAMERRORHANDLER_H_INCLUDED #include "errorhandler.hpp" namespace Compiler { class ContextOverride; /// \brief Error handler implementation: Write errors into logging stream class StreamErrorHandler : public ErrorHandler { std::string mContext; friend class ContextOverride; // not implemented StreamErrorHandler(const StreamErrorHandler&); StreamErrorHandler& operator=(const StreamErrorHandler&); void report(const std::string& message, const TokenLoc& loc, Type type) override; ///< Report error to the user. void report(const std::string& message, Type type) override; ///< Report a file related error public: void setContext(const std::string& context); // constructors StreamErrorHandler(); ///< constructor }; class ContextOverride { StreamErrorHandler& mHandler; const std::string mContext; public: ContextOverride(StreamErrorHandler& handler, const std::string& context); ContextOverride(const ContextOverride&) = delete; ContextOverride& operator=(const ContextOverride&) = delete; ~ContextOverride(); }; } #endif