From d90fd8d681dc755c09bf6d9c89d6f443e9485305 Mon Sep 17 00:00:00 2001 From: imxyy_soope_ Date: Fri, 10 Apr 2026 21:25:32 +0800 Subject: [PATCH] minor changes --- fix-vm/src/lib.rs | 16 +++++++++------- fix-vm/src/value.rs | 4 +--- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/fix-vm/src/lib.rs b/fix-vm/src/lib.rs index c56cc38..76d14ab 100644 --- a/fix-vm/src/lib.rs +++ b/fix-vm/src/lib.rs @@ -422,12 +422,10 @@ impl Vm { self.fuel -= 1; let byte = self.ctx.bytecode()[self.pc]; - if likely_stable::unlikely(!(0..Op::Illegal as u8).contains(&byte)) { + if !likely_stable::likely((0..Op::Illegal as u8).contains(&byte)) { panic!("unknown opcode: {byte:#04x}") } - let op = unsafe { - std::mem::transmute::(byte) - }; + let op = unsafe { std::mem::transmute::(byte) }; // let Ok(op) = Op::try_from_primitive(self.ctx.bytecode()[self.pc]) // .map_err(|err| panic!("unknown opcode: {:#04x}", err.number)); self.pc += 1; @@ -1105,7 +1103,7 @@ impl Vm { return self.handle_return(); } - Illegal => unreachable!() + Illegal => unreachable!(), } Action::Continue @@ -1294,13 +1292,13 @@ impl Vm { #[inline] fn force_tos(&mut self) -> Action { loop { - let (run, target_depth) = self.arena.mutate_root(|_mc, root| { + let (run, target_depth) = self.arena.mutate_root(|mc, root| { let thunk = root.stack.tos_mut().expect("stack underflow"); let Some(thunk_state) = thunk.as_gc::() else { return (false, 0); }; - match *thunk_state.borrow() { + let ret = match *thunk_state.borrow() { ThunkState::Pending { ip, env, with_env } => { root.frames .push(CallFrame { @@ -1320,7 +1318,11 @@ impl Vm { (false, 0) } ThunkState::Blackhole => todo!("force_tos"), + }; + if ret.0 { + *thunk_state.borrow_mut(mc) = ThunkState::Blackhole; } + ret }); if likely_stable::likely(!run) { return Action::Continue; diff --git a/fix-vm/src/value.rs b/fix-vm/src/value.rs index dfc26c7..3ac07d9 100644 --- a/fix-vm/src/value.rs +++ b/fix-vm/src/value.rs @@ -384,9 +384,7 @@ impl<'gc> Deref for AttrSet<'gc> { } impl<'gc> AttrSet<'gc> { - pub(crate) fn from_sorted_unchecked( - entries: SmallVec<[(StringId, Value<'gc>); 4]>, - ) -> Self { + pub(crate) fn from_sorted_unchecked(entries: SmallVec<[(StringId, Value<'gc>); 4]>) -> Self { debug_assert!(entries.is_sorted_by_key(|(key, _)| *key)); Self { entries } }