Line data Source code
1 : /* Cam Mannett 2020 2 : * 3 : * See LICENSE file 4 : */ 5 : 6 : #include "malbolge/exception.hpp" 7 : 8 : using namespace malbolge; 9 : using namespace std::string_literals; 10 : 11 : namespace 12 : { 13 24 : std::error_code to_ec(int ec) 14 : { 15 24 : return std::error_code{ec, std::system_category()}; 16 : } 17 : } 18 : 19 115 : std::string malbolge::to_string(const optional_source_location& loc) 20 : { 21 115 : if (loc) { 22 182 : return "{l:" + std::to_string(loc->line) + 23 364 : ", c:" + std::to_string(loc->column) + "}"; 24 : } 25 : 26 24 : return "{}"; 27 : } 28 : 29 109 : parse_exception::parse_exception(std::string msg, 30 109 : optional_source_location loc) : 31 218 : basic_exception{"Parse error " + to_string(loc) + ": " + msg}, 32 109 : msg_{std::move(msg)}, 33 327 : loc_{loc} 34 109 : {} 35 : 36 10 : execution_exception::execution_exception(const std::string& msg, 37 10 : std::size_t execution_step) : 38 20 : basic_exception{"Execution error (" + std::to_string(execution_step) + 39 20 : "): " + msg}, 40 20 : step_{execution_step} 41 10 : {} 42 : 43 12 : system_exception::system_exception(const std::string& msg, int error_code) : 44 24 : basic_exception{"System error: " + to_ec(error_code).message() + " - " + 45 12 : msg}, 46 36 : code_{to_ec(error_code)} 47 12 : {} 48 : 49 12 : system_exception::system_exception(const std::string& msg, std::errc error_code) : 50 12 : system_exception{msg, static_cast<int>(error_code)} 51 12 : {}