#include "arch.hpp" #include "vm.hpp" using namespace sliger; size_t VM::instruction_size(size_t i) const { switch (static_cast(this->program.at(i))) { case Op::Nop: case Op::PushNull: return 1; case Op::PushInt: case Op::PushBool: return 2; case Op::PushString: { auto string_length = this->program.at(i + 1); return 2 + string_length; } case Op::PushPtr: return 2; case Op::Pop: return 1; case Op::ReserveStatic: case Op::LoadStatic: case Op::StoreStatic: case Op::LoadLocal: case Op::StoreLocal: case Op::Call: return 2; case Op::Return: case Op::Jump: case Op::JumpIfTrue: return 1; case Op::Builtin: return 2; case Op::Duplicate: case Op::Swap: case Op::Add: case Op::Subtract: case Op::Multiply: case Op::Divide: case Op::Remainder: case Op::Equal: case Op::LessThan: case Op::And: case Op::Or: case Op::Xor: case Op::Not: return 1; case Op::SourceMap: return 4; } return 1; }