From 8fec740e11171f93d143f360108feb822ef5fc72 Mon Sep 17 00:00:00 2001 From: yush-1018 Date: Mon, 23 Mar 2026 14:54:49 +0530 Subject: [PATCH] fix(runtime): support cloning \DataView\ values --- core/runtime/src/store/from.rs | 25 +++++++++++++++++++++++-- core/runtime/src/store/mod.rs | 1 - 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/core/runtime/src/store/from.rs b/core/runtime/src/store/from.rs index 1ee7682d420..e2538e566ea 100644 --- a/core/runtime/src/store/from.rs +++ b/core/runtime/src/store/from.rs @@ -151,6 +151,27 @@ fn clone_typed_array( Ok(dolly) } +fn clone_dataview( + original: &JsObject, + dataview: &JsDataView, + transfer: &HashSet, + seen: &mut SeenMap, + context: &mut Context, +) -> JsResult { + let buffer = dataview.buffer(context)?; + let buffer = try_from_js_value(&buffer, transfer, seen, context)?; + let byte_length = dataview.byte_length(context)?; + let byte_offset = dataview.byte_offset(context)?; + + let dolly = JsValueStore::new(ValueStoreInner::DataView { + buffer, + byte_length, + byte_offset, + }); + seen.insert(original, dolly.clone()); + Ok(dolly) +} + fn clone_date( original: &JsObject, date: &JsDate, @@ -262,8 +283,8 @@ fn try_from_js_object_clone( return Err(js_error!(TypeError: "Errors are not supported yet.")); } else if let Ok(ref regexp) = JsRegExp::from_object(object.clone()) { return clone_regexp(object, regexp, seen, context); - } else if let Ok(_dataview) = JsDataView::from_object(object.clone()) { - return Err(js_error!(TypeError: "Data views are not supported yet.")); + } else if let Ok(ref dataview) = JsDataView::from_object(object.clone()) { + return clone_dataview(object, dataview, transfer, seen, context); } else if object.is_callable() { // Functions are invalid. return Err(unsupported_type()); diff --git a/core/runtime/src/store/mod.rs b/core/runtime/src/store/mod.rs index 432a92bbaea..b41551b3862 100644 --- a/core/runtime/src/store/mod.rs +++ b/core/runtime/src/store/mod.rs @@ -117,7 +117,6 @@ enum ValueStoreInner { SharedArrayBuffer(SharedArrayBuffer), /// Dataview. - #[expect(unused)] DataView { buffer: JsValueStore, byte_length: u64,