use crate::{
vm::{opcode::Operation, CompletionType},
Context, JsResult,
};
#[derive(Debug, Clone, Copy)]
pub(crate) struct Case;
impl Operation for Case {
const NAME: &'static str = "Case";
const INSTRUCTION: &'static str = "INST - Case";
fn execute(context: &mut Context<'_>) -> JsResult<CompletionType> {
let address = context.vm.read::<u32>();
let cond = context.vm.pop();
let value = context.vm.pop();
if value.strict_equals(&cond) {
context.vm.frame_mut().pc = address;
} else {
context.vm.push(value);
}
Ok(CompletionType::Normal)
}
}
#[derive(Debug, Clone, Copy)]
pub(crate) struct Default;
impl Operation for Default {
const NAME: &'static str = "Default";
const INSTRUCTION: &'static str = "INST - Default";
fn execute(context: &mut Context<'_>) -> JsResult<CompletionType> {
let exit = context.vm.read::<u32>();
let _val = context.vm.pop();
context.vm.frame_mut().pc = exit;
Ok(CompletionType::Normal)
}
}