#ifndef sk_VM_HPP #define sk_VM_HPP #include "commons.hpp" #include "Program.hpp" namespace sk { struct Frame { std::shared_ptr program; }; class VM { public: explicit VM(); virtual ~VM(); std::string string() const; void exec(std::shared_ptr program); private: std::vector m_frames; std::vector m_stack; size_t m_pc = 0; void exec(); std::shared_ptr program() const; void push(param_t param); param_t pop(); }; } #endif