From 26ce9b2d4a8eb8557287e7facd6c22b7aaaaf9a1 Mon Sep 17 00:00:00 2001 From: Halil Durak Date: Sun, 15 Feb 2026 12:12:45 +0300 Subject: [PATCH] `Uint8ClampedArray`: implement `.copy` variant --- src/browser/js/js.zig | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/browser/js/js.zig b/src/browser/js/js.zig index d5ebca5a..16f553a5 100644 --- a/src/browser/js/js.zig +++ b/src/browser/js/js.zig @@ -223,6 +223,22 @@ pub fn simpleZigValueToJs(isolate: Isolate, value: anytype, comptime fail: bool, } return @ptrCast(v8.v8__Uint8ClampedArray__New(array_buffer, 0, len)); }, + Uint8ClampedArray(.copy) => { + const values = value.values; + const len = values.len; + var array_buffer: *const v8.ArrayBuffer = undefined; + if (len == 0) { + array_buffer = v8.v8__ArrayBuffer__New(isolate.handle, 0).?; + } else { + const backing_store = v8.v8__ArrayBuffer__NewBackingStore(isolate.handle, len); + const data: [*]u8 = @ptrCast(@alignCast(v8.v8__BackingStore__Data(backing_store))); + @memcpy(data[0..len], @as([]const u8, @ptrCast(values))[0..len]); + const backing_store_ptr = v8.v8__BackingStore__TO_SHARED_PTR(backing_store); + // Attach store to array buffer. + array_buffer = v8.v8__ArrayBuffer__New2(isolate.handle, &backing_store_ptr).?; + } + return @ptrCast(v8.v8__Uint8ClampedArray__New(array_buffer, 0, len)); + }, inline String, BigInt, Integer, Number, Value, Object => return value.handle, else => {}, }