better type assertion ergonomic

This commit is contained in:
2026-04-20 17:57:54 +08:00
parent 581c333070
commit 11b0b8a78e
13 changed files with 399 additions and 258 deletions
+10 -10
View File
@@ -1,4 +1,4 @@
use crate::{BytecodeReader, StepResult};
use crate::{BytecodeReader, Step};
impl<'gc> crate::Vm<'gc> {
#[inline(always)]
@@ -6,16 +6,16 @@ impl<'gc> crate::Vm<'gc> {
&mut self,
reader: &mut BytecodeReader<'_>,
mc: &gc_arena::Mutation<'gc>,
) -> StepResult {
) -> Step {
let offset = reader.read_i32();
if let Some(step) = self.try_force(0, reader, mc) {
return step;
}
let cond = self.pop_stack();
let cond = self.pop();
if cond.as_inline::<bool>() == Some(false) {
reader.set_pc(((reader.pc() as isize) + (offset as isize)) as usize);
}
StepResult::Continue
Step::Continue
}
#[inline(always)]
@@ -23,27 +23,27 @@ impl<'gc> crate::Vm<'gc> {
&mut self,
reader: &mut BytecodeReader<'_>,
mc: &gc_arena::Mutation<'gc>,
) -> StepResult {
) -> Step {
let offset = reader.read_i32();
if let Some(step) = self.try_force(0, reader, mc) {
return step;
}
let cond = self.pop_stack();
let cond = self.pop();
if cond.as_inline::<bool>() == Some(true) {
reader.set_pc(((reader.pc() as isize) + (offset as isize)) as usize);
}
StepResult::Continue
Step::Continue
}
#[inline(always)]
pub(crate) fn op_jump(&mut self, reader: &mut BytecodeReader<'_>) -> StepResult {
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);
StepResult::Continue
Step::Continue
}
#[inline(always)]
pub(crate) fn op_assert(&mut self, reader: &mut BytecodeReader<'_>) -> StepResult {
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)");