#pragma once #include "type.hpp" #include "../parser/parser.hpp" #include #include namespace Solstice { class TypeChecker { std::unordered_map variables; std::unordered_map types; std::unordered_map addOverloads; std::unordered_map subtractOverloads; std::unordered_map multiplyOverloads; std::unordered_map divideOverloads; std::unordered_map equalOverloads; std::unordered_map notEqualOverloads; std::unordered_map greaterThanOverloads; std::unordered_map lesserThanOverloads; Node& input; bool inFunction = false; void initOverloads(); void checkLiteralNodeType(Node& node); void checkIdentifierNodeType(Node& node); void checkTupleNodeType(Node& node); void checkBindNodeType(Node& node); void checkFunctionBindNodeType(Node& node); void checkSetNodeType(Node& node); void checkCodeBlockType(Node& node); void checkNodeType(Node& node); public: TypeChecker() = delete; TypeChecker(Node& node) : input(node) { initOverloads(); } void checkTypes(); }; }