#ifndef UTILS_H #define UTILS_H #include #include #include #include #include #include #include #include "int2048/int2048.h" class InterpretException : public std::exception { public: InterpretException() {} InterpretException(const char *message) : m_message(message) {} const char *what() const noexcept override { return m_message; } ~InterpretException() noexcept override {} private: const char *m_message; }; class FatalError : public std::exception { public: FatalError(const char *message) : m_message(message) {} const char *what() const noexcept override { return m_message; } private: const char *m_message; }; enum FlowControlStatusType { BREAK, CONTINUE, RETURN }; struct FlowType { FlowControlStatusType Status; // TODO: return lists std::vector ReturnValueLists; FlowType() {} FlowType(FlowControlStatusType Status) : Status(Status) {} FlowType(FlowControlStatusType Status, std::vector ReturnValueLists) : Status(Status), ReturnValueLists(ReturnValueLists) {} }; struct NoneType {}; ZYM::int2048 Any2Int(const std::any &value); double Any2Float(const std::any &value); std::string Any2String(const std::any &value); bool Any2Bool(const std::any &value); struct RawVarible { std::string name; RawVarible() {} RawVarible(const std::string &name) : name(name) {} }; #endif