#include "error.hpp" const char* compiler_error::what() const noexcept { return "an error occured while compiling the program"; } void compiler_error::print_about(std::ostream& to) { to << what() << ": "; to << description << std::endl; } void compiler_error::print_location(std::ostream& to, file_mgr& fm, bool highlight) { if(!loc) return; to << "occuring on line " << loc->begin.line << ":" << std::endl; fm.print_location(to, *loc, highlight); } void compiler_error::pretty_print(std::ostream& to, file_mgr& fm) { print_about(to); print_location(to, fm); } const char* type_error::what() const noexcept { return "an error occured while checking the types of the program"; } void type_error::pretty_print(std::ostream& to, file_mgr& fm) { print_about(to); print_location(to, fm, true); } void unification_error::pretty_print(std::ostream& to, file_mgr& fm, type_mgr& mgr) { type_error::pretty_print(to, fm); to << "the expected type was:" << std::endl; to << " \033[34m"; left->print(mgr, to); to << std::endl << "\033[0mwhile the actual type was:" << std::endl; to << " \033[32m"; right->print(mgr, to); to << "\033[0m" << std::endl; }