diff --git a/crates/oxide_vm/src/session_arena.rs b/crates/oxide_vm/src/session_arena.rs index bfca1a91..679f2830 100644 --- a/crates/oxide_vm/src/session_arena.rs +++ b/crates/oxide_vm/src/session_arena.rs @@ -266,7 +266,7 @@ impl Vm { if obj.is_weak_map_obj() { weak_map::rewrite_weak_map_native( obj, - |key| crate::session_gc::resolve_weak_key_after_promotion(key), + crate::session_gc::resolve_weak_key_after_promotion, |value| value, ); } @@ -279,7 +279,7 @@ impl Vm { if obj.is_weak_map_obj() { weak_map::rewrite_weak_map_native( obj, - |key| crate::session_gc::resolve_weak_key_after_promotion(key), + crate::session_gc::resolve_weak_key_after_promotion, |value| value, ); } diff --git a/crates/oxide_vm/src/session_gc.rs b/crates/oxide_vm/src/session_gc.rs index 7268a863..ea3dd123 100644 --- a/crates/oxide_vm/src/session_gc.rs +++ b/crates/oxide_vm/src/session_gc.rs @@ -622,7 +622,7 @@ impl SessionGc { if obj.is_gc_marked() && obj.is_weak_map_obj() { // SAFETY: 弱表 native 盒独占,整表重建在定夺期间无并发读者。 unsafe { - weak_map::rewrite_weak_map_native(&mut *ptr, |key| resolve_weak_key_sweep(key), |value| value); + weak_map::rewrite_weak_map_native(&mut *ptr, resolve_weak_key_sweep, |value| value); } } } diff --git a/crates/oxide_vm/tests/generator_gc_tests.rs b/crates/oxide_vm/tests/generator_gc_tests.rs index 60aa0605..26425658 100644 --- a/crates/oxide_vm/tests/generator_gc_tests.rs +++ b/crates/oxide_vm/tests/generator_gc_tests.rs @@ -1,5 +1,6 @@ //! 生成器 × session GC 回归:full_reset 逐对象释放 session 生成器(本体 + 堆数据 //! + upvalue 列表,各单所有权),不 double-free、不悬垂,VM 继续可用。 +//! //! sweep 变体与闭包捕获变体见 `vm_support.rs` 内部测试(需 crate 内 `resume_generator` //! 在模块表未重建时恢复执行,integration 层无法触达)。