mirror of
https://github.com/oven-sh/bun
synced 2026-02-10 10:58:56 +00:00
* Define a generic allocator interface to enable static polymorphism for allocators (see `GenericAllocator` in `src/allocators.zig`). Note that `std.mem.Allocator` itself is considered a generic allocator. * Add utilities to `bun.allocators` for working with generic allocators. * Add a new namespace, `bun.memory`, with basic utilities for working with memory and objects (`create`, `destroy`, `initDefault`, `deinit`). * Add `bun.DefaultAllocator`, a zero-sized generic allocator type whose `allocator` method simply returns `bun.default_allocator`. * Implement the generic allocator interface in `AllocationScope` and `MimallocArena`. * Improve `bun.threading.GuardedValue` (now `bun.threading.Guarded`). * Improve `bun.safety.AllocPtr` (now `bun.safety.CheckedAllocator`). (For internal tracking: fixes STAB-1085, STAB-1086, STAB-1087, STAB-1088, STAB-1089, STAB-1090, STAB-1091)
44 lines
1.3 KiB
Zig
44 lines
1.3 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;
|
|
this.__scope.trackExternalFree(memory, null) catch |err|
|
|
std.debug.panic("invalid free: {}", .{err});
|
|
}
|
|
}
|
|
|
|
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 bun = @import("bun");
|
|
const std = @import("std");
|