#ifndef fk_VM_HPP #define fk_VM_HPP #include "commons.hpp" #include "Program.hpp" namespace fk { struct Frame { std::shared_ptr program; }; class VM { public: explicit VM(); virtual ~VM(); Frame frame() const { return m_frames.back(); } void mount(std::shared_ptr program); void run(); std::string string() const; private: addr_t m_pc = 0; std::vector m_frames; std::vector m_stack; void push(addr_t addr); addr_t top(); addr_t pop(); }; } #endif