diff --git a/src/allocators.zig b/src/allocators.zig index 6336b432441..4c781ca9b1f 100644 --- a/src/allocators.zig +++ b/src/allocators.zig @@ -928,6 +928,127 @@ const basic = if (bun.use_mimalloc) else @import("./allocators/fallback.zig"); +pub fn stackFallback(comptime size: usize, fallback_allocator: std.mem.Allocator) StackFallbackAllocator(size) { + return StackFallbackAllocator(size){ + .buffer = undefined, + .fallback_allocator = fallback_allocator, + .fixed_buffer_allocator = undefined, + .force_heap = if (comptime Environment.ci_assert) + !bun.getRuntimeFeatureFlag(.BUN_DEBUG_FORCE_HEAP_FALLBACK_ALLOCATORS) + else {}, + }; +} + +/// An allocator that attempts to allocate using a +/// `FixedBufferAllocator` using an array of size `size`. If the +/// allocation fails, it will fall back to using +/// `fallback_allocator`. Easily created with `stackFallback`. +pub fn StackFallbackAllocator(comptime size: usize) type { + return struct { + const Self = @This(); + + buffer: [size]u8, + fallback_allocator: std.mem.Allocator, + fixed_buffer_allocator: std.heap.FixedBufferAllocator, + get_called: if (Environment.ci_assert) bool else void = if (Environment.ci_assert) false, + force_heap: if (Environment.ci_assert) bool else void, + + /// This function both fetches a `Allocator` interface to this + /// allocator *and* resets the internal buffer allocator. + pub fn get(self: *Self) std.mem.Allocator { + if (comptime Environment.ci_assert) { + bun.assert(!self.get_called); // `get` called multiple times; instead use `const allocator = stackFallback(N).get();` + self.get_called = true; + } + self.fixed_buffer_allocator = std.heap.FixedBufferAllocator.init(self.buffer[0..]); + return .{ + .ptr = self, + .vtable = &.{ + .alloc = alloc, + .resize = resize, + .remap = remap, + .free = free, + }, + }; + } + + fn alloc( + ctx: *anyopaque, + len: usize, + alignment: std.mem.Alignment, + ra: usize, + ) ?[*]u8 { + const self: *Self = @ptrCast(@alignCast(ctx)); + if (comptime Environment.ci_assert) { + if (self.force_heap) { + return self.fallback_allocator.rawAlloc(len, alignment, ra); + } + } + return std.heap.FixedBufferAllocator.alloc(&self.fixed_buffer_allocator, len, alignment, ra) orelse + return self.fallback_allocator.rawAlloc(len, alignment, ra); + } + + fn resize( + ctx: *anyopaque, + buf: []u8, + alignment: std.mem.Alignment, + new_len: usize, + ra: usize, + ) bool { + const self: *Self = @ptrCast(@alignCast(ctx)); + if (comptime Environment.ci_assert) { + if (self.force_heap) { + return self.fallback_allocator.rawResize(buf, alignment, new_len, ra); + } + } + if (self.fixed_buffer_allocator.ownsPtr(buf.ptr)) { + return std.heap.FixedBufferAllocator.resize(&self.fixed_buffer_allocator, buf, alignment, new_len, ra); + } else { + return self.fallback_allocator.rawResize(buf, alignment, new_len, ra); + } + } + + fn remap( + context: *anyopaque, + memory: []u8, + alignment: std.mem.Alignment, + new_len: usize, + return_address: usize, + ) ?[*]u8 { + const self: *Self = @ptrCast(@alignCast(context)); + if (comptime Environment.ci_assert) { + if (self.force_heap) { + return self.fallback_allocator.rawRemap(memory, alignment, new_len, return_address); + } + } + if (self.fixed_buffer_allocator.ownsPtr(memory.ptr)) { + return std.heap.FixedBufferAllocator.remap(&self.fixed_buffer_allocator, memory, alignment, new_len, return_address); + } else { + return self.fallback_allocator.rawRemap(memory, alignment, new_len, return_address); + } + } + + fn free( + ctx: *anyopaque, + buf: []u8, + alignment: std.mem.Alignment, + ra: usize, + ) void { + const self: *Self = @ptrCast(@alignCast(ctx)); + if (comptime Environment.ci_assert) { + if (self.force_heap) { + return self.fallback_allocator.rawFree(buf, alignment, ra); + } + } + if (self.fixed_buffer_allocator.ownsPtr(buf.ptr)) { + return std.heap.FixedBufferAllocator.free(&self.fixed_buffer_allocator, buf, alignment, ra); + } else { + return self.fallback_allocator.rawFree(buf, alignment, ra); + } + } + }; +} + const Environment = @import("./env.zig"); const std = @import("std"); diff --git a/src/ast/P.zig b/src/ast/P.zig index 0433dae24ff..1ba7a3d215f 100644 --- a/src/ast/P.zig +++ b/src/ast/P.zig @@ -3537,7 +3537,7 @@ pub fn NewParser_( // Insert any relocated variable statements now if (p.relocated_top_level_vars.items.len > 0) { var already_declared = RefMap{}; - var already_declared_allocator_stack = std.heap.stackFallback(1024, allocator); + var already_declared_allocator_stack = bun.allocators.stackFallback(1024, allocator); const already_declared_allocator = already_declared_allocator_stack.get(); defer if (already_declared_allocator_stack.fixed_buffer_allocator.end_index >= 1023) already_declared.deinit(already_declared_allocator); diff --git a/src/bake/DevServer.zig b/src/bake/DevServer.zig index e45dc06831f..0bb93aed39e 100644 --- a/src/bake/DevServer.zig +++ b/src/bake/DevServer.zig @@ -1109,7 +1109,7 @@ fn ensureRouteIsBundled( } // Prepare a bundle with just this route. - var sfa = std.heap.stackFallback(4096, dev.allocator()); + var sfa = bun.allocators.stackFallback(4096, dev.allocator()); const temp_alloc = sfa.get(); var entry_points: EntryPointList = .empty; @@ -1242,7 +1242,7 @@ fn checkRouteFailures( route_bundle_index: RouteBundle.Index, resp: DevResponse, ) !enum { stop, ok, rebuild } { - var sfa_state = std.heap.stackFallback(65536, dev.allocator()); + var sfa_state = bun.allocators.stackFallback(65536, dev.allocator()); const sfa = sfa_state.get(); var gts = try dev.initGraphTraceState(sfa, 0); defer gts.deinit(sfa); @@ -1535,7 +1535,7 @@ fn generateHTMLPayload(dev: *DevServer, route_bundle_index: RouteBundle.Index, r defer dev.graph_safety_lock.unlock(); // Prepare bitsets for tracing - var sfa_state = std.heap.stackFallback(65536, dev.allocator()); + var sfa_state = bun.allocators.stackFallback(65536, dev.allocator()); const sfa = sfa_state.get(); var gts = try dev.initGraphTraceState(sfa, 0); defer gts.deinit(sfa); @@ -1587,7 +1587,7 @@ fn generateJavaScriptCodeForHTMLFile( input_file_sources: []bun.logger.Source, loaders: []bun.options.Loader, ) bun.OOM![]const u8 { - var sfa_state = std.heap.stackFallback(65536, dev.allocator()); + var sfa_state = bun.allocators.stackFallback(65536, dev.allocator()); const sfa = sfa_state.get(); var array = bun.handleOom(std.ArrayListUnmanaged(u8).initCapacity(sfa, 65536)); defer array.deinit(sfa); @@ -1836,7 +1836,7 @@ pub fn startAsyncBundle( // Notify inspector about bundle start if (dev.inspector()) |agent| { - var sfa_state = std.heap.stackFallback(256, dev.allocator()); + var sfa_state = bun.allocators.stackFallback(256, dev.allocator()); const sfa = sfa_state.get(); var trigger_files = try std.ArrayList(bun.String).initCapacity(sfa, entry_points.set.count()); defer trigger_files.deinit(); @@ -1931,7 +1931,7 @@ pub fn prepareAndLogResolutionFailures(dev: *DevServer) !void { fn indexFailures(dev: *DevServer) !void { // After inserting failures into the IncrementalGraphs, they are traced to their routes. - var sfa_state = std.heap.stackFallback(65536, dev.allocator()); + var sfa_state = bun.allocators.stackFallback(65536, dev.allocator()); const sfa = sfa_state.get(); if (dev.incremental_result.failures_added.items.len > 0) { @@ -2014,7 +2014,7 @@ fn generateClientBundle(dev: *DevServer, route_bundle: *RouteBundle) bun.OOM![]u defer dev.graph_safety_lock.unlock(); // Prepare bitsets - var sfa_state = std.heap.stackFallback(65536, dev.allocator()); + var sfa_state = bun.allocators.stackFallback(65536, dev.allocator()); const sfa = sfa_state.get(); var gts = try dev.initGraphTraceState(sfa, 0); defer gts.deinit(sfa); @@ -2078,7 +2078,7 @@ fn generateCssJSArray(dev: *DevServer, route_bundle: *RouteBundle) bun.JSError!j defer dev.graph_safety_lock.unlock(); // Prepare bitsets - var sfa_state = std.heap.stackFallback(65536, dev.allocator()); + var sfa_state = bun.allocators.stackFallback(65536, dev.allocator()); const sfa = sfa_state.get(); var gts = try dev.initGraphTraceState(sfa, 0); @@ -2252,7 +2252,7 @@ pub fn finalizeBundle( const targets = bv2.graph.ast.items(.target); const scbs = bv2.graph.server_component_boundaries.slice(); - var sfa = std.heap.stackFallback(65536, bv2.allocator()); + var sfa = bun.allocators.stackFallback(65536, bv2.allocator()); const stack_alloc = sfa.get(); var scb_bitset = try bun.bit_set.DynamicBitSetUnmanaged.initEmpty(stack_alloc, input_file_sources.len); for ( @@ -2569,7 +2569,7 @@ pub fn finalizeBundle( var has_route_bits_set = false; - var hot_update_payload_sfa = std.heap.stackFallback(65536, dev.allocator()); + var hot_update_payload_sfa = bun.allocators.stackFallback(65536, dev.allocator()); var hot_update_payload = std.ArrayList(u8).initCapacity(hot_update_payload_sfa.get(), 65536) catch unreachable; // enough space defer hot_update_payload.deinit(); @@ -2976,7 +2976,7 @@ fn startNextBundleIfPresent(dev: *DevServer) void { // If there were pending requests, begin another bundle. if (dev.next_bundle.reload_event != null or dev.next_bundle.requests.first != null or dev.next_bundle.promise.strong.hasValue()) { - var sfb = std.heap.stackFallback(4096, dev.allocator()); + var sfb = bun.allocators.stackFallback(4096, dev.allocator()); const temp_alloc = sfb.get(); var entry_points: EntryPointList = .empty; defer entry_points.deinit(temp_alloc); @@ -3610,7 +3610,7 @@ pub fn emitVisualizerMessageIfNeeded(dev: *DevServer) void { defer dev.emitMemoryVisualizerMessageIfNeeded(); if (dev.emit_incremental_visualizer_events == 0) return; - var sfb = std.heap.stackFallback(65536, dev.allocator()); + var sfb = bun.allocators.stackFallback(65536, dev.allocator()); var payload = std.ArrayList(u8).initCapacity(sfb.get(), 65536) catch unreachable; // enough capacity on the stack defer payload.deinit(); @@ -3640,7 +3640,7 @@ pub fn emitMemoryVisualizerMessage(dev: *DevServer) void { comptime assert(bun.FeatureFlags.bake_debugging_features); bun.debugAssert(dev.emit_memory_visualizer_events > 0); - var sfb = std.heap.stackFallback(65536, dev.allocator()); + var sfb = bun.allocators.stackFallback(65536, dev.allocator()); var payload = std.ArrayList(u8).initCapacity(sfb.get(), 65536) catch unreachable; // enough capacity on the stack defer payload.deinit(); @@ -4215,7 +4215,7 @@ fn dumpStateDueToCrash(dev: *DevServer) !void { try file.writeAll(start); try file.writeAll("\nlet inlinedData = Uint8Array.from(atob(\""); - var sfb = std.heap.stackFallback(4096, dev.allocator()); + var sfb = bun.allocators.stackFallback(4096, dev.allocator()); var payload = try std.ArrayList(u8).initCapacity(sfb.get(), 4096); defer payload.deinit(); try dev.writeVisualizerMessage(&payload); diff --git a/src/bake/DevServer/ErrorReportRequest.zig b/src/bake/DevServer/ErrorReportRequest.zig index 8cca4662e34..d1c06f9eb18 100644 --- a/src/bake/DevServer/ErrorReportRequest.zig +++ b/src/bake/DevServer/ErrorReportRequest.zig @@ -41,8 +41,8 @@ pub fn runWithBody(ctx: *ErrorReportRequest, body: []const u8, r: AnyResponse) ! var s = std.io.fixedBufferStream(body); const reader = s.reader(); - var sfa_general = std.heap.stackFallback(65536, ctx.dev.allocator()); - var sfa_sourcemap = std.heap.stackFallback(65536, ctx.dev.allocator()); + var sfa_general = bun.allocators.stackFallback(65536, ctx.dev.allocator()); + var sfa_sourcemap = bun.allocators.stackFallback(65536, ctx.dev.allocator()); const temp_alloc = sfa_general.get(); var arena = std.heap.ArenaAllocator.init(temp_alloc); defer arena.deinit(); diff --git a/src/bake/DevServer/HotReloadEvent.zig b/src/bake/DevServer/HotReloadEvent.zig index 3b43ded0b15..2af0de01f58 100644 --- a/src/bake/DevServer/HotReloadEvent.zig +++ b/src/bake/DevServer/HotReloadEvent.zig @@ -187,7 +187,7 @@ pub fn run(first: *HotReloadEvent) void { return; } - var sfb = std.heap.stackFallback(4096, dev.allocator()); + var sfb = bun.allocators.stackFallback(4096, dev.allocator()); const temp_alloc = sfb.get(); var entry_points: EntryPointList = .empty; defer entry_points.deinit(temp_alloc); diff --git a/src/bake/DevServer/IncrementalGraph.zig b/src/bake/DevServer/IncrementalGraph.zig index 837cdf29257..18993408ff4 100644 --- a/src/bake/DevServer/IncrementalGraph.zig +++ b/src/bake/DevServer/IncrementalGraph.zig @@ -878,7 +878,7 @@ pub fn IncrementalGraph(comptime side: bake.Side) type { bun.assert(bundler_index.isValid()); bun.assert(ctx.loaders[bundler_index.get()].isCSS()); - var sfb = std.heap.stackFallback(@sizeOf(bun.ast.Index) * 64, temp_alloc); + var sfb = bun.allocators.stackFallback(@sizeOf(bun.ast.Index) * 64, temp_alloc); const queue_alloc = sfb.get(); // This queue avoids stack overflow. @@ -1728,7 +1728,7 @@ pub fn IncrementalGraph(comptime side: bake.Side) type { // to inform the HMR runtime some crucial entry-point info. The // exact upper bound of this can be calculated, but is not to // avoid worrying about windows paths. - var end_sfa = std.heap.stackFallback(65536, g.allocator()); + var end_sfa = bun.allocators.stackFallback(65536, g.allocator()); var end_list = std.ArrayList(u8).initCapacity(end_sfa.get(), 65536) catch unreachable; defer end_list.deinit(); const end = end: { diff --git a/src/bake/DevServer/SerializedFailure.zig b/src/bake/DevServer/SerializedFailure.zig index 0b4c9609a50..4042153f6c9 100644 --- a/src/bake/DevServer/SerializedFailure.zig +++ b/src/bake/DevServer/SerializedFailure.zig @@ -110,7 +110,7 @@ pub fn initFromJs(dev: *DevServer, owner: Owner, value: JSValue) !SerializedFail @panic("TODO"); } // Avoid small re-allocations without requesting so much from the heap - var sfb = std.heap.stackFallback(65536, dev.allocator()); + var sfb = bun.allocators.stackFallback(65536, dev.allocator()); var payload = std.ArrayList(u8).initCapacity(sfb.get(), 65536) catch unreachable; // enough space const w = payload.writer(); @@ -137,7 +137,7 @@ pub fn initFromLog( assert(messages.len > 0); // Avoid small re-allocations without requesting so much from the heap - var sfb = std.heap.stackFallback(65536, dev.allocator()); + var sfb = bun.allocators.stackFallback(65536, dev.allocator()); var payload = std.ArrayList(u8).initCapacity(sfb.get(), 65536) catch unreachable; // enough space const w = payload.writer(); diff --git a/src/bake/FrameworkRouter.zig b/src/bake/FrameworkRouter.zig index 76d737baa31..4b5eff625d1 100644 --- a/src/bake/FrameworkRouter.zig +++ b/src/bake/FrameworkRouter.zig @@ -473,7 +473,7 @@ pub const Style = union(enum) { pub fn fromJS(value: JSValue, global: *jsc.JSGlobalObject) !Style { if (value.isString()) { const bun_string = try value.toBunString(global); - var sfa = std.heap.stackFallback(4096, bun.default_allocator); + var sfa = bun.allocators.stackFallback(4096, bun.default_allocator); const utf8 = bun_string.toUTF8(sfa.get()); defer utf8.deinit(); if (map.get(utf8.slice())) |style| { @@ -1241,7 +1241,7 @@ pub const JSFrameworkRouter = struct { var params_out: MatchedParams = undefined; if (jsfr.router.matchSlow(path_slice.slice(), ¶ms_out)) |index| { - var sfb = std.heap.stackFallback(4096, bun.default_allocator); + var sfb = bun.allocators.stackFallback(4096, bun.default_allocator); const alloc = sfb.get(); return (try jsc.JSObject.create(.{ @@ -1264,7 +1264,7 @@ pub const JSFrameworkRouter = struct { pub fn toJSON(jsfr: *JSFrameworkRouter, global: *JSGlobalObject, callframe: *jsc.CallFrame) bun.JSError!JSValue { _ = callframe; - var sfb = std.heap.stackFallback(4096, bun.default_allocator); + var sfb = bun.allocators.stackFallback(4096, bun.default_allocator); const alloc = sfb.get(); return jsfr.routeToJson(global, Route.Index.init(0), alloc); diff --git a/src/bake/production.zig b/src/bake/production.zig index c787b5414a3..ab3a5bbd33f 100644 --- a/src/bake/production.zig +++ b/src/bake/production.zig @@ -795,7 +795,7 @@ pub export fn BakeToWindowsPath(input: bun.String) callconv(.C) bun.String { if (comptime bun.Environment.isPosix) { @panic("This code should not be called on POSIX systems."); } - var sfa = std.heap.stackFallback(1024, bun.default_allocator); + var sfa = bun.allocators.stackFallback(1024, bun.default_allocator); const alloc = sfa.get(); const input_utf8 = input.toUTF8(alloc); defer input_utf8.deinit(); @@ -807,7 +807,7 @@ pub export fn BakeToWindowsPath(input: bun.String) callconv(.C) bun.String { } pub export fn BakeProdResolve(global: *jsc.JSGlobalObject, a_str: bun.String, specifier_str: bun.String) callconv(.C) bun.String { - var sfa = std.heap.stackFallback(@sizeOf(bun.PathBuffer) * 2, bun.default_allocator); + var sfa = bun.allocators.stackFallback(@sizeOf(bun.PathBuffer) * 2, bun.default_allocator); const alloc = sfa.get(); const specifier = specifier_str.toUTF8(alloc); @@ -1020,7 +1020,7 @@ pub const PerThread = struct { /// Given a key, returns the source code to load. pub export fn BakeProdLoad(pt: *PerThread, key: bun.String) bun.String { - var sfa = std.heap.stackFallback(4096, bun.default_allocator); + var sfa = bun.allocators.stackFallback(4096, bun.default_allocator); const allocator = sfa.get(); const utf8 = key.toUTF8(allocator); defer utf8.deinit(); @@ -1033,7 +1033,7 @@ pub export fn BakeProdLoad(pt: *PerThread, key: bun.String) bun.String { } pub export fn BakeProdSourceMap(pt: *PerThread, key: bun.String) bun.String { - var sfa = std.heap.stackFallback(4096, bun.default_allocator); + var sfa = bun.allocators.stackFallback(4096, bun.default_allocator); const allocator = sfa.get(); const utf8 = key.toUTF8(allocator); defer utf8.deinit(); diff --git a/src/bun.js/ConsoleObject.zig b/src/bun.js/ConsoleObject.zig index e8a3e1c926b..2f9bd77eb04 100644 --- a/src/bun.js/ConsoleObject.zig +++ b/src/bun.js/ConsoleObject.zig @@ -499,7 +499,7 @@ pub const TablePrinter = struct { ) !void { const globalObject = this.globalObject; - var stack_fallback = std.heap.stackFallback(@sizeOf(Column) * 16, this.globalObject.allocator()); + var stack_fallback = bun.allocators.stackFallback(@sizeOf(Column) * 16, this.globalObject.allocator()); var columns = try std.ArrayList(Column).initCapacity(stack_fallback.get(), 16); defer { for (columns.items) |*col| { diff --git a/src/bun.js/api/BunObject.zig b/src/bun.js/api/BunObject.zig index c7c6d1a7e8b..ddb530d1360 100644 --- a/src/bun.js/api/BunObject.zig +++ b/src/bun.js/api/BunObject.zig @@ -844,7 +844,7 @@ fn doResolveWithArgs(ctx: *jsc.JSGlobalObject, specifier: bun.String, from: bun. } if (query_string.len > 0) { - var stack = std.heap.stackFallback(1024, ctx.allocator()); + var stack = bun.allocators.stackFallback(1024, ctx.allocator()); const allocator = stack.get(); var arraylist = std.ArrayList(u8).initCapacity(allocator, 1024) catch unreachable; defer arraylist.deinit(); @@ -1128,7 +1128,7 @@ pub export fn Bun__escapeHTML8(globalObject: *jsc.JSGlobalObject, input_value: J assert(len > 0); const input_slice = ptr[0..len]; - var stack_allocator = std.heap.stackFallback(256, globalObject.bunVM().allocator); + var stack_allocator = bun.allocators.stackFallback(256, globalObject.bunVM().allocator); const allocator = if (input_slice.len <= 32) stack_allocator.get() else stack_allocator.fallback_allocator; const escaped = strings.escapeHTMLForLatin1Input(allocator, input_slice) catch { diff --git a/src/bun.js/api/JSTranspiler.zig b/src/bun.js/api/JSTranspiler.zig index 395daf0cda0..f556245023c 100644 --- a/src/bun.js/api/JSTranspiler.zig +++ b/src/bun.js/api/JSTranspiler.zig @@ -1002,7 +1002,7 @@ fn namedExportsToJS(global: *JSGlobalObject, named_exports: *JSAst.Ast.NamedExpo return JSValue.createEmptyArray(global, 0); var named_exports_iter = named_exports.iterator(); - var stack_fallback = std.heap.stackFallback(@sizeOf(bun.String) * 32, bun.default_allocator); + var stack_fallback = bun.allocators.stackFallback(@sizeOf(bun.String) * 32, bun.default_allocator); var allocator = stack_fallback.get(); var names = allocator.alloc( bun.String, diff --git a/src/bun.js/api/bun/process.zig b/src/bun.js/api/bun/process.zig index 2ac122bf6a6..5c70ea5884a 100644 --- a/src/bun.js/api/bun/process.zig +++ b/src/bun.js/api/bun/process.zig @@ -1263,7 +1263,7 @@ pub fn spawnProcessPosix( var spawned = PosixSpawnResult{}; var extra_fds = std.ArrayList(bun.FileDescriptor).init(bun.default_allocator); errdefer extra_fds.deinit(); - var stack_fallback = std.heap.stackFallback(2048, bun.default_allocator); + var stack_fallback = bun.allocators.stackFallback(2048, bun.default_allocator); const allocator = stack_fallback.get(); var to_close_at_end = std.ArrayList(bun.FileDescriptor).init(allocator); var to_set_cloexec = std.ArrayList(bun.FileDescriptor).init(allocator); @@ -1542,7 +1542,7 @@ pub fn spawnProcessWindows( uv_process_options.env = envp; uv_process_options.file = options.argv0 orelse argv[0].?; uv_process_options.exit_cb = &Process.onExitUV; - var stack_allocator = std.heap.stackFallback(8192, bun.default_allocator); + var stack_allocator = bun.allocators.stackFallback(8192, bun.default_allocator); const allocator = stack_allocator.get(); const loop = options.windows.loop.platformEventLoop().uv_loop; diff --git a/src/bun.js/api/bun/socket.zig b/src/bun.js/api/bun/socket.zig index fb18864c97e..154b365345e 100644 --- a/src/bun.js/api/bun/socket.zig +++ b/src/bun.js/api/bun/socket.zig @@ -929,7 +929,7 @@ pub fn NewSocket(comptime ssl: bool) type { return this.writeOrEnd(globalObject, &values, true, is_end); } - var stack_fallback = std.heap.stackFallback(16 * 1024, bun.default_allocator); + var stack_fallback = bun.allocators.stackFallback(16 * 1024, bun.default_allocator); const allow_string_object = true; const buffer: jsc.Node.StringOrBuffer = if (data_value.isUndefined()) jsc.Node.StringOrBuffer.empty @@ -1072,7 +1072,7 @@ pub fn NewSocket(comptime ssl: bool) type { return globalObject.throwTODO("Support encoding with offset and length altogether. Only either encoding or offset, length is supported, but not both combinations yet.") catch .fail; } - var stack_fallback = std.heap.stackFallback(16 * 1024, bun.default_allocator); + var stack_fallback = bun.allocators.stackFallback(16 * 1024, bun.default_allocator); const buffer: jsc.Node.BlobOrStringOrBuffer = if (args[0].isUndefined()) jsc.Node.BlobOrStringOrBuffer{ .string_or_buffer = jsc.Node.StringOrBuffer.empty } else diff --git a/src/bun.js/api/bun/socket/SocketAddress.zig b/src/bun.js/api/bun/socket/SocketAddress.zig index 1e0e8fe6340..fd141a23720 100644 --- a/src/bun.js/api/bun/socket/SocketAddress.zig +++ b/src/bun.js/api/bun/socket/SocketAddress.zig @@ -210,7 +210,7 @@ pub fn initJS(global: *jsc.JSGlobalObject, options: Options) bun.JSError!SocketA // We need a zero-terminated cstring for `ares_inet_pton`, which forces us to // copy the string. - var stackfb = std.heap.stackFallback(64, bun.default_allocator); + var stackfb = bun.allocators.stackFallback(64, bun.default_allocator); const alloc = stackfb.get(); // NOTE: `zig translate-c` creates semantically invalid code for `C.ntohs`. diff --git a/src/bun.js/api/server.zig b/src/bun.js/api/server.zig index c90540d7951..b0dd9eb4727 100644 --- a/src/bun.js/api/server.zig +++ b/src/bun.js/api/server.zig @@ -364,7 +364,7 @@ const ServePlugins = struct { defer this.deref(); const plugin = bun.jsc.API.JSBundler.Plugin.create(global, .browser); - var sfb = std.heap.stackFallback(@sizeOf(bun.String) * 4, bun.default_allocator); + var sfb = bun.allocators.stackFallback(@sizeOf(bun.String) * 4, bun.default_allocator); const alloc = sfb.get(); const bunstring_array = bun.handleOom(alloc.alloc(bun.String, plugin_list.len)); defer alloc.free(bunstring_array); @@ -1797,7 +1797,7 @@ pub fn NewServer(protocol_enum: enum { http, https }, development_kind: enum { d this.pending_requests += 1; defer this.pending_requests -= 1; req.setYield(false); - var stack_fallback = std.heap.stackFallback(8192, this.allocator); + var stack_fallback = bun.allocators.stackFallback(8192, this.allocator); const allocator = stack_fallback.get(); const buffer_writer = js_printer.BufferWriter.init(allocator); diff --git a/src/bun.js/api/server/NodeHTTPResponse.zig b/src/bun.js/api/server/NodeHTTPResponse.zig index 94f9dc44e9e..97cb86148d8 100644 --- a/src/bun.js/api/server/NodeHTTPResponse.zig +++ b/src/bun.js/api/server/NodeHTTPResponse.zig @@ -465,7 +465,7 @@ pub fn writeHead(this: *NodeHTTPResponse, globalObject: *jsc.JSGlobalObject, cal break :brk 200; }; - var stack_fallback = std.heap.stackFallback(256, bun.default_allocator); + var stack_fallback = bun.allocators.stackFallback(256, bun.default_allocator); const allocator = stack_fallback.get(); const status_message_slice = if (!status_message_value.isUndefined()) try status_message_value.toSlice(globalObject, allocator) diff --git a/src/bun.js/bindings/JSGlobalObject.zig b/src/bun.js/bindings/JSGlobalObject.zig index 67dda877766..7ae26775b1a 100644 --- a/src/bun.js/bindings/JSGlobalObject.zig +++ b/src/bun.js/bindings/JSGlobalObject.zig @@ -260,7 +260,7 @@ pub const JSGlobalObject = opaque { pub fn createErrorInstance(this: *JSGlobalObject, comptime fmt: [:0]const u8, args: anytype) JSValue { if (comptime std.meta.fieldNames(@TypeOf(args)).len > 0) { - var stack_fallback = std.heap.stackFallback(1024 * 4, this.allocator()); + var stack_fallback = bun.allocators.stackFallback(1024 * 4, this.allocator()); var buf = bun.MutableString.init2048(stack_fallback.get()) catch unreachable; defer buf.deinit(); var writer = buf.writer(); @@ -283,7 +283,7 @@ pub const JSGlobalObject = opaque { pub fn createTypeErrorInstance(this: *JSGlobalObject, comptime fmt: [:0]const u8, args: anytype) JSValue { if (comptime std.meta.fieldNames(@TypeOf(args)).len > 0) { - var stack_fallback = std.heap.stackFallback(1024 * 4, this.allocator()); + var stack_fallback = bun.allocators.stackFallback(1024 * 4, this.allocator()); var buf = bun.MutableString.init2048(stack_fallback.get()) catch unreachable; defer buf.deinit(); var writer = buf.writer(); @@ -297,7 +297,7 @@ pub const JSGlobalObject = opaque { pub fn createDOMExceptionInstance(this: *JSGlobalObject, code: jsc.WebCore.DOMExceptionCode, comptime fmt: [:0]const u8, args: anytype) JSError!JSValue { if (comptime std.meta.fieldNames(@TypeOf(args)).len > 0) { - var stack_fallback = std.heap.stackFallback(1024 * 4, this.allocator()); + var stack_fallback = bun.allocators.stackFallback(1024 * 4, this.allocator()); var buf = try bun.MutableString.init2048(stack_fallback.get()); defer buf.deinit(); var writer = buf.writer(); @@ -311,7 +311,7 @@ pub const JSGlobalObject = opaque { pub fn createSyntaxErrorInstance(this: *JSGlobalObject, comptime fmt: [:0]const u8, args: anytype) JSValue { if (comptime std.meta.fieldNames(@TypeOf(args)).len > 0) { - var stack_fallback = std.heap.stackFallback(1024 * 4, this.allocator()); + var stack_fallback = bun.allocators.stackFallback(1024 * 4, this.allocator()); var buf = bun.MutableString.init2048(stack_fallback.get()) catch unreachable; defer buf.deinit(); var writer = buf.writer(); @@ -325,7 +325,7 @@ pub const JSGlobalObject = opaque { pub fn createRangeErrorInstance(this: *JSGlobalObject, comptime fmt: [:0]const u8, args: anytype) JSValue { if (comptime std.meta.fieldNames(@TypeOf(args)).len > 0) { - var stack_fallback = std.heap.stackFallback(1024 * 4, this.allocator()); + var stack_fallback = bun.allocators.stackFallback(1024 * 4, this.allocator()); var buf = bun.MutableString.init2048(stack_fallback.get()) catch unreachable; defer buf.deinit(); var writer = buf.writer(); @@ -444,7 +444,7 @@ pub const JSGlobalObject = opaque { bun.debugAssert(err != error.JSError); // Avoid tiny extra allocation - var stack = std.heap.stackFallback(128, bun.default_allocator); + var stack = bun.allocators.stackFallback(128, bun.default_allocator); const allocator_ = stack.get(); const buffer = try std.fmt.allocPrint(allocator_, comptime "{s} " ++ fmt, .{@errorName(err)}); defer allocator_.free(buffer); @@ -943,7 +943,7 @@ pub const JSGlobalObject = opaque { return zig_str.toErrorInstance(globalThis); } else { - var fallback = std.heap.stackFallback(256, bun.default_allocator); + var fallback = bun.allocators.stackFallback(256, bun.default_allocator); var alloc = fallback.get(); const buf = std.fmt.allocPrint(alloc, fmt, args) catch unreachable; diff --git a/src/bun.js/bindings/JSValue.zig b/src/bun.js/bindings/JSValue.zig index a8afc337f4f..989fcf5d1cb 100644 --- a/src/bun.js/bindings/JSValue.zig +++ b/src/bun.js/bindings/JSValue.zig @@ -709,7 +709,7 @@ pub const JSValue = enum(i64) { /// Create a JSValue string from a zig format-print (fmt + args) pub fn printString(globalThis: *JSGlobalObject, comptime stack_buffer_size: usize, comptime fmt: []const u8, args: anytype) !JSValue { - var stack_fallback = std.heap.stackFallback(stack_buffer_size, globalThis.allocator()); + var stack_fallback = bun.allocators.stackFallback(stack_buffer_size, globalThis.allocator()); var buf = try bun.MutableString.init(stack_fallback.get(), stack_buffer_size); defer buf.deinit(); @@ -721,7 +721,7 @@ pub const JSValue = enum(i64) { /// Create a JSValue string from a zig format-print (fmt + args), with pretty format pub fn printStringPretty(globalThis: *JSGlobalObject, comptime stack_buffer_size: usize, comptime fmt: []const u8, args: anytype) !JSValue { - var stack_fallback = std.heap.stackFallback(stack_buffer_size, globalThis.allocator()); + var stack_fallback = bun.allocators.stackFallback(stack_buffer_size, globalThis.allocator()); var buf = try bun.MutableString.init(stack_fallback.get(), stack_buffer_size); defer buf.deinit(); diff --git a/src/bun.js/bindings/NodeModuleModule.zig b/src/bun.js/bindings/NodeModuleModule.zig index 22eef36724a..d58f433a6d0 100644 --- a/src/bun.js/bindings/NodeModuleModule.zig +++ b/src/bun.js/bindings/NodeModuleModule.zig @@ -6,7 +6,7 @@ fn findPath( request_bun_str: bun.String, paths_maybe: ?*jsc.JSArray, ) bun.JSError!JSValue { - var stack_buf = std.heap.stackFallback(8192, bun.default_allocator); + var stack_buf = bun.allocators.stackFallback(8192, bun.default_allocator); const alloc = stack_buf.get(); const request_slice = request_bun_str.toUTF8(alloc); @@ -163,7 +163,7 @@ fn onRequireExtensionModifyBinding( kind: i32, value: jsc.JSValue, ) callconv(.c) void { - var sfa_state = std.heap.stackFallback(8192, bun.default_allocator); + var sfa_state = bun.allocators.stackFallback(8192, bun.default_allocator); const alloc = sfa_state.get(); const str_slice = str.toUTF8(alloc); defer str_slice.deinit(); diff --git a/src/bun.js/bindings/ZigString.zig b/src/bun.js/bindings/ZigString.zig index f55da9cfdb9..04678525203 100644 --- a/src/bun.js/bindings/ZigString.zig +++ b/src/bun.js/bindings/ZigString.zig @@ -59,7 +59,7 @@ pub const ZigString = extern struct { /// This function is not optimized! pub fn eqlCaseInsensitive(this: ZigString, other: ZigString) bool { - var fallback = std.heap.stackFallback(1024, bun.default_allocator); + var fallback = bun.allocators.stackFallback(1024, bun.default_allocator); const fallback_allocator = fallback.get(); var utf16_slice = this.toSliceLowercase(fallback_allocator); @@ -72,7 +72,7 @@ pub const ZigString = extern struct { pub fn toSliceLowercase(this: ZigString, allocator: std.mem.Allocator) Slice { if (this.len == 0) return Slice.empty; - var fallback = std.heap.stackFallback(512, allocator); + var fallback = bun.allocators.stackFallback(512, allocator); const fallback_allocator = fallback.get(); const uppercase_buffer = this.toOwnedSlice(fallback_allocator) catch unreachable; diff --git a/src/bun.js/node/node_assert_binding.zig b/src/bun.js/node/node_assert_binding.zig index 2d7c264dad0..70f2249d242 100644 --- a/src/bun.js/node/node_assert_binding.zig +++ b/src/bun.js/node/node_assert_binding.zig @@ -8,7 +8,7 @@ /// declare function myersDiff(actual: string, expected: string): Diff[]; /// ``` pub fn myersDiff(global: *jsc.JSGlobalObject, callframe: *jsc.CallFrame) bun.JSError!jsc.JSValue { - var stack_fallback = std.heap.stackFallback(1024 * 2, bun.default_allocator); + var stack_fallback = bun.allocators.stackFallback(1024 * 2, bun.default_allocator); var arena = std.heap.ArenaAllocator.init(stack_fallback.get()); defer arena.deinit(); const allocator = arena.allocator(); diff --git a/src/bun.js/node/node_fs.zig b/src/bun.js/node/node_fs.zig index ffd20551e95..d8e40a9c439 100644 --- a/src/bun.js/node/node_fs.zig +++ b/src/bun.js/node/node_fs.zig @@ -1063,7 +1063,7 @@ pub const AsyncReaddirRecursiveTask = struct { .with_file_types => bun.jsc.Node.Dirent, .buffers => Buffer, }; - var stack = std.heap.stackFallback(8192, bun.default_allocator); + var stack = bun.allocators.stackFallback(8192, bun.default_allocator); // This is a stack-local copy to avoid resizing heap-allocated arrays in the common case of a small directory var entries = std.ArrayList(ResultType).init(stack.get()); @@ -4656,9 +4656,9 @@ pub const NodeFS = struct { comptime ExpectedType: type, entries: *std.ArrayList(ExpectedType), ) Maybe(void) { - var iterator_stack = std.heap.stackFallback(128, bun.default_allocator); + var iterator_stack = bun.allocators.stackFallback(128, bun.default_allocator); var stack = std.fifo.LinearFifo([:0]const u8, .{ .Dynamic = {} }).init(iterator_stack.get()); - var basename_stack = std.heap.stackFallback(8192 * 2, bun.default_allocator); + var basename_stack = bun.allocators.stackFallback(8192 * 2, bun.default_allocator); const basename_allocator = basename_stack.get(); defer { while (stack.readItem()) |name| { diff --git a/src/bun.js/node/node_os.zig b/src/bun.js/node/node_os.zig index 186e60377ea..2f6316c21c0 100644 --- a/src/bun.js/node/node_os.zig +++ b/src/bun.js/node/node_os.zig @@ -55,7 +55,7 @@ fn cpusImplLinux(globalThis: *jsc.JSGlobalObject) !jsc.JSValue { const values = try jsc.JSValue.createEmptyArray(globalThis, 0); var num_cpus: u32 = 0; - var stack_fallback = std.heap.stackFallback(1024 * 8, bun.default_allocator); + var stack_fallback = bun.allocators.stackFallback(1024 * 8, bun.default_allocator); var file_buf = std.ArrayList(u8).init(stack_fallback.get()); defer file_buf.deinit(); diff --git a/src/bun.js/node/node_process.zig b/src/bun.js/node/node_process.zig index b78d0d04da4..2bd6192da98 100644 --- a/src/bun.js/node/node_process.zig +++ b/src/bun.js/node/node_process.zig @@ -44,7 +44,7 @@ pub fn getExecPath(globalObject: *jsc.JSGlobalObject) callconv(.C) jsc.JSValue { } fn createExecArgv(globalObject: *jsc.JSGlobalObject) bun.JSError!jsc.JSValue { - var sfb = std.heap.stackFallback(4096, globalObject.allocator()); + var sfb = bun.allocators.stackFallback(4096, globalObject.allocator()); const temp_alloc = sfb.get(); const vm = globalObject.bunVM(); @@ -144,7 +144,7 @@ fn createArgv(globalObject: *jsc.JSGlobalObject) callconv(.C) jsc.JSValue { const vm = globalObject.bunVM(); // Allocate up to 32 strings in stack - var stack_fallback_allocator = std.heap.stackFallback( + var stack_fallback_allocator = bun.allocators.stackFallback( 32 * @sizeOf(jsc.ZigString) + (bun.MAX_PATH_BYTES + 1) + 32, bun.default_allocator, ); @@ -296,7 +296,7 @@ pub fn Bun__Process__editWindowsEnvVar(k: bun.String, v: bun.String) callconv(.C comptime bun.assert(bun.Environment.isWindows); if (k.tag == .Empty) return; const wtf1 = k.value.WTFStringImpl; - var fixed_stack_allocator = std.heap.stackFallback(1025, bun.default_allocator); + var fixed_stack_allocator = bun.allocators.stackFallback(1025, bun.default_allocator); const allocator = fixed_stack_allocator.get(); var buf1 = bun.handleOom(allocator.alloc(u16, k.utf16ByteLength() + 1)); defer allocator.free(buf1); diff --git a/src/bun.js/node/node_util_binding.zig b/src/bun.js/node/node_util_binding.zig index e8e4d962023..2e8dab8eb87 100644 --- a/src/bun.js/node/node_util_binding.zig +++ b/src/bun.js/node/node_util_binding.zig @@ -137,7 +137,7 @@ fn split( allocator: Allocator, str: *const bun.String, ) bun.JSError!jsc.JSValue { - var fallback = std.heap.stackFallback(1024, allocator); + var fallback = bun.allocators.stackFallback(1024, allocator); const alloc = fallback.get(); const Char = switch (encoding) { .utf8, .latin1 => u8, diff --git a/src/bun.js/node/path.zig b/src/bun.js/node/path.zig index 94a90dcb1e9..17dd281cdb2 100644 --- a/src/bun.js/node/path.zig +++ b/src/bun.js/node/path.zig @@ -434,7 +434,7 @@ pub fn basename(globalObject: *jsc.JSGlobalObject, isWindows: bool, args_ptr: [* const pathZStr = try path_ptr.getZigString(globalObject); if (pathZStr.len == 0) return path_ptr; - var stack_fallback = std.heap.stackFallback(stack_fallback_size_small, bun.default_allocator); + var stack_fallback = bun.allocators.stackFallback(stack_fallback_size_small, bun.default_allocator); const allocator = stack_fallback.get(); const pathZSlice = pathZStr.toSlice(allocator); @@ -623,7 +623,7 @@ pub fn dirname(globalObject: *jsc.JSGlobalObject, isWindows: bool, args_ptr: [*] const pathZStr = try path_ptr.getZigString(globalObject); if (pathZStr.len == 0) return bun.String.createUTF8ForJS(globalObject, CHAR_STR_DOT); - var stack_fallback = std.heap.stackFallback(stack_fallback_size_small, bun.default_allocator); + var stack_fallback = bun.allocators.stackFallback(stack_fallback_size_small, bun.default_allocator); const allocator = stack_fallback.get(); const pathZSlice = pathZStr.toSlice(allocator); @@ -819,7 +819,7 @@ pub fn extname(globalObject: *jsc.JSGlobalObject, isWindows: bool, args_ptr: [*] const pathZStr = try path_ptr.getZigString(globalObject); if (pathZStr.len == 0) return path_ptr; - var stack_fallback = std.heap.stackFallback(stack_fallback_size_small, bun.default_allocator); + var stack_fallback = bun.allocators.stackFallback(stack_fallback_size_small, bun.default_allocator); const allocator = stack_fallback.get(); const pathZSlice = pathZStr.toSlice(allocator); @@ -927,7 +927,7 @@ pub fn format(globalObject: *jsc.JSGlobalObject, isWindows: bool, args_ptr: [*]j // Supress exeption in zig. It does globalThis.vm().throwError() in JS land. try validateObject(globalObject, pathObject_ptr, "pathObject", .{}, .{}); - var stack_fallback = std.heap.stackFallback(stack_fallback_size_small, bun.default_allocator); + var stack_fallback = bun.allocators.stackFallback(stack_fallback_size_small, bun.default_allocator); const allocator = stack_fallback.get(); var root: []const u8 = ""; @@ -1229,7 +1229,7 @@ pub fn join(globalObject: *jsc.JSGlobalObject, isWindows: bool, args_ptr: [*]jsc var arena = bun.ArenaAllocator.init(bun.default_allocator); defer arena.deinit(); - var stack_fallback = std.heap.stackFallback(stack_fallback_size_large, arena.allocator()); + var stack_fallback = bun.allocators.stackFallback(stack_fallback_size_large, arena.allocator()); const allocator = stack_fallback.get(); var paths = bun.handleOom(allocator.alloc(string, args_len)); @@ -1638,7 +1638,7 @@ pub fn normalize(globalObject: *jsc.JSGlobalObject, isWindows: bool, args_ptr: [ const len = pathZStr.len; if (len == 0) return bun.String.createUTF8ForJS(globalObject, CHAR_STR_DOT); - var stack_fallback = std.heap.stackFallback(stack_fallback_size_small, bun.default_allocator); + var stack_fallback = bun.allocators.stackFallback(stack_fallback_size_small, bun.default_allocator); const allocator = stack_fallback.get(); const pathZSlice = pathZStr.toSlice(allocator); @@ -1958,7 +1958,7 @@ pub fn parse(globalObject: *jsc.JSGlobalObject, isWindows: bool, args_ptr: [*]js const pathZStr = try path_ptr.getZigString(globalObject); if (pathZStr.len == 0) return (PathParsed(u8){}).toJSObject(globalObject); - var stack_fallback = std.heap.stackFallback(stack_fallback_size_small, bun.default_allocator); + var stack_fallback = bun.allocators.stackFallback(stack_fallback_size_small, bun.default_allocator); const allocator = stack_fallback.get(); const pathZSlice = pathZStr.toSlice(allocator); @@ -2320,7 +2320,7 @@ pub fn relative(globalObject: *jsc.JSGlobalObject, isWindows: bool, args_ptr: [* const toZigStr = try to_ptr.getZigString(globalObject); if ((fromZigStr.len + toZigStr.len) == 0) return from_ptr; - var stack_fallback = std.heap.stackFallback(stack_fallback_size_small, bun.default_allocator); + var stack_fallback = bun.allocators.stackFallback(stack_fallback_size_small, bun.default_allocator); const allocator = stack_fallback.get(); var fromZigSlice = fromZigStr.toSlice(allocator); @@ -2764,7 +2764,7 @@ pub fn resolve(globalObject: *jsc.JSGlobalObject, isWindows: bool, args_ptr: [*] var arena = bun.ArenaAllocator.init(bun.default_allocator); defer arena.deinit(); - var stack_fallback = std.heap.stackFallback(stack_fallback_size_large, arena.allocator()); + var stack_fallback = bun.allocators.stackFallback(stack_fallback_size_large, arena.allocator()); const allocator = stack_fallback.get(); var paths = try allocator.alloc(string, args_len); @@ -2906,7 +2906,7 @@ pub fn toNamespacedPath(globalObject: *jsc.JSGlobalObject, isWindows: bool, args const len = pathZStr.len; if (len == 0) return path_ptr; - var stack_fallback = std.heap.stackFallback(stack_fallback_size_small, bun.default_allocator); + var stack_fallback = bun.allocators.stackFallback(stack_fallback_size_small, bun.default_allocator); const allocator = stack_fallback.get(); const pathZSlice = pathZStr.toSlice(allocator); diff --git a/src/bun.js/node/util/parse_args.zig b/src/bun.js/node/util/parse_args.zig index 5904dff0aa8..49b33c73d46 100644 --- a/src/bun.js/node/util/parse_args.zig +++ b/src/bun.js/node/util/parse_args.zig @@ -678,7 +678,7 @@ pub fn parseArgs(globalThis: *JSGlobalObject, callframe: *jsc.CallFrame) bun.JSE // Phase 0.C: Parse the options definitions - var options_defs_allocator = std.heap.stackFallback(2048, globalThis.allocator()); + var options_defs_allocator = bun.allocators.stackFallback(2048, globalThis.allocator()); var option_defs = std.ArrayList(OptionDefinition).init(options_defs_allocator.get()); defer option_defs.deinit(); diff --git a/src/bun.js/test/expect.zig b/src/bun.js/test/expect.zig index 700c6413aad..48144548c4b 100644 --- a/src/bun.js/test/expect.zig +++ b/src/bun.js/test/expect.zig @@ -1141,7 +1141,7 @@ pub const Expect = struct { // prepare the args array const args = callFrame.arguments(); - var allocator = std.heap.stackFallback(8 * @sizeOf(JSValue), globalThis.allocator()); + var allocator = bun.allocators.stackFallback(8 * @sizeOf(JSValue), globalThis.allocator()); var matcher_args = try std.ArrayList(JSValue).initCapacity(allocator.get(), args.len + 1); matcher_args.appendAssumeCapacity(value); for (args) |arg| matcher_args.appendAssumeCapacity(arg); @@ -1694,7 +1694,7 @@ pub const ExpectCustomAsymmetricMatcher = struct { // prepare the args array as `[received, ...captured_args]` const args_count = captured_args.getLength(globalThis) catch return false; - var allocator = std.heap.stackFallback(8 * @sizeOf(JSValue), globalThis.allocator()); + var allocator = bun.allocators.stackFallback(8 * @sizeOf(JSValue), globalThis.allocator()); var matcher_args = std.ArrayList(JSValue).initCapacity(allocator.get(), args_count + 1) catch { globalThis.throwOutOfMemory() catch {}; return false; @@ -1728,7 +1728,7 @@ pub const ExpectCustomAsymmetricMatcher = struct { if (matcher_fn.get(globalThis, "toAsymmetricMatcher") catch |e| return maybeClear(dontThrow, globalThis, e)) |fn_value| { if (fn_value.jsType().isFunction()) { const captured_args: JSValue = js.capturedArgsGetCached(thisValue) orelse return false; - var stack_fallback = std.heap.stackFallback(256, globalThis.allocator()); + var stack_fallback = bun.allocators.stackFallback(256, globalThis.allocator()); const args_len = captured_args.getLength(globalThis) catch |e| return maybeClear(dontThrow, globalThis, e); var args = try std.ArrayList(JSValue).initCapacity(stack_fallback.get(), args_len); var iter = captured_args.arrayIterator(globalThis) catch |e| return maybeClear(dontThrow, globalThis, e); @@ -1744,7 +1744,7 @@ pub const ExpectCustomAsymmetricMatcher = struct { } pub fn toAsymmetricMatcher(this: *ExpectCustomAsymmetricMatcher, globalThis: *JSGlobalObject, callframe: *CallFrame) bun.JSError!JSValue { - var stack_fallback = std.heap.stackFallback(512, globalThis.allocator()); + var stack_fallback = bun.allocators.stackFallback(512, globalThis.allocator()); var mutable_string = try bun.MutableString.init2048(stack_fallback.get()); defer mutable_string.deinit(); @@ -1824,7 +1824,7 @@ pub const ExpectMatcherUtils = struct { } fn printValue(globalThis: *JSGlobalObject, value: JSValue, comptime color_or_null: ?[]const u8) !JSValue { - var stack_fallback = std.heap.stackFallback(512, globalThis.allocator()); + var stack_fallback = bun.allocators.stackFallback(512, globalThis.allocator()); var mutable_string = try bun.MutableString.init2048(stack_fallback.get()); defer mutable_string.deinit(); diff --git a/src/bun.js/virtual_machine_exports.zig b/src/bun.js/virtual_machine_exports.zig index 63606ad9edc..634b3ca1271 100644 --- a/src/bun.js/virtual_machine_exports.zig +++ b/src/bun.js/virtual_machine_exports.zig @@ -167,35 +167,35 @@ export fn Bun__getVerboseFetchValue() i32 { } export fn Bun__addBakeSourceProviderSourceMap(vm: *VirtualMachine, opaque_source_provider: *anyopaque, specifier: *bun.String) void { - var sfb = std.heap.stackFallback(4096, bun.default_allocator); + var sfb = bun.allocators.stackFallback(4096, bun.default_allocator); const slice = specifier.toUTF8(sfb.get()); defer slice.deinit(); vm.source_mappings.putBakeSourceProvider(@as(*BakeSourceProvider, @ptrCast(opaque_source_provider)), slice.slice()); } export fn Bun__addDevServerSourceProvider(vm: *VirtualMachine, opaque_source_provider: *anyopaque, specifier: *bun.String) void { - var sfb = std.heap.stackFallback(4096, bun.default_allocator); + var sfb = bun.allocators.stackFallback(4096, bun.default_allocator); const slice = specifier.toUTF8(sfb.get()); defer slice.deinit(); vm.source_mappings.putDevServerSourceProvider(@as(*DevServerSourceProvider, @ptrCast(opaque_source_provider)), slice.slice()); } export fn Bun__removeDevServerSourceProvider(vm: *VirtualMachine, opaque_source_provider: *anyopaque, specifier: *bun.String) void { - var sfb = std.heap.stackFallback(4096, bun.default_allocator); + var sfb = bun.allocators.stackFallback(4096, bun.default_allocator); const slice = specifier.toUTF8(sfb.get()); defer slice.deinit(); vm.source_mappings.removeDevServerSourceProvider(@as(*DevServerSourceProvider, @ptrCast(opaque_source_provider)), slice.slice()); } export fn Bun__addSourceProviderSourceMap(vm: *VirtualMachine, opaque_source_provider: *anyopaque, specifier: *bun.String) void { - var sfb = std.heap.stackFallback(4096, bun.default_allocator); + var sfb = bun.allocators.stackFallback(4096, bun.default_allocator); const slice = specifier.toUTF8(sfb.get()); defer slice.deinit(); vm.source_mappings.putZigSourceProvider(opaque_source_provider, slice.slice()); } export fn Bun__removeSourceProviderSourceMap(vm: *VirtualMachine, opaque_source_provider: *anyopaque, specifier: *bun.String) void { - var sfb = std.heap.stackFallback(4096, bun.default_allocator); + var sfb = bun.allocators.stackFallback(4096, bun.default_allocator); const slice = specifier.toUTF8(sfb.get()); defer slice.deinit(); vm.source_mappings.removeZigSourceProvider(opaque_source_provider, slice.slice()); diff --git a/src/bun.js/webcore/Blob.zig b/src/bun.js/webcore/Blob.zig index 37e6ff6f254..f26bb09e1dd 100644 --- a/src/bun.js/webcore/Blob.zig +++ b/src/bun.js/webcore/Blob.zig @@ -573,7 +573,7 @@ pub fn fromDOMFormData( ) Blob { var arena = bun.ArenaAllocator.init(allocator); defer arena.deinit(); - var stack_allocator = std.heap.stackFallback(1024, arena.allocator()); + var stack_allocator = bun.allocators.stackFallback(1024, arena.allocator()); const stack_mem_all = stack_allocator.get(); var hex_buf: [70]u8 = undefined; @@ -3577,7 +3577,7 @@ pub fn toJSONWithBytes(this: *Blob, global: *JSGlobalObject, raw_bytes: []const defer if (comptime lifetime == .temporary) bun.default_allocator.free(@constCast(buf)); if (could_be_all_ascii == null or !could_be_all_ascii.?) { - var stack_fallback = std.heap.stackFallback(4096, bun.default_allocator); + var stack_fallback = bun.allocators.stackFallback(4096, bun.default_allocator); const allocator = stack_fallback.get(); // if toUTF16Alloc returns null, it means there are no non-ASCII characters if (strings.toUTF16Alloc(allocator, buf, false, false) catch null) |external| { @@ -3887,7 +3887,7 @@ fn fromJSWithoutDeferGC( } } - var stack_allocator = std.heap.stackFallback(1024, bun.default_allocator); + var stack_allocator = bun.allocators.stackFallback(1024, bun.default_allocator); const stack_mem_all = stack_allocator.get(); var stack: std.ArrayList(JSValue) = std.ArrayList(JSValue).init(stack_mem_all); var joiner = StringJoiner{ .allocator = stack_mem_all }; diff --git a/src/bun.js/webcore/prompt.zig b/src/bun.js/webcore/prompt.zig index fd951d2fc34..48a6da2217f 100644 --- a/src/bun.js/webcore/prompt.zig +++ b/src/bun.js/webcore/prompt.zig @@ -16,7 +16,7 @@ fn alert(globalObject: *jsc.JSGlobalObject, callframe: *jsc.CallFrame) bun.JSErr // 2. If the method was invoked with no arguments, then let message be the empty string; otherwise, let message be the method's first argument. if (has_message) { - var state = std.heap.stackFallback(2048, bun.default_allocator); + var state = bun.allocators.stackFallback(2048, bun.default_allocator); const allocator = state.get(); const message = try arguments[0].toSlice(globalObject, allocator); defer message.deinit(); @@ -65,7 +65,7 @@ fn confirm(globalObject: *jsc.JSGlobalObject, callframe: *jsc.CallFrame) bun.JSE const has_message = arguments.len != 0; if (has_message) { - var state = std.heap.stackFallback(1024, bun.default_allocator); + var state = bun.allocators.stackFallback(1024, bun.default_allocator); const allocator = state.get(); // 2. Set message to the result of normalizing newlines given message. // * Not pertinent to a server runtime so we will just let the terminal handle this. @@ -199,7 +199,7 @@ pub const prompt = struct { callframe: *jsc.CallFrame, ) bun.JSError!jsc.JSValue { const arguments = callframe.arguments_old(3).slice(); - var state = std.heap.stackFallback(2048, bun.default_allocator); + var state = bun.allocators.stackFallback(2048, bun.default_allocator); const allocator = state.get(); var output = bun.Output.writer(); const has_message = arguments.len != 0; diff --git a/src/bundler/HTMLImportManifest.zig b/src/bundler/HTMLImportManifest.zig index 24e33870669..8eb939900ee 100644 --- a/src/bundler/HTMLImportManifest.zig +++ b/src/bundler/HTMLImportManifest.zig @@ -96,7 +96,7 @@ fn writeEntryItem( // Extremely unfortunate, but necessary due to E.String not accepting pre-rescaped input and this happening at the very end. pub fn writeEscapedJSON(index: u32, graph: *const Graph, linker_graph: *const LinkerGraph, chunks: []const Chunk, writer: anytype) !void { - var stack = std.heap.stackFallback(4096, bun.default_allocator); + var stack = bun.allocators.stackFallback(4096, bun.default_allocator); const allocator = stack.get(); var bytes = std.ArrayList(u8).init(allocator); defer bytes.deinit(); diff --git a/src/bundler/LinkerContext.zig b/src/bundler/LinkerContext.zig index 364fbf51498..b2107c10d35 100644 --- a/src/bundler/LinkerContext.zig +++ b/src/bundler/LinkerContext.zig @@ -1421,7 +1421,7 @@ pub const LinkerContext = struct { const all_sources: []Logger.Source = c.parse_graph.input_files.items(.source); // Collect all local css names - var sfb = std.heap.stackFallback(512, c.allocator()); + var sfb = bun.allocators.stackFallback(512, c.allocator()); const alloc = sfb.get(); var local_css_names = std.AutoHashMap(bun.bundle_v2.Ref, void).init(alloc); defer local_css_names.deinit(); diff --git a/src/bundler/bundle_v2.zig b/src/bundler/bundle_v2.zig index 430884450bc..d206dc3cf0f 100644 --- a/src/bundler/bundle_v2.zig +++ b/src/bundler/bundle_v2.zig @@ -371,7 +371,7 @@ pub const BundleV2 = struct { // Create a quick index for server-component boundaries. // We need to mark the generated files as reachable, or else many files will appear missing. - var sfa = std.heap.stackFallback(4096, this.allocator()); + var sfa = bun.allocators.stackFallback(4096, this.allocator()); const stack_alloc = sfa.get(); var scb_bitset = if (this.graph.server_component_boundaries.list.len > 0) try this.graph.server_component_boundaries.slice().bitSet(stack_alloc, this.graph.input_files.len) diff --git a/src/bundler/linker_context/computeChunks.zig b/src/bundler/linker_context/computeChunks.zig index fd98457e4c2..9d781ebed80 100644 --- a/src/bundler/linker_context/computeChunks.zig +++ b/src/bundler/linker_context/computeChunks.zig @@ -7,7 +7,7 @@ pub noinline fn computeChunks( bun.assert(this.dev_server == null); // use - var stack_fallback = std.heap.stackFallback(4096, this.allocator()); + var stack_fallback = bun.allocators.stackFallback(4096, this.allocator()); const stack_all = stack_fallback.get(); var arena = bun.ArenaAllocator.init(stack_all); defer arena.deinit(); diff --git a/src/bundler/linker_context/generateCompileResultForHtmlChunk.zig b/src/bundler/linker_context/generateCompileResultForHtmlChunk.zig index a88707b0cc2..ac60e2a27d8 100644 --- a/src/bundler/linker_context/generateCompileResultForHtmlChunk.zig +++ b/src/bundler/linker_context/generateCompileResultForHtmlChunk.zig @@ -133,7 +133,7 @@ fn generateCompileResultForHTMLChunkImpl(worker: *ThreadPool.Worker, c: *LinkerC if (this.added_head_tags) return; this.added_head_tags = true; - var html_appender = std.heap.stackFallback(256, bun.default_allocator); + var html_appender = bun.allocators.stackFallback(256, bun.default_allocator); const allocator = html_appender.get(); const slices = this.getHeadTags(allocator); defer for (slices.slice()) |slice| @@ -235,7 +235,7 @@ fn generateCompileResultForHTMLChunkImpl(worker: *ThreadPool.Worker, c: *LinkerC } else brk: { if (!html_loader.added_head_tags) { @branchHint(.cold); // this is if the document is missing all head, body, and html elements. - var html_appender = std.heap.stackFallback(256, bun.default_allocator); + var html_appender = bun.allocators.stackFallback(256, bun.default_allocator); const allocator = html_appender.get(); const slices = html_loader.getHeadTags(allocator); for (slices.slice()) |slice| { diff --git a/src/bundler/linker_context/scanImportsAndExports.zig b/src/bundler/linker_context/scanImportsAndExports.zig index 724ece8ebce..49d5e905696 100644 --- a/src/bundler/linker_context/scanImportsAndExports.zig +++ b/src/bundler/linker_context/scanImportsAndExports.zig @@ -1198,7 +1198,7 @@ fn validateComposesFromProperties( } } }; - var sfb = std.heap.stackFallback(1024, this.graph.allocator); + var sfb = bun.allocators.stackFallback(1024, this.graph.allocator); const temp_allocator = sfb.get(); var visitor = Visitor{ .visited = std.AutoArrayHashMap(Ref, void).init(temp_allocator), diff --git a/src/cli/filter_run.zig b/src/cli/filter_run.zig index 57d56a3d47f..b2b5eb5902d 100644 --- a/src/cli/filter_run.zig +++ b/src/cli/filter_run.zig @@ -582,7 +582,7 @@ pub fn runScriptsWithFilter(ctx: Command.Context) !noreturn { for (state.handles) |*handle| { var iter = handle.config.deps.map.iterator(); while (iter.next()) |entry| { - var sfa = std.heap.stackFallback(256, ctx.allocator); + var sfa = bun.allocators.stackFallback(256, ctx.allocator); const alloc = sfa.get(); const buf = try alloc.alloc(u8, entry.key_ptr.len()); defer alloc.free(buf); diff --git a/src/cli/run_command.zig b/src/cli/run_command.zig index c72159c96c8..6e337aa0bb9 100644 --- a/src/cli/run_command.zig +++ b/src/cli/run_command.zig @@ -1404,7 +1404,7 @@ pub const RunCommand = struct { log("Executing from stdin", .{}); // read from stdin - var stack_fallback = std.heap.stackFallback(2048, bun.default_allocator); + var stack_fallback = bun.allocators.stackFallback(2048, bun.default_allocator); var list = std.ArrayList(u8).init(stack_fallback.get()); errdefer list.deinit(); diff --git a/src/cli/test_command.zig b/src/cli/test_command.zig index 318cb518c7f..b03e71381b1 100644 --- a/src/cli/test_command.zig +++ b/src/cli/test_command.zig @@ -182,7 +182,7 @@ pub const JunitReporter = struct { }; var arena = std.heap.ArenaAllocator.init(bun.default_allocator); defer arena.deinit(); - var stack = std.heap.stackFallback(1024, arena.allocator()); + var stack = bun.allocators.stackFallback(1024, arena.allocator()); const allocator = stack.get(); const properties: PropertiesList = .{ @@ -342,7 +342,7 @@ pub const JunitReporter = struct { var arena = std.heap.ArenaAllocator.init(bun.default_allocator); defer arena.deinit(); - var stack_fallback_allocator = std.heap.stackFallback(4096, arena.allocator()); + var stack_fallback_allocator = bun.allocators.stackFallback(4096, arena.allocator()); const allocator = stack_fallback_allocator.get(); const elapsed_time_ms = suite_info.metrics.elapsed_time; @@ -532,7 +532,7 @@ pub const JunitReporter = struct { { var arena = std.heap.ArenaAllocator.init(bun.default_allocator); defer arena.deinit(); - var stack_fallback_allocator = std.heap.stackFallback(4096, arena.allocator()); + var stack_fallback_allocator = bun.allocators.stackFallback(4096, arena.allocator()); const allocator = stack_fallback_allocator.get(); const metrics = this.total_metrics; const elapsed_time = @as(f64, @floatFromInt(std.time.nanoTimestamp() - bun.start_time)) / std.time.ns_per_s; @@ -809,7 +809,7 @@ pub const CommandLineReporter = struct { var arena = std.heap.ArenaAllocator.init(bun.default_allocator); defer arena.deinit(); - var stack_fallback = std.heap.stackFallback(4096, arena.allocator()); + var stack_fallback = bun.allocators.stackFallback(4096, arena.allocator()); const allocator = stack_fallback.get(); var concatenated_describe_scopes = std.ArrayList(u8).init(allocator); diff --git a/src/crash_handler.zig b/src/crash_handler.zig index 2cea2ce25e3..2445f9d1bb8 100644 --- a/src/crash_handler.zig +++ b/src/crash_handler.zig @@ -1664,7 +1664,7 @@ pub fn dumpStackTrace(trace: std.builtin.StackTrace, limits: WriteStackTraceLimi for (programs) |program| { var arena = bun.ArenaAllocator.init(bun.default_allocator); defer arena.deinit(); - var sfa = std.heap.stackFallback(16384, arena.allocator()); + var sfa = bun.allocators.stackFallback(16384, arena.allocator()); spawnSymbolizer(program, sfa.get(), &trace) catch |err| switch (err) { // try next program if this one wasn't found error.FileNotFound => continue, diff --git a/src/css/css_modules.zig b/src/css/css_modules.zig index 953034ccf0c..6229bb51221 100644 --- a/src/css/css_modules.zig +++ b/src/css/css_modules.zig @@ -395,7 +395,7 @@ pub const CssModuleReference = union(enum) { // TODO: replace with bun's hash pub fn hash(allocator: Allocator, comptime fmt: []const u8, args: anytype, at_start: bool) []const u8 { const count = std.fmt.count(fmt, args); - var stack_fallback = std.heap.stackFallback(128, allocator); + var stack_fallback = bun.allocators.stackFallback(128, allocator); const fmt_alloc = if (count <= 128) stack_fallback.get() else allocator; var hasher = bun.Wyhash11.init(0); var fmt_str = bun.handleOom(std.fmt.allocPrint(fmt_alloc, fmt, args)); diff --git a/src/css/css_parser.zig b/src/css/css_parser.zig index 3ec785d33bc..15d8a78d55a 100644 --- a/src/css/css_parser.zig +++ b/src/css/css_parser.zig @@ -3972,7 +3972,7 @@ pub const Parser = struct { // TODO(zack): might be faster to use stack fallback here // in the common case we may have just 1, but I feel like it is also very common to have >1 // which means every time we have >1 items we will always incur 1 more additional allocation - var sfb = std.heap.stackFallback(@sizeOf(T), this.allocator()); + var sfb = bun.allocators.stackFallback(@sizeOf(T), this.allocator()); const alloc = sfb.get(); var values = ArrayList(T).initCapacity(alloc, 1) catch unreachable; diff --git a/src/css/properties/font.zig b/src/css/properties/font.zig index 4a2c496fb12..56f7a3e06d1 100644 --- a/src/css/properties/font.zig +++ b/src/css/properties/font.zig @@ -937,7 +937,7 @@ pub const FontHandler = struct { if (family) |*f| { if (f.len > 1) { // Dedupe - var sfb = std.heap.stackFallback(664, bun.default_allocator); + var sfb = bun.allocators.stackFallback(664, bun.default_allocator); const alloc = sfb.get(); var seen = FontFamily.HashMap(void){}; defer seen.deinit(alloc); diff --git a/src/css/values/color_js.zig b/src/css/values/color_js.zig index 84cccde9ece..dc48ef79e56 100644 --- a/src/css/values/color_js.zig +++ b/src/css/values/color_js.zig @@ -139,7 +139,7 @@ pub fn jsFunctionColor(globalThis: *jsc.JSGlobalObject, callFrame: *jsc.CallFram var arena = std.heap.ArenaAllocator.init(bun.default_allocator); defer arena.deinit(); - var stack_fallback = std.heap.stackFallback(4096, arena.allocator()); + var stack_fallback = bun.allocators.stackFallback(4096, arena.allocator()); const allocator = stack_fallback.get(); var log = bun.logger.Log.init(allocator); diff --git a/src/deps/c_ares.zig b/src/deps/c_ares.zig index 19c982c3d9b..1de4288b810 100644 --- a/src/deps/c_ares.zig +++ b/src/deps/c_ares.zig @@ -859,7 +859,7 @@ pub const struct_ares_caa_reply = extern struct { length: usize, pub fn toJSResponse(this: *struct_ares_caa_reply, parent_allocator: std.mem.Allocator, globalThis: *jsc.JSGlobalObject, comptime _: []const u8) bun.JSError!jsc.JSValue { - var stack = std.heap.stackFallback(2048, parent_allocator); + var stack = bun.allocators.stackFallback(2048, parent_allocator); var arena = bun.ArenaAllocator.init(stack.get()); defer arena.deinit(); @@ -937,7 +937,7 @@ pub const struct_ares_srv_reply = extern struct { port: c_ushort, pub fn toJSResponse(this: *struct_ares_srv_reply, parent_allocator: std.mem.Allocator, globalThis: *jsc.JSGlobalObject, comptime _: []const u8) bun.JSError!jsc.JSValue { - var stack = std.heap.stackFallback(2048, parent_allocator); + var stack = bun.allocators.stackFallback(2048, parent_allocator); var arena = bun.ArenaAllocator.init(stack.get()); defer arena.deinit(); @@ -1020,7 +1020,7 @@ pub const struct_ares_mx_reply = extern struct { priority: c_ushort, pub fn toJSResponse(this: *struct_ares_mx_reply, parent_allocator: std.mem.Allocator, globalThis: *jsc.JSGlobalObject, comptime _: []const u8) bun.JSError!jsc.JSValue { - var stack = std.heap.stackFallback(2048, parent_allocator); + var stack = bun.allocators.stackFallback(2048, parent_allocator); var arena = bun.ArenaAllocator.init(stack.get()); defer arena.deinit(); @@ -1094,7 +1094,7 @@ pub const struct_ares_txt_reply = extern struct { length: usize, pub fn toJSResponse(this: *struct_ares_txt_reply, parent_allocator: std.mem.Allocator, globalThis: *jsc.JSGlobalObject, comptime _: []const u8) bun.JSError!jsc.JSValue { - var stack = std.heap.stackFallback(2048, parent_allocator); + var stack = bun.allocators.stackFallback(2048, parent_allocator); var arena = bun.ArenaAllocator.init(stack.get()); defer arena.deinit(); @@ -1196,7 +1196,7 @@ pub const struct_ares_naptr_reply = extern struct { preference: c_ushort, pub fn toJSResponse(this: *struct_ares_naptr_reply, parent_allocator: std.mem.Allocator, globalThis: *jsc.JSGlobalObject, comptime _: []const u8) bun.JSError!jsc.JSValue { - var stack = std.heap.stackFallback(2048, parent_allocator); + var stack = bun.allocators.stackFallback(2048, parent_allocator); var arena = bun.ArenaAllocator.init(stack.get()); defer arena.deinit(); @@ -1288,7 +1288,7 @@ pub const struct_ares_soa_reply = extern struct { minttl: c_uint, pub fn toJSResponse(this: *struct_ares_soa_reply, parent_allocator: std.mem.Allocator, globalThis: *jsc.JSGlobalObject, comptime _: []const u8) bun.JSError!jsc.JSValue { - var stack = std.heap.stackFallback(2048, parent_allocator); + var stack = bun.allocators.stackFallback(2048, parent_allocator); var arena = bun.ArenaAllocator.init(stack.get()); defer arena.deinit(); @@ -1371,7 +1371,7 @@ pub const struct_any_reply = struct { caa_reply: ?*struct_ares_caa_reply = null, pub fn toJSResponse(this: *struct_any_reply, parent_allocator: std.mem.Allocator, globalThis: *jsc.JSGlobalObject, comptime _: []const u8) bun.JSError!jsc.JSValue { - var stack = std.heap.stackFallback(2048, parent_allocator); + var stack = bun.allocators.stackFallback(2048, parent_allocator); var arena = bun.ArenaAllocator.init(stack.get()); defer arena.deinit(); diff --git a/src/deps/uws/socket.zig b/src/deps/uws/socket.zig index d4f81b8f77b..dd39fc4ba6f 100644 --- a/src/deps/uws/socket.zig +++ b/src/deps/uws/socket.zig @@ -469,7 +469,7 @@ pub fn NewSocketHandler(comptime is_ssl: bool) type { ) ?*Context { debug("connect({s}, {d})", .{ host, port }); - var stack_fallback = std.heap.stackFallback(1024, bun.default_allocator); + var stack_fallback = bun.allocators.stackFallback(1024, bun.default_allocator); var allocator = stack_fallback.get(); // remove brackets from IPv6 addresses, as getaddrinfo doesn't understand them @@ -576,7 +576,7 @@ pub fn NewSocketHandler(comptime is_ssl: bool) type { allowHalfOpen: bool, ) !ThisSocket { debug("connect(unix:{s})", .{path}); - var stack_fallback = std.heap.stackFallback(1024, bun.default_allocator); + var stack_fallback = bun.allocators.stackFallback(1024, bun.default_allocator); var allocator = stack_fallback.get(); const path_ = bun.handleOom(allocator.dupeZ(u8, path)); defer allocator.free(path_); @@ -599,7 +599,7 @@ pub fn NewSocketHandler(comptime is_ssl: bool) type { allowHalfOpen: bool, ) !ThisSocket { debug("connect({s}, {d})", .{ raw_host, port }); - var stack_fallback = std.heap.stackFallback(1024, bun.default_allocator); + var stack_fallback = bun.allocators.stackFallback(1024, bun.default_allocator); var allocator = stack_fallback.get(); // remove brackets from IPv6 addresses, as getaddrinfo doesn't understand them diff --git a/src/deps/uws/us_socket_t.zig b/src/deps/uws/us_socket_t.zig index a67efb92863..5150ad72ab7 100644 --- a/src/deps/uws/us_socket_t.zig +++ b/src/deps/uws/us_socket_t.zig @@ -291,7 +291,7 @@ pub const c = struct { buffer.wrote(total_written); } - var stack_fallback = std.heap.stackFallback(16 * 1024, bun.default_allocator); + var stack_fallback = bun.allocators.stackFallback(16 * 1024, bun.default_allocator); const node_buffer: jsc.Node.BlobOrStringOrBuffer = if (data.isUndefined()) jsc.Node.BlobOrStringOrBuffer{ .string_or_buffer = jsc.Node.StringOrBuffer.empty } else diff --git a/src/dns.zig b/src/dns.zig index 0875024c4cd..577c7ac89d0 100644 --- a/src/dns.zig +++ b/src/dns.zig @@ -402,7 +402,7 @@ pub fn addressToString(address: *const std.net.Address) bun.OOM!bun.String { }); }, std.posix.AF.INET6 => { - var stack = std.heap.stackFallback(512, default_allocator); + var stack = bun.allocators.stackFallback(512, default_allocator); const allocator = stack.get(); var out = try std.fmt.allocPrint(allocator, "{any}", .{address.*}); defer allocator.free(out); diff --git a/src/env_loader.zig b/src/env_loader.zig index fb1787f758a..bdeb13f63a7 100644 --- a/src/env_loader.zig +++ b/src/env_loader.zig @@ -524,7 +524,7 @@ pub const Loader = struct { const start = std.time.nanoTimestamp(); // Create a reusable buffer with stack fallback for parsing multiple files - var stack_fallback = std.heap.stackFallback(4096, this.allocator); + var stack_fallback = bun.allocators.stackFallback(4096, this.allocator); var value_buffer = std.ArrayList(u8).init(stack_fallback.get()); defer value_buffer.deinit(); diff --git a/src/feature_flags.zig b/src/feature_flags.zig index da55db656e5..a4626993c9a 100644 --- a/src/feature_flags.zig +++ b/src/feature_flags.zig @@ -4,6 +4,7 @@ pub const RuntimeFeatureFlag = enum { BUN_ASSUME_PERFECT_INCREMENTAL, BUN_BE_BUN, BUN_DEBUG_NO_DUMP, + BUN_DEBUG_FORCE_HEAP_FALLBACK_ALLOCATORS, BUN_DESTRUCT_VM_ON_EXIT, BUN_DISABLE_SLOW_LIFECYCLE_SCRIPT_LOGGING, BUN_DISABLE_SOURCE_CODE_PREVIEW, diff --git a/src/fs.zig b/src/fs.zig index 6f6542b874a..fd7dbd77850 100644 --- a/src/fs.zig +++ b/src/fs.zig @@ -152,7 +152,7 @@ pub const FileSystem = struct { const stored = try brk: { if (prev_map) |map| { - var stack_fallback = std.heap.stackFallback(512, allocator); + var stack_fallback = bun.allocators.stackFallback(512, allocator); const stack = stack_fallback.get(); const prehashed = bun.StringHashMapContext.PrehashedCaseInsensitive.init(stack, name_slice); defer prehashed.deinit(stack); diff --git a/src/glob/GlobWalker.zig b/src/glob/GlobWalker.zig index 96a484c6635..599d9f7c926 100644 --- a/src/glob/GlobWalker.zig +++ b/src/glob/GlobWalker.zig @@ -643,7 +643,7 @@ pub fn GlobWalker_( this.closeDisallowingCwd(fd); } const stackbuf_size = 256; - var stfb = std.heap.stackFallback(stackbuf_size, this.walker.arena.allocator()); + var stfb = bun.allocators.stackFallback(stackbuf_size, this.walker.arena.allocator()); const pathz = try stfb.get().dupeZ(u8, this.walker.patternComponents.items[component_idx].patternSlice(this.walker.pattern)); const stat_result: bun.Stat = switch (Accessor.statat(fd, pathz)) { .err => |e_| { diff --git a/src/http.zig b/src/http.zig index c5cea683eba..21660b4cf46 100644 --- a/src/http.zig +++ b/src/http.zig @@ -1259,7 +1259,7 @@ pub fn onWritable(this: *HTTPClient, comptime is_first_call: bool, comptime is_s log("send proxy headers", .{}); if (this.proxy_tunnel) |proxy| { this.setTimeout(socket, 5); - var stack_buffer = std.heap.stackFallback(1024 * 16, bun.default_allocator); + var stack_buffer = bun.allocators.stackFallback(1024 * 16, bun.default_allocator); const allocator = stack_buffer.get(); var temporary_send_buffer = std.ArrayList(u8).fromOwnedSlice(allocator, &stack_buffer.buffer); temporary_send_buffer.items.len = 0; @@ -2264,7 +2264,7 @@ pub fn handleResponseMetadata( { var url_arena = std.heap.ArenaAllocator.init(bun.default_allocator); defer url_arena.deinit(); - var fba = std.heap.stackFallback(4096, url_arena.allocator()); + var fba = bun.allocators.stackFallback(4096, url_arena.allocator()); const url_allocator = fba.get(); if (strings.indexOf(location, "://")) |i| { var string_builder = bun.StringBuilder{}; diff --git a/src/http/HTTPThread.zig b/src/http/HTTPThread.zig index c65dd26ec83..3760784891c 100644 --- a/src/http/HTTPThread.zig +++ b/src/http/HTTPThread.zig @@ -48,7 +48,7 @@ pub const HeapRequestBodyBuffer = struct { pub const RequestBodyBuffer = union(enum) { heap: *HeapRequestBodyBuffer, - stack: std.heap.StackFallbackAllocator(request_body_send_stack_buffer_size), + stack: bun.allocators.StackFallbackAllocator(request_body_send_stack_buffer_size), pub fn deinit(this: *@This()) void { switch (this.*) { @@ -113,7 +113,7 @@ pub inline fn getRequestBodySendBuffer(this: *@This(), estimated_size: usize) Re return .{ .heap = bun.take(&this.lazy_request_body_buffer).? }; } return .{ - .stack = std.heap.stackFallback(request_body_send_stack_buffer_size, bun.default_allocator), + .stack = bun.allocators.stackFallback(request_body_send_stack_buffer_size, bun.default_allocator), }; } diff --git a/src/ini.zig b/src/ini.zig index 50082703d00..1785ae1d70e 100644 --- a/src/ini.zig +++ b/src/ini.zig @@ -51,7 +51,7 @@ pub const Parser = struct { // var duplicates = bun.StringArrayHashMapUnmanaged(u32){}; // defer duplicates.deinit(allocator); - var rope_stack = std.heap.stackFallback(@sizeOf(Rope) * 6, arena_allocator); + var rope_stack = bun.allocators.stackFallback(@sizeOf(Rope) * 6, arena_allocator); const ropealloc = rope_stack.get(); var skip_until_next_section: bool = false; @@ -262,7 +262,7 @@ pub const Parser = struct { // walk the val to find the first non-escaped comment character (; or #) var did_any_escape: bool = false; var esc = false; - var sfb = std.heap.stackFallback(STACK_BUF_SIZE, arena_allocator); + var sfb = bun.allocators.stackFallback(STACK_BUF_SIZE, arena_allocator); var unesc = try std.ArrayList(u8).initCapacity(sfb.get(), STACK_BUF_SIZE); const RopeT = if (comptime usage == .section) *Rope else struct {}; diff --git a/src/install/NetworkTask.zig b/src/install/NetworkTask.zig index 4d120ad6445..f033ce2eae3 100644 --- a/src/install/NetworkTask.zig +++ b/src/install/NetworkTask.zig @@ -90,7 +90,7 @@ pub fn forManifest( // "npm" CLI requests the manifest with the encoded name. var arena = std.heap.ArenaAllocator.init(bun.default_allocator); defer arena.deinit(); - var stack_fallback_allocator = std.heap.stackFallback(512, arena.allocator()); + var stack_fallback_allocator = bun.allocators.stackFallback(512, arena.allocator()); var encoded_name = name; if (strings.containsChar(name, '/')) { encoded_name = try std.mem.replaceOwned(u8, stack_fallback_allocator.get(), name, "/", "%2f"); diff --git a/src/install/PackageInstall.zig b/src/install/PackageInstall.zig index 3446d350943..f76461d9eeb 100644 --- a/src/install/PackageInstall.zig +++ b/src/install/PackageInstall.zig @@ -142,7 +142,7 @@ pub const PackageInstall = struct { this.destination_dir_subpath_buf[this.destination_dir_subpath.len + std.fs.path.sep_str.len + ".bun-tag".len] = 0; const bun_tag_path: [:0]u8 = this.destination_dir_subpath_buf[0 .. this.destination_dir_subpath.len + std.fs.path.sep_str.len + ".bun-tag".len :0]; defer this.destination_dir_subpath_buf[this.destination_dir_subpath.len] = 0; - var git_tag_stack_fallback = std.heap.stackFallback(2048, bun.default_allocator); + var git_tag_stack_fallback = bun.allocators.stackFallback(2048, bun.default_allocator); const allocator = git_tag_stack_fallback.get(); var bun_tag_file = this.node_modules.readSmallFile( diff --git a/src/install/PackageInstaller.zig b/src/install/PackageInstaller.zig index ee0ad7e6bce..9c4d08be40c 100644 --- a/src/install/PackageInstaller.zig +++ b/src/install/PackageInstaller.zig @@ -738,7 +738,7 @@ pub const PackageInstaller = struct { const patch_patch, const patch_contents_hash, const patch_name_and_version_hash, const remove_patch = brk: { if (this.manager.lockfile.patched_dependencies.entries.len == 0 and this.manager.patched_dependencies_to_remove.entries.len == 0) break :brk .{ null, null, null, false }; - var sfa = std.heap.stackFallback(1024, this.lockfile.allocator); + var sfa = bun.allocators.stackFallback(1024, this.lockfile.allocator); const alloc = sfa.get(); const name_and_version = std.fmt.allocPrint(alloc, "{s}@{s}", .{ pkg_name.slice(this.lockfile.buffers.string_bytes.items), diff --git a/src/install/PackageManager/PackageManagerLifecycle.zig b/src/install/PackageManager/PackageManagerLifecycle.zig index 986a010029e..1a90c1423da 100644 --- a/src/install/PackageManager/PackageManagerLifecycle.zig +++ b/src/install/PackageManager/PackageManagerLifecycle.zig @@ -90,7 +90,7 @@ pub fn determinePreinstallState( const patch_hash: ?u64 = brk: { if (manager.lockfile.patched_dependencies.entries.len == 0) break :brk null; - var sfb = std.heap.stackFallback(1024, manager.lockfile.allocator); + var sfb = bun.allocators.stackFallback(1024, manager.lockfile.allocator); const name_and_version = std.fmt.allocPrint( sfb.get(), "{s}@{}", diff --git a/src/install/PackageManager/PackageManagerResolution.zig b/src/install/PackageManager/PackageManagerResolution.zig index 7affcad333e..0f7dd4dfcf6 100644 --- a/src/install/PackageManager/PackageManagerResolution.zig +++ b/src/install/PackageManager/PackageManagerResolution.zig @@ -86,7 +86,7 @@ pub fn resolveFromDiskCache(this: *PackageManager, package_name: []const u8, ver var arena = bun.ArenaAllocator.init(this.allocator); defer arena.deinit(); const arena_alloc = arena.allocator(); - var stack_fallback = std.heap.stackFallback(4096, arena_alloc); + var stack_fallback = bun.allocators.stackFallback(4096, arena_alloc); const allocator = stack_fallback.get(); var tags_buf = std.ArrayList(u8).init(allocator); const installed_versions = this.getInstalledVersionsFromDiskCache(&tags_buf, package_name, allocator) catch |err| { diff --git a/src/install/PackageManager/UpdateRequest.zig b/src/install/PackageManager/UpdateRequest.zig index eeb5476ed53..2618bac230b 100644 --- a/src/install/PackageManager/UpdateRequest.zig +++ b/src/install/PackageManager/UpdateRequest.zig @@ -49,7 +49,7 @@ pub fn getResolvedName(this: *const UpdateRequest, lockfile: *const Lockfile) st pub fn fromJS(globalThis: *jsc.JSGlobalObject, input: jsc.JSValue) bun.JSError!jsc.JSValue { var arena = std.heap.ArenaAllocator.init(bun.default_allocator); defer arena.deinit(); - var stack = std.heap.stackFallback(1024, arena.allocator()); + var stack = bun.allocators.stackFallback(1024, arena.allocator()); const allocator = stack.get(); var all_positionals = std.ArrayList([]const u8).init(allocator); diff --git a/src/install/PackageManager/install_with_manager.zig b/src/install/PackageManager/install_with_manager.zig index 90d016cd8cd..9d1e3d462a3 100644 --- a/src/install/PackageManager/install_with_manager.zig +++ b/src/install/PackageManager/install_with_manager.zig @@ -11,7 +11,7 @@ pub fn installWithManager( if (!manager.env.hasHTTPProxy()) { // And don't try to resolve DNS if it's an IP address. if (manager.options.scope.url.hostname.len > 0 and !manager.options.scope.url.isIPAddress()) { - var hostname_stack = std.heap.stackFallback(512, ctx.allocator); + var hostname_stack = bun.allocators.stackFallback(512, ctx.allocator); const allocator = hostname_stack.get(); const hostname = try allocator.dupeZ(u8, manager.options.scope.url.hostname); defer allocator.free(hostname); diff --git a/src/install/PackageManager/patchPackage.zig b/src/install/PackageManager/patchPackage.zig index a8c286ae15b..ef99cff67a1 100644 --- a/src/install/PackageManager/patchPackage.zig +++ b/src/install/PackageManager/patchPackage.zig @@ -633,7 +633,7 @@ pub fn preparePatch(manager: *PackageManager) !void { }; const existing_patchfile_hash = existing_patchfile_hash: { - var __sfb = std.heap.stackFallback(1024, manager.allocator); + var __sfb = bun.allocators.stackFallback(1024, manager.allocator); const allocator = __sfb.get(); const name_and_version = std.fmt.allocPrint(allocator, "{s}@{}", .{ name, actual_package.resolution.fmt(strbuf, .posix) }) catch unreachable; defer allocator.free(name_and_version); @@ -671,7 +671,7 @@ pub fn preparePatch(manager: *PackageManager) !void { const pkg_name = pkg.name.slice(strbuf); const existing_patchfile_hash = existing_patchfile_hash: { - var __sfb = std.heap.stackFallback(1024, manager.allocator); + var __sfb = bun.allocators.stackFallback(1024, manager.allocator); const sfballoc = __sfb.get(); const name_and_version = std.fmt.allocPrint(sfballoc, "{s}@{}", .{ name, pkg.resolution.fmt(strbuf, .posix) }) catch unreachable; defer sfballoc.free(name_and_version); @@ -923,7 +923,7 @@ fn pkgInfoForNameAndVersion( name: []const u8, version: ?[]const u8, ) struct { PackageID, Lockfile.Tree.Iterator(.node_modules).Next } { - var sfb = std.heap.stackFallback(@sizeOf(IdPair) * 4, lockfile.allocator); + var sfb = bun.allocators.stackFallback(@sizeOf(IdPair) * 4, lockfile.allocator); var pairs = bun.handleOom(std.ArrayList(IdPair).initCapacity(sfb.get(), 8)); defer pairs.deinit(); diff --git a/src/install/dependency.zig b/src/install/dependency.zig index e92f49f051b..c96f5ecb183 100644 --- a/src/install/dependency.zig +++ b/src/install/dependency.zig @@ -1280,7 +1280,7 @@ pub fn fromJS(globalThis: *jsc.JSGlobalObject, callframe: *jsc.CallFrame) bun.JS } var arena = std.heap.ArenaAllocator.init(bun.default_allocator); defer arena.deinit(); - var stack = std.heap.stackFallback(1024, arena.allocator()); + var stack = bun.allocators.stackFallback(1024, arena.allocator()); const allocator = stack.get(); const alias_value: jsc.JSValue = if (arguments.len > 0) arguments[0] else .js_undefined; diff --git a/src/install/lockfile/Package.zig b/src/install/lockfile/Package.zig index c015adfde61..1eca5b684f3 100644 --- a/src/install/lockfile/Package.zig +++ b/src/install/lockfile/Package.zig @@ -1641,7 +1641,7 @@ pub fn Package(comptime SemverIntType: type) type { const key = prop.key.?; const value = prop.value.?; if (key.isString() and value.isString()) { - var sfb = std.heap.stackFallback(1024, allocator); + var sfb = bun.allocators.stackFallback(1024, allocator); const keyhash = try key.asStringHash(sfb.get(), String.Builder.stringHash) orelse unreachable; const patch_path = string_builder.append(String, value.asString(allocator).?); lockfile.patched_dependencies.put(allocator, keyhash, .{ .path = patch_path }) catch unreachable; diff --git a/src/install/npm.zig b/src/install/npm.zig index c3eed59b2bc..8100fdd2f12 100644 --- a/src/install/npm.zig +++ b/src/install/npm.zig @@ -1045,7 +1045,7 @@ pub const PackageManifest = struct { ) !void { const cache_dir: bun.FD = .fromStdDir(cache_dir_std); // 64 KB sounds like a lot but when you consider that this is only about 6 levels deep in the stack, it's not that much. - var stack_fallback = std.heap.stackFallback(64 * 1024, bun.default_allocator); + var stack_fallback = bun.allocators.stackFallback(64 * 1024, bun.default_allocator); const allocator = stack_fallback.get(); var buffer = try std.ArrayList(u8).initCapacity(allocator, this.byteLength(scope) + 64); diff --git a/src/install/repository.zig b/src/install/repository.zig index 1fe39d2e417..b22bb63c247 100644 --- a/src/install/repository.zig +++ b/src/install/repository.zig @@ -31,7 +31,7 @@ const SloppyGlobalGitConfig = struct { var config_file_path_buf: bun.PathBuffer = undefined; const config_file_path = bun.path.joinAbsStringBufZ(home_dir_path, &config_file_path_buf, &.{".gitconfig"}, .auto); - var stack_fallback = std.heap.stackFallback(4096, bun.default_allocator); + var stack_fallback = bun.allocators.stackFallback(4096, bun.default_allocator); const allocator = stack_fallback.get(); const source = File.toSource(config_file_path, allocator, .{ .convert_bom = true }).unwrap() catch { return; diff --git a/src/install/yarn.zig b/src/install/yarn.zig index 21af400e759..b5ced0e601a 100644 --- a/src/install/yarn.zig +++ b/src/install/yarn.zig @@ -488,7 +488,7 @@ fn processDeps( ) ![]Install.PackageID { var deps_it = deps.iterator(); var count: usize = 0; - var dep_spec_name_stack = std.heap.stackFallback(1024, bun.default_allocator); + var dep_spec_name_stack = bun.allocators.stackFallback(1024, bun.default_allocator); const temp_allocator = dep_spec_name_stack.get(); while (deps_it.next()) |dep| { diff --git a/src/interchange/toml.zig b/src/interchange/toml.zig index ffec013f708..1811958cbf7 100644 --- a/src/interchange/toml.zig +++ b/src/interchange/toml.zig @@ -136,7 +136,7 @@ pub const TOML = struct { var root = p.e(E.Object{}, p.lexer.loc()); var head = root.data.e_object; - var stack = std.heap.stackFallback(@sizeOf(Rope) * 6, p.allocator); + var stack = bun.allocators.stackFallback(@sizeOf(Rope) * 6, p.allocator); const key_allocator = stack.get(); while (true) { @@ -281,7 +281,7 @@ pub const TOML = struct { .t_open_brace => { try p.lexer.next(); var is_single_line = !p.lexer.has_newline_before; - var stack = std.heap.stackFallback(@sizeOf(Rope) * 6, p.allocator); + var stack = bun.allocators.stackFallback(@sizeOf(Rope) * 6, p.allocator); const key_allocator = stack.get(); const expr = p.e(E.Object{}, loc); const obj = expr.data.e_object; diff --git a/src/io/io.zig b/src/io/io.zig index 7cc055a364b..efa0e6ca12b 100644 --- a/src/io/io.zig +++ b/src/io/io.zig @@ -195,7 +195,7 @@ pub const Loop = struct { this.updateNow(); while (true) { - var stack_fallback = std.heap.stackFallback(@sizeOf([256]EventType), bun.default_allocator); + var stack_fallback = bun.allocators.stackFallback(@sizeOf([256]EventType), bun.default_allocator); var events_list: std.ArrayList(EventType) = std.ArrayList(EventType).initCapacity(stack_fallback.get(), 256) catch unreachable; defer events_list.deinit(); diff --git a/src/js_printer.zig b/src/js_printer.zig index f1dcdb9882c..d74cba07ae6 100644 --- a/src/js_printer.zig +++ b/src/js_printer.zig @@ -5791,7 +5791,7 @@ pub fn printAst( } } printer.was_lazy_export = tree.has_lazy_export; - var bin_stack_heap = std.heap.stackFallback(1024, bun.default_allocator); + var bin_stack_heap = bun.allocators.stackFallback(1024, bun.default_allocator); printer.binary_expression_stack = std.ArrayList(PrinterType.BinaryExpressionVisitor).init(bin_stack_heap.get()); defer printer.binary_expression_stack.clearAndFree(); @@ -5879,7 +5879,7 @@ pub fn printJSON( renamer.toRenamer(), undefined, ); - var bin_stack_heap = std.heap.stackFallback(1024, bun.default_allocator); + var bin_stack_heap = bun.allocators.stackFallback(1024, bun.default_allocator); printer.binary_expression_stack = std.ArrayList(PrinterType.BinaryExpressionVisitor).init(bin_stack_heap.get()); defer printer.binary_expression_stack.clearAndFree(); @@ -5985,7 +5985,7 @@ pub fn printWithWriterAndPlatform( getSourceMapBuilder(if (generate_source_maps) .eager else .disable, is_bun_platform, opts, source, &ast), ); printer.was_lazy_export = ast.has_lazy_export; - var bin_stack_heap = std.heap.stackFallback(1024, bun.default_allocator); + var bin_stack_heap = bun.allocators.stackFallback(1024, bun.default_allocator); printer.binary_expression_stack = std.ArrayList(PrinterType.BinaryExpressionVisitor).init(bin_stack_heap.get()); defer printer.binary_expression_stack.clearAndFree(); @@ -6067,7 +6067,7 @@ pub fn printCommonJS( renamer.toRenamer(), getSourceMapBuilder(if (generate_source_map) .lazy else .disable, false, opts, source, &tree), ); - var bin_stack_heap = std.heap.stackFallback(1024, bun.default_allocator); + var bin_stack_heap = bun.allocators.stackFallback(1024, bun.default_allocator); printer.binary_expression_stack = std.ArrayList(PrinterType.BinaryExpressionVisitor).init(bin_stack_heap.get()); defer printer.binary_expression_stack.clearAndFree(); diff --git a/src/patch.zig b/src/patch.zig index 2143a8b4f8d..22859c19bbf 100644 --- a/src/patch.zig +++ b/src/patch.zig @@ -50,7 +50,7 @@ pub const PatchFile = struct { pub fn apply(this: *const PatchFile, allocator: Allocator, patch_dir: bun.FileDescriptor) ?bun.sys.Error { var state: ApplyState = .{}; - var sfb = std.heap.stackFallback(1024, allocator); + var sfb = bun.allocators.stackFallback(1024, allocator); var arena = bun.ArenaAllocator.init(sfb.get()); defer arena.deinit(); diff --git a/src/resolver/resolver.zig b/src/resolver/resolver.zig index f2024676254..f4d858fb939 100644 --- a/src/resolver/resolver.zig +++ b/src/resolver/resolver.zig @@ -3438,7 +3438,7 @@ pub const Resolver = struct { pub fn nodeModulePathsJSValue(in_str: bun.String, globalObject: *bun.jsc.JSGlobalObject, use_dirname: bool) callconv(.C) bun.jsc.JSValue { var arena = std.heap.ArenaAllocator.init(bun.default_allocator); defer arena.deinit(); - var stack_fallback_allocator = std.heap.stackFallback(1024, arena.allocator()); + var stack_fallback_allocator = bun.allocators.stackFallback(1024, arena.allocator()); const alloc = stack_fallback_allocator.get(); var list = std.ArrayList(bun.String).init(alloc); diff --git a/src/s3/credentials.zig b/src/s3/credentials.zig index 527539a2e68..a9be7b8b8e0 100644 --- a/src/s3/credentials.zig +++ b/src/s3/credentials.zig @@ -783,7 +783,7 @@ pub const S3Credentials = struct { // Build query parameters in alphabetical order for AWS Signature V4 canonical request const canonical = brk_canonical: { - var stack_fallback = std.heap.stackFallback(512, bun.default_allocator); + var stack_fallback = bun.allocators.stackFallback(512, bun.default_allocator); const allocator = stack_fallback.get(); var query_parts: bun.BoundedArray([]const u8, 10) = .{}; @@ -834,7 +834,7 @@ pub const S3Credentials = struct { const signature = bun.hmac.generate(sigDateRegionServiceReq, signValue, .sha256, &hmac_sig_service) orelse return error.FailedToGenerateSignature; // Build final URL with query parameters in alphabetical order to match canonical request - var url_stack_fallback = std.heap.stackFallback(512, bun.default_allocator); + var url_stack_fallback = bun.allocators.stackFallback(512, bun.default_allocator); const url_allocator = url_stack_fallback.get(); var url_query_parts: bun.BoundedArray([]const u8, 10) = .{}; diff --git a/src/semver/SemverObject.zig b/src/semver/SemverObject.zig index 91c7d90ee27..7a20a71d93a 100644 --- a/src/semver/SemverObject.zig +++ b/src/semver/SemverObject.zig @@ -36,7 +36,7 @@ pub fn order( ) bun.JSError!jsc.JSValue { var arena = std.heap.ArenaAllocator.init(bun.default_allocator); defer arena.deinit(); - var stack_fallback = std.heap.stackFallback(512, arena.allocator()); + var stack_fallback = bun.allocators.stackFallback(512, arena.allocator()); const allocator = stack_fallback.get(); const arguments = callFrame.arguments_old(2).slice(); @@ -82,7 +82,7 @@ pub fn order( pub fn satisfies(globalThis: *jsc.JSGlobalObject, callFrame: *jsc.CallFrame) bun.JSError!jsc.JSValue { var arena = std.heap.ArenaAllocator.init(bun.default_allocator); defer arena.deinit(); - var stack_fallback = std.heap.stackFallback(512, arena.allocator()); + var stack_fallback = bun.allocators.stackFallback(512, arena.allocator()); const allocator = stack_fallback.get(); const arguments = callFrame.arguments_old(2).slice(); diff --git a/src/shell/IOWriter.zig b/src/shell/IOWriter.zig index 26d0bb9f9b4..632e2ae9167 100644 --- a/src/shell/IOWriter.zig +++ b/src/shell/IOWriter.zig @@ -435,7 +435,7 @@ pub fn onError(this: *IOWriter, err__: bun.sys.Error) void { const ee = err__.toShellSystemError(); this.err = ee; log("IOWriter(0x{x}, fd={}) onError errno={s} errmsg={} errsyscall={}", .{ @intFromPtr(this), this.fd, @tagName(ee.getErrno()), ee.message, ee.syscall }); - var seen_alloc = std.heap.stackFallback(@sizeOf(usize) * 64, bun.default_allocator); + var seen_alloc = bun.allocators.stackFallback(@sizeOf(usize) * 64, bun.default_allocator); var seen = bun.handleOom(std.ArrayList(usize).initCapacity(seen_alloc.get(), 64)); defer seen.deinit(); writer_loop: for (this.writers.slice()) |w| { diff --git a/src/shell/ParsedShellScript.zig b/src/shell/ParsedShellScript.zig index 1f53b190599..ada399aafd6 100644 --- a/src/shell/ParsedShellScript.zig +++ b/src/shell/ParsedShellScript.zig @@ -114,7 +114,7 @@ pub fn createParsedShellScript(globalThis: *jsc.JSGlobalObject, callframe: *jsc. const template_args_js = arguments[1]; var template_args = try template_args_js.arrayIterator(globalThis); - var stack_alloc = std.heap.stackFallback(@sizeOf(bun.String) * 4, shargs.arena_allocator()); + var stack_alloc = bun.allocators.stackFallback(@sizeOf(bun.String) * 4, shargs.arena_allocator()); var jsstrings = try std.ArrayList(bun.String).initCapacity(stack_alloc.get(), 4); defer { for (jsstrings.items[0..]) |bunstr| { diff --git a/src/shell/Yield.zig b/src/shell/Yield.zig index 1f86d1bcf93..ca7db27e335 100644 --- a/src/shell/Yield.zig +++ b/src/shell/Yield.zig @@ -91,7 +91,7 @@ pub const Yield = union(enum) { // // This means we need to store a reference to the pipeline. And // there can be nested pipelines, so we need a stack. - var sfb = std.heap.stackFallback(@sizeOf(*Pipeline) * 4, bun.default_allocator); + var sfb = bun.allocators.stackFallback(@sizeOf(*Pipeline) * 4, bun.default_allocator); const alloc = sfb.get(); var pipeline_stack = bun.handleOom(std.ArrayList(*Pipeline).initCapacity(alloc, 4)); defer pipeline_stack.deinit(); diff --git a/src/shell/braces.zig b/src/shell/braces.zig index 60e96d7db35..40db734ea6a 100644 --- a/src/shell/braces.zig +++ b/src/shell/braces.zig @@ -244,7 +244,7 @@ pub const Parser = struct { } pub fn parse(self: *Parser) !AST.Group { - var group_alloc_ = std.heap.stackFallback(@sizeOf(AST.Atom), self.alloc); + var group_alloc_ = bun.allocators.stackFallback(@sizeOf(AST.Atom), self.alloc); const group_alloc = group_alloc_.get(); var nodes = std.ArrayList(AST.Atom).init(group_alloc); while (!self.match(.eof)) { @@ -274,7 +274,7 @@ pub const Parser = struct { var variants = std.ArrayList(AST.Group).init(self.alloc); while (!self.match_any(&.{ .close, .eof })) { if (self.match(.eof)) break; - var group_alloc_ = std.heap.stackFallback(@sizeOf(AST.Atom), self.alloc); + var group_alloc_ = bun.allocators.stackFallback(@sizeOf(AST.Atom), self.alloc); const group_alloc = group_alloc_.get(); var group = std.ArrayList(AST.Atom).init(group_alloc); var close = false; diff --git a/src/shell/shell.zig b/src/shell/shell.zig index e8ded9f1ae3..7b8f643e8c6 100644 --- a/src/shell/shell.zig +++ b/src/shell/shell.zig @@ -1587,7 +1587,7 @@ pub const Parser = struct { } fn parse_atom(self: *Parser) !?AST.Atom { - var array_alloc = std.heap.stackFallback(@sizeOf(AST.SimpleAtom), self.alloc); + var array_alloc = bun.allocators.stackFallback(@sizeOf(AST.SimpleAtom), self.alloc); var atoms = try std.ArrayList(AST.SimpleAtom).initCapacity(array_alloc.get(), 1); var has_brace_open = false; var has_brace_close = false; @@ -4316,7 +4316,7 @@ pub const TestingAPIs = struct { return globalThis.throw("shell: expected 2 arguments, got 0", .{}); }; var template_args = try template_args_js.arrayIterator(globalThis); - var stack_alloc = std.heap.stackFallback(@sizeOf(bun.String) * 4, arena.allocator()); + var stack_alloc = bun.allocators.stackFallback(@sizeOf(bun.String) * 4, arena.allocator()); var jsstrings = try std.ArrayList(bun.String).initCapacity(stack_alloc.get(), 4); defer { for (jsstrings.items[0..]) |bunstr| { @@ -4384,7 +4384,7 @@ pub const TestingAPIs = struct { return globalThis.throw("shell: expected 2 arguments, got 0", .{}); }; var template_args = try template_args_js.arrayIterator(globalThis); - var stack_alloc = std.heap.stackFallback(@sizeOf(bun.String) * 4, arena.allocator()); + var stack_alloc = bun.allocators.stackFallback(@sizeOf(bun.String) * 4, arena.allocator()); var jsstrings = try std.ArrayList(bun.String).initCapacity(stack_alloc.get(), 4); defer { for (jsstrings.items[0..]) |bunstr| { diff --git a/src/shell/states/Expansion.zig b/src/shell/states/Expansion.zig index cbc56f236d9..35b3ef8a050 100644 --- a/src/shell/states/Expansion.zig +++ b/src/shell/states/Expansion.zig @@ -235,7 +235,7 @@ pub fn next(this: *Expansion) Yield { comptime { assert(@sizeOf([]std.ArrayList(u8)) * stack_max <= 256); } - var maybe_stack_alloc = std.heap.stackFallback(@sizeOf([]std.ArrayList(u8)) * stack_max, arena_allocator); + var maybe_stack_alloc = bun.allocators.stackFallback(@sizeOf([]std.ArrayList(u8)) * stack_max, arena_allocator); const stack_alloc = maybe_stack_alloc.get(); const expanded_strings = bun.handleOom(stack_alloc.alloc(std.ArrayList(u8), expansion_count)); diff --git a/src/sourcemap/sourcemap.zig b/src/sourcemap/sourcemap.zig index 5e9f6ff1f23..2cce475c37a 100644 --- a/src/sourcemap/sourcemap.zig +++ b/src/sourcemap/sourcemap.zig @@ -1061,7 +1061,7 @@ pub fn getSourceMapImpl( // TODO: Experiment in debug builds calculating how much stack space we have left and using that to // adjust the size const STACK_SPACE_TO_USE = 1024; - var sfb = std.heap.stackFallback(STACK_SPACE_TO_USE, bun.default_allocator); + var sfb = bun.allocators.stackFallback(STACK_SPACE_TO_USE, bun.default_allocator); var arena = bun.ArenaAllocator.init(sfb.get()); defer arena.deinit(); const allocator = arena.allocator(); @@ -1474,7 +1474,7 @@ pub const SourceMapPieces = struct { // the joiner's node allocator contains string join nodes as well as some vlq encodings // it doesnt contain json payloads or source code, so 16kb is probably going to cover // most applications. - var sfb = std.heap.stackFallback(16384, bun.default_allocator); + var sfb = bun.allocators.stackFallback(16384, bun.default_allocator); var j = StringJoiner{ .allocator = sfb.get() }; j.pushStatic(this.prefix.items); diff --git a/src/sql/mysql/MySQLTypes.zig b/src/sql/mysql/MySQLTypes.zig index 16700893be5..ce0c0e7f7c0 100644 --- a/src/sql/mysql/MySQLTypes.zig +++ b/src/sql/mysql/MySQLTypes.zig @@ -781,7 +781,7 @@ pub const Value = union(enum) { } pub fn toJS(this: Decimal, globalObject: *JSC.JSGlobalObject) JSValue { - var stack = std.heap.stackFallback(64, bun.default_allocator); + var stack = bun.allocators.stackFallback(64, bun.default_allocator); var str = std.ArrayList(u8).init(stack.get()); defer str.deinit(); diff --git a/src/sql/mysql/js/JSMySQLConnection.zig b/src/sql/mysql/js/JSMySQLConnection.zig index 92b31c1b5db..29ea2d9eee6 100644 --- a/src/sql/mysql/js/JSMySQLConnection.zig +++ b/src/sql/mysql/js/JSMySQLConnection.zig @@ -669,7 +669,7 @@ pub fn onQueryResult(this: *@This(), request: *JSMySQLQuery, result: MySQLQueryR } pub fn onResultRow(this: *@This(), request: *JSMySQLQuery, statement: *MySQLStatement, Context: type, reader: NewReader(Context)) (error{ ShortRead, JSError })!void { const result_mode = request.getResultMode(); - var stack_fallback = std.heap.stackFallback(4096, bun.default_allocator); + var stack_fallback = bun.allocators.stackFallback(4096, bun.default_allocator); const allocator = stack_fallback.get(); var row = ResultSet.Row{ .globalObject = this.#globalObject, diff --git a/src/sql/postgres/DataCell.zig b/src/sql/postgres/DataCell.zig index 74f32034f37..1d7fe663dab 100644 --- a/src/sql/postgres/DataCell.zig +++ b/src/sql/postgres/DataCell.zig @@ -558,7 +558,7 @@ pub fn fromBytes(binary: bool, bigint: bool, oid: types.Tag, bytes: []const u8, .numeric => { if (binary) { // this is probrably good enough for most cases - var stack_buffer = std.heap.stackFallback(1024, bun.default_allocator); + var stack_buffer = bun.allocators.stackFallback(1024, bun.default_allocator); const allocator = stack_buffer.get(); var numeric_buffer = std.ArrayList(u8).fromOwnedSlice(allocator, &stack_buffer.buffer); numeric_buffer.items.len = 0; diff --git a/src/string.zig b/src/string.zig index b7524f07927..1338d5a7b7d 100644 --- a/src/string.zig +++ b/src/string.zig @@ -193,7 +193,7 @@ pub const String = extern struct { return String.static(fmt); } - var sba = std.heap.stackFallback(512, bun.default_allocator); + var sba = bun.allocators.stackFallback(512, bun.default_allocator); const alloc = sba.get(); const buf = try std.fmt.allocPrint(alloc, fmt, args); defer alloc.free(buf); diff --git a/src/string/immutable.zig b/src/string/immutable.zig index 2f577f69b56..2bb1f6add56 100644 --- a/src/string/immutable.zig +++ b/src/string/immutable.zig @@ -2049,7 +2049,7 @@ pub fn concatIfNeeded( } if (total_length < 1024) { - var stack = std.heap.stackFallback(1024, allocator); + var stack = bun.allocators.stackFallback(1024, allocator); const stack_copy = concatWithLength(stack.get(), args, total_length) catch unreachable; for (interned_strings_to_check) |interned| { if (eqlLong(stack_copy, interned, true)) { diff --git a/src/valkey/js_valkey_functions.zig b/src/valkey/js_valkey_functions.zig index c3f4f9e1d5e..8bf7c036757 100644 --- a/src/valkey/js_valkey_functions.zig +++ b/src/valkey/js_valkey_functions.zig @@ -104,7 +104,7 @@ pub fn set(this: *JSValkeyClient, globalObject: *jsc.JSGlobalObject, callframe: try requireNotSubscriber(this, @src().fn_name); const args_view = callframe.arguments(); - var stack_fallback = std.heap.stackFallback(512, bun.default_allocator); + var stack_fallback = bun.allocators.stackFallback(512, bun.default_allocator); var args = try std.ArrayList(JSArgument).initCapacity(stack_fallback.get(), args_view.len); defer { for (args.items) |*item| { @@ -279,7 +279,7 @@ pub fn srem(this: *JSValkeyClient, globalObject: *jsc.JSGlobalObject, callframe: return globalObject.throw("SREM requires at least a key and one member", .{}); } - var stack_fallback = std.heap.stackFallback(512, bun.default_allocator); + var stack_fallback = bun.allocators.stackFallback(512, bun.default_allocator); var args = try std.ArrayList(JSArgument).initCapacity(stack_fallback.get(), args_view.len); defer { for (args.items) |*item| { @@ -322,7 +322,7 @@ pub fn srandmember(this: *JSValkeyClient, globalObject: *jsc.JSGlobalObject, cal try requireNotSubscriber(this, @src().fn_name); const args_view = callframe.arguments(); - var stack_fallback = std.heap.stackFallback(512, bun.default_allocator); + var stack_fallback = bun.allocators.stackFallback(512, bun.default_allocator); var args = try std.ArrayList(JSArgument).initCapacity(stack_fallback.get(), args_view.len); defer { for (args.items) |*item| { @@ -386,7 +386,7 @@ pub fn spop(this: *JSValkeyClient, globalObject: *jsc.JSGlobalObject, callframe: try requireNotSubscriber(this, @src().fn_name); const args_view = callframe.arguments(); - var stack_fallback = std.heap.stackFallback(512, bun.default_allocator); + var stack_fallback = bun.allocators.stackFallback(512, bun.default_allocator); var args = try std.ArrayList(JSArgument).initCapacity(stack_fallback.get(), args_view.len); defer { for (args.items) |*item| { @@ -431,7 +431,7 @@ pub fn sadd(this: *JSValkeyClient, globalObject: *jsc.JSGlobalObject, callframe: return globalObject.throw("SADD requires at least a key and one member", .{}); } - var stack_fallback = std.heap.stackFallback(512, bun.default_allocator); + var stack_fallback = bun.allocators.stackFallback(512, bun.default_allocator); var args = try std.ArrayList(JSArgument).initCapacity(stack_fallback.get(), args_view.len); defer { for (args.items) |*item| { @@ -506,7 +506,7 @@ pub fn hmget(this: *JSValkeyClient, globalObject: *jsc.JSGlobalObject, callframe return globalObject.throw("HMGET requires at least a key and one field", .{}); } - var stack_fallback = std.heap.stackFallback(512, bun.default_allocator); + var stack_fallback = bun.allocators.stackFallback(512, bun.default_allocator); var args = try std.ArrayList(JSArgument).initCapacity(stack_fallback.get(), args_view.len); defer { for (args.items) |*item| { @@ -993,7 +993,7 @@ pub fn publish( try requireNotSubscriber(this, @src().fn_name); const args_view = callframe.arguments(); - var stack_fallback = std.heap.stackFallback(512, bun.default_allocator); + var stack_fallback = bun.allocators.stackFallback(512, bun.default_allocator); var args = try std.ArrayList(JSArgument).initCapacity(stack_fallback.get(), args_view.len); defer { for (args.items) |*item| { @@ -1037,7 +1037,7 @@ pub fn subscribe( callframe: *jsc.CallFrame, ) bun.JSError!JSValue { const channel_or_many, const handler_callback = callframe.argumentsAsArray(2); - var stack_fallback = std.heap.stackFallback(512, bun.default_allocator); + var stack_fallback = bun.allocators.stackFallback(512, bun.default_allocator); var redis_channels = try std.ArrayList(JSArgument).initCapacity(stack_fallback.get(), 1); defer { for (redis_channels.items) |*item| { @@ -1139,7 +1139,7 @@ pub fn unsubscribe( const args_view = callframe.arguments(); - var stack_fallback = std.heap.stackFallback(512, bun.default_allocator); + var stack_fallback = bun.allocators.stackFallback(512, bun.default_allocator); var redis_channels = try std.ArrayList(JSArgument).initCapacity(stack_fallback.get(), 1); defer { for (redis_channels.items) |*item| {