feat: DisposableStack 内置对象(状态盒 + use/adopt/defer/dispose/move + GC 六处接线 + 绑定三时机)

This commit is contained in:
2026-08-16 19:22:57 +08:00
parent d1f5a44d37
commit eb12a12f2f
6 changed files with 594 additions and 4 deletions
+6 -1
View File
@@ -6,7 +6,7 @@ use oxide_types::value::JsValue;
use rustc_hash::FxBuildHasher;
use crate::vm::Vm;
use oxide_builtins::{array_buffer, data_view, map, regexp, set, typed_array};
use oxide_builtins::{array_buffer, data_view, disposable_stack, map, regexp, set, typed_array};
impl Vm {
pub(crate) fn is_session_escape_root_ptr(&self, target_ptr: *mut JsObject) -> bool {
@@ -57,6 +57,11 @@ impl Vm {
set::clone_set_native_with_rewrite(src_ref, dst_ref, |value| {
self.promote_value_if_epoch_object(value, forwarding)
});
} else if src_ref.is_disposable_stack_obj() || src_ref.is_async_disposable_stack_obj() {
// 资源栈状态盒深拷贝到新对象:源盒随 epoch 释放,互不共享。
disposable_stack::clone_dispose_native_with_rewrite(src_ref, dst_ref, |value| {
self.promote_value_if_epoch_object(value, forwarding)
});
} else if src_ref.is_typed_array_obj() {
typed_array::clone_typed_array_native_with_rewrite(src_ref, dst_ref, |value| {
self.promote_value_if_epoch_object(value, forwarding)