From 9b9e256f7b17eadccea17ac29a50bbf39c79a740 Mon Sep 17 00:00:00 2001 From: pjh456 <147148383@qq.com> Date: Sun, 16 Aug 2026 19:35:11 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20DisposableStack=20full=5Freset=20?= =?UTF-8?q?=E9=87=8D=E5=BB=BA=E6=B5=8B=E8=AF=95=EF=BC=88=E5=85=A8=E5=B1=80?= =?UTF-8?q?=E6=A7=BD/=E5=8E=9F=E5=9E=8B=E9=93=BE/instanceof=20=E5=AD=98?= =?UTF-8?q?=E6=B4=BB=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tests/builtins_disposable_stack_tests.rs | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/crates/oxide_vm/tests/builtins_disposable_stack_tests.rs b/crates/oxide_vm/tests/builtins_disposable_stack_tests.rs index 73581a9..37d2163 100644 --- a/crates/oxide_vm/tests/builtins_disposable_stack_tests.rs +++ b/crates/oxide_vm/tests/builtins_disposable_stack_tests.rs @@ -432,3 +432,23 @@ fn drop_accounts_capability_bytes() { let after = vm.session_gc_stats().total_bytes_freed; assert!(after > before, "reset 应回收栈对象状态盒,before={before} after={after}"); } + +/// full_reset(dirty 重建):global 与 object 家族重建后 DisposableStack 仍完整可用 +/// —— 全局槽、proto.constructor、原型方法、instanceof 与原型链全部存活。 +#[test] +fn full_reset_rebuilds_disposable_stack() { + let mut vm = make_vm(); + eval_in(&mut vm, "new DisposableStack().dispose(); 0").expect("run1"); + vm.full_reset(); + let text = eval_str( + &mut vm, + "var s = new DisposableStack(); var log = []; \ + s.defer(function() { log.push('A'); }); \ + s.dispose(); \ + (s instanceof DisposableStack) + '|' + (DisposableStack.prototype.constructor === DisposableStack) + '|' + \ + (DisposableStack.prototype[Symbol.dispose] === DisposableStack.prototype.dispose) + '|' + \ + (DisposableStack.prototype[Symbol.toStringTag] === 'DisposableStack') + '|' + \ + log.join(',')", + ); + assert_eq!(text, "true|true|true|true|A"); +}