Files
bun.sh/src/shell/AllocScope.zig
Zack Radisic 0a3ac50931 Refactor shell to use AllocationScope and fix memory issues (#20531)
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
Co-authored-by: Jarred Sumner <Jarred-Sumner@users.noreply.github.com>
2025-06-23 22:29:48 -07:00

42 lines
1.2 KiB
Zig

//! This is just a wrapper around `bun.AllocationScope` that ensures that it is
//! zero-cost in release builds.
const AllocScope = @This();
__scope: if (bun.Environment.enableAllocScopes) bun.AllocationScope else void,
pub fn beginScope(alloc: std.mem.Allocator) AllocScope {
if (comptime bun.Environment.enableAllocScopes) {
return .{ .__scope = bun.AllocationScope.init(alloc) };
}
return .{ .__scope = {} };
}
pub fn endScope(this: *AllocScope) void {
if (comptime bun.Environment.enableAllocScopes) {
this.__scope.deinit();
}
}
pub fn leakSlice(this: *AllocScope, memory: anytype) void {
if (comptime bun.Environment.enableAllocScopes) {
_ = @typeInfo(@TypeOf(memory)).pointer;
bun.assert(!this.__scope.trackExternalFree(memory, null));
}
}
pub fn assertInScope(this: *AllocScope, memory: anytype) void {
if (comptime bun.Environment.enableAllocScopes) {
this.__scope.assertOwned(memory);
}
}
pub inline fn allocator(this: *AllocScope) std.mem.Allocator {
if (comptime bun.Environment.enableAllocScopes) {
return this.__scope.allocator();
}
return bun.default_allocator;
}
const std = @import("std");
const bun = @import("bun");