Skip to content

Commit 6535f5c

Browse files
committed
fix(runtime): support cloning \DataView\ values
1 parent b1e8393 commit 6535f5c

2 files changed

Lines changed: 23 additions & 3 deletions

File tree

core/runtime/src/store/from.rs

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,27 @@ fn clone_typed_array(
151151
Ok(dolly)
152152
}
153153

154+
fn clone_dataview(
155+
original: &JsObject,
156+
dataview: &JsDataView,
157+
transfer: &HashSet<JsObject>,
158+
seen: &mut SeenMap,
159+
context: &mut Context,
160+
) -> JsResult<JsValueStore> {
161+
let buffer = dataview.buffer(context)?;
162+
let buffer = try_from_js_value(&buffer, transfer, seen, context)?;
163+
let byte_length = dataview.byte_length(context)?;
164+
let byte_offset = dataview.byte_offset(context)?;
165+
166+
let dolly = JsValueStore::new(ValueStoreInner::DataView {
167+
buffer,
168+
byte_length,
169+
byte_offset,
170+
});
171+
seen.insert(original, dolly.clone());
172+
Ok(dolly)
173+
}
174+
154175
fn clone_date(
155176
original: &JsObject,
156177
date: &JsDate,
@@ -262,8 +283,8 @@ fn try_from_js_object_clone(
262283
return Err(js_error!(TypeError: "Errors are not supported yet."));
263284
} else if let Ok(ref regexp) = JsRegExp::from_object(object.clone()) {
264285
return clone_regexp(object, regexp, seen, context);
265-
} else if let Ok(_dataview) = JsDataView::from_object(object.clone()) {
266-
return Err(js_error!(TypeError: "Data views are not supported yet."));
286+
} else if let Ok(ref dataview) = JsDataView::from_object(object.clone()) {
287+
return clone_dataview(object, dataview, transfer, seen, context);
267288
} else if object.is_callable() {
268289
// Functions are invalid.
269290
return Err(unsupported_type());

core/runtime/src/store/mod.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,6 @@ enum ValueStoreInner {
117117
SharedArrayBuffer(SharedArrayBuffer),
118118

119119
/// Dataview.
120-
#[expect(unused)]
121120
DataView {
122121
buffer: JsValueStore,
123122
byte_length: u64,

0 commit comments

Comments
 (0)