Skip to content

Commit 40f4e3d

Browse files
author
yush-1018
committed
fix(runtime): support cloning DataView objects
1 parent da570fd commit 40f4e3d

3 files changed

Lines changed: 31 additions & 11 deletions

File tree

core/macros/src/module.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -185,14 +185,14 @@ fn module_impl_impl(_args: ModuleArguments, mut mod_: ItemMod) -> SpannedResult<
185185
| Item::TraitAlias(ItemTraitAlias { attrs, .. })
186186
| Item::Type(ItemType { attrs, .. })
187187
| Item::Union(ItemUnion { attrs, .. })
188-
| Item::Use(ItemUse { attrs, .. }) => {
189-
if take_path_attr(attrs, "skip") {
190-
original_module_decl = quote! {
191-
#original_module_decl
192-
#item
193-
};
194-
continue;
195-
}
188+
| Item::Use(ItemUse { attrs, .. })
189+
if take_path_attr(attrs, "skip") =>
190+
{
191+
original_module_decl = quote! {
192+
#original_module_decl
193+
#item
194+
};
195+
continue;
196196
}
197197
_ => {}
198198
}

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: &FxHashSet<JsObject>,
158+
seen: &mut SeenMap,
159+
context: &mut Context,
160+
) -> JsResult<JsValueStore> {
161+
let buffer_value = dataview.buffer(context)?;
162+
let buffer = try_from_js_value(&buffer_value, 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(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)