diff options
Diffstat (limited to 'src/string_immutable.zig')
-rw-r--r-- | src/string_immutable.zig | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/src/string_immutable.zig b/src/string_immutable.zig index cf6f6126c..b09d6bd2d 100644 --- a/src/string_immutable.zig +++ b/src/string_immutable.zig @@ -3542,13 +3542,20 @@ test "firstNonASCII16" { } } +fn getSharedBuffer() void { + return std.mem.asBytes(shared_temp_buffer_ptr orelse brk: { + shared_temp_buffer_ptr = bun.default_allocator.create([32 * 1024]u8) catch unreachable; + break :brk shared_temp_buffer_ptr.?; + }); +} +threadlocal var shared_temp_buffer_ptr: ?*[32 * 1024]u8 = null; + pub fn formatUTF16Type(comptime Slice: type, slice_: Slice, writer: anytype) !void { + var chunk = getSharedBuffer(); var slice = slice_; - const chunk_size = 2048; - var chunk: [chunk_size + 4]u8 = undefined; while (slice.len > 0) { - const result = strings.copyUTF16IntoUTF8(&chunk, Slice, slice); + const result = strings.copyUTF16IntoUTF8(chunk, Slice, slice); if (result.read == 0 or result.written == 0) break; try writer.writeAll(chunk[0..result.written]); @@ -3561,16 +3568,15 @@ pub fn formatUTF16(slice_: []align(1) const u16, writer: anytype) !void { } pub fn formatLatin1(slice_: []const u8, writer: anytype) !void { + var chunk = getSharedBuffer(); var slice = slice_; - const chunk_size = 2048; - var chunk: [chunk_size + 4]u8 = undefined; while (strings.firstNonASCII(slice)) |i| { if (i > 0) { try writer.writeAll(slice[0..i]); slice = slice[i..]; } - const result = strings.copyLatin1IntoUTF8(&chunk, @TypeOf(slice), slice[0..@min(chunk.len, slice.len)]); + const result = strings.copyLatin1IntoUTF8(chunk, @TypeOf(slice), slice[0..@min(chunk.len, slice.len)]); if (result.read == 0 or result.written == 0) break; try writer.writeAll(chunk[0..result.written]); |