47 lines
1.5 KiB
Rust
47 lines
1.5 KiB
Rust
use crate::value::*;
|
|
use crate::{BytecodeReader, Step};
|
|
|
|
impl<'gc> crate::Vm<'gc> {
|
|
#[inline(always)]
|
|
pub(crate) fn op_jump_if_false(
|
|
&mut self,
|
|
reader: &mut BytecodeReader<'_>,
|
|
mc: &gc_arena::Mutation<'gc>,
|
|
) -> Step {
|
|
let offset = reader.read_i32();
|
|
let cond = self.try_force::<StrictValue>(reader, mc)?;
|
|
if cond.as_inline::<bool>() == Some(false) {
|
|
reader.set_pc(((reader.pc() as isize) + (offset as isize)) as usize);
|
|
}
|
|
Step::Continue(())
|
|
}
|
|
|
|
#[inline(always)]
|
|
pub(crate) fn op_jump_if_true(
|
|
&mut self,
|
|
reader: &mut BytecodeReader<'_>,
|
|
mc: &gc_arena::Mutation<'gc>,
|
|
) -> Step {
|
|
let offset = reader.read_i32();
|
|
let cond = self.try_force::<StrictValue>(reader, mc)?;
|
|
if cond.as_inline::<bool>() == Some(true) {
|
|
reader.set_pc(((reader.pc() as isize) + (offset as isize)) as usize);
|
|
}
|
|
Step::Continue(())
|
|
}
|
|
|
|
#[inline(always)]
|
|
pub(crate) fn op_jump(&mut self, reader: &mut BytecodeReader<'_>) -> Step {
|
|
let offset = reader.read_i32();
|
|
reader.set_pc(((reader.pc() as isize) + (offset as isize)) as usize);
|
|
Step::Continue(())
|
|
}
|
|
|
|
#[inline(always)]
|
|
pub(crate) fn op_assert(&mut self, reader: &mut BytecodeReader<'_>) -> Step {
|
|
let _raw_idx = reader.read_u32();
|
|
let _span_id = reader.read_u32();
|
|
todo!("implement Assert (force TOS)");
|
|
}
|
|
}
|