From f10010869e79ea717c6f7c5a2b55a0ca9d49dc2f Mon Sep 17 00:00:00 2001 From: pjh456 <147148383@qq.com> Date: Fri, 7 Aug 2026 00:38:50 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20new=20=E6=9E=84=E9=80=A0=E5=85=A5?= =?UTF-8?q?=E5=8F=A3=E8=A1=A5=E9=BD=90=20sub=5Fmodules=20=E4=B8=8A?= =?UTF-8?q?=E4=B8=8B=E6=96=87=E5=88=87=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/oxide_vm/src/vm_dispatch_misc.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/crates/oxide_vm/src/vm_dispatch_misc.rs b/crates/oxide_vm/src/vm_dispatch_misc.rs index b0310d25..abccbe82 100644 --- a/crates/oxide_vm/src/vm_dispatch_misc.rs +++ b/crates/oxide_vm/src/vm_dispatch_misc.rs @@ -1,4 +1,4 @@ -use std::sync::Arc; +use std::sync::{Arc, OnceLock}; use crate::native::NativeFn; use crate::vm::{native_fn_ptr_to_fn, CallFrame, ForInIter, FrameContinuation, Vm, MAX_PROTO_CHAIN_DEPTH}; @@ -153,6 +153,16 @@ impl Vm { } } + let callee_subs = &subs[sub_idx].sub_modules; + if callee_subs.is_empty() { + self.sub_module_stack.push((Arc::clone(&self.sub_modules), None)); + } else { + self.sub_module_stack + .push((Arc::clone(&self.sub_modules), Some(std::mem::take(&mut self.immutables_cache)))); + self.sub_modules = Arc::new(callee_subs.clone()); + self.immutables_cache = (0..=callee_subs.len()).map(|_| OnceLock::new()).collect(); + } + self.active_reg_limit = sub_n_registers.max(1); self.pc = 0; Ok(true)