aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/string_immutable.zig18
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]);