#pragma once #include "interpreter_tree.hpp" #include #include namespace error_handling { inline void PrintPosition(std::ostream& out, std::pair start_position, std::pair end_position) { out << '[' << start_position.first + 1 << ", " << start_position.second + 1 << "] - [" << end_position.first + 1 << ", " << end_position.second + 1 << ']'; } inline void HandleParsingError(const std::string& message, std::pair start_position, std::pair end_position) { std::cout << "Parsing Error: " << message << " at "; PrintPosition(std::cout, start_position, end_position); std::cout << ".\n"; exit(1); } inline void HandleInternalError(const std::string& message, const std::string& place) { std::cout << "Internal Error: " << message << " at " << place << ".\n"; exit(1); } inline void HandleTypecheckError(const std::string& message, const interpreter::tokens::BaseNode& node) { // TODO: place in code std::cout << "Typecheck Error: " << message << " at "; PrintPosition(std::cout, node.start_position, node.end_position); std::cout << ".\n"; exit(1); } inline void HandleRuntimeError(const std::string& message, const interpreter::tokens::BaseNode& node) { // TODO: place in code std::cout << "Runtime Error: " << message << " at "; PrintPosition(std::cout, node.start_position, node.end_position); std::cout << ".\n"; exit(1); } // ... } // namespace error_handling