/** @file VsmOpcode.hpp * * @author Roland Conybeare, Jan 2026 **/ #pragma once #include #include namespace xo { namespace scm { /** Opcode for a virtual schematika expression; * exeucted by VirtualSchematikaMachine **/ enum class vsm_opcode { /** Immediately halt virtual schematika machine. **/ halt, /** Evaluate expression in expr register **/ eval, /** Apply function in stack frame * See diagram in VirtualSchematikaMachine::_do_eval_apply_op **/ apply, /** Eval arguments to function. * See diagram in VirtualSchematikaMachine::_do_eval_apply_op **/ evalargs, /** sentinel, counts number of opcodes **/ N, }; static constexpr uint32_t n_opcode = static_cast(vsm_opcode::N); /** stringified enum value **/ const char * vsm_opcode_descr(vsm_opcode x); inline std::ostream & operator<<(std::ostream & os, vsm_opcode x) { os << vsm_opcode_descr(x); return os; } } /*namespace scm*/ } /*namespace xo*/ /* end VsmOpcode.hpp */