use crate::opcode::OpCode; pub fn operand_size(opcode: OpCode) -> usize { match opcode { OpCode::PushConst => 4, OpCode::PushI32 => 4, OpCode::PushI64 => 8, OpCode::PushF64 => 8, OpCode::PushBool => 1, OpCode::PopN => 4, OpCode::Jmp | OpCode::JmpIfFalse | OpCode::JmpIfTrue => 4, OpCode::GetGlobal | OpCode::SetGlobal => 4, OpCode::GetLocal | OpCode::SetLocal => 4, OpCode::Call => 8, // addr(u32) + args_count(u32) OpCode::Syscall => 4, _ => 0, } } pub fn is_jump(opcode: OpCode) -> bool { match opcode { OpCode::Jmp | OpCode::JmpIfFalse | OpCode::JmpIfTrue => true, _ => false, } } pub fn has_immediate(opcode: OpCode) -> bool { operand_size(opcode) > 0 }