diff options
| author | Taylan Kammer <taylan.kammer@gmail.com> | 2025-03-02 22:13:31 +0100 |
|---|---|---|
| committer | Taylan Kammer <taylan.kammer@gmail.com> | 2025-03-02 22:13:31 +0100 |
| commit | fbcedd74510b02a8a56acfbb3fb115394fcbdfd8 (patch) | |
| tree | 0ef5e76f063d59582e871f11818927ad0646c9f4 | |
| parent | 45ed12c1bcb8db5cb35c35495023ffaf24e2877c (diff) | |
use mem pool for cons
| -rw-r--r-- | src/libzisp/gc.zig | 10 | ||||
| -rw-r--r-- | src/libzisp/value/pair.zig | 5 |
2 files changed, 11 insertions, 4 deletions
diff --git a/src/libzisp/gc.zig b/src/libzisp/gc.zig index 6704102..92b4387 100644 --- a/src/libzisp/gc.zig +++ b/src/libzisp/gc.zig @@ -2,11 +2,21 @@ const std = @import("std"); const value = @import("value.zig"); +const Value = value.Value; const Hval = value.Hval; var _gpa: std.heap.GeneralPurposeAllocator(.{}) = .init; const gpa = _gpa.allocator(); +var cpool = std.heap.MemoryPool([2]Value).init(gpa); + +pub fn cons(v1: Value, v2: Value) *[2]Value { + const mem = cpool.create() catch @panic("OOM"); + mem[0] = v1; + mem[1] = v2; + return mem; +} + pub fn alloc(count: usize) []Hval { return gpa.alloc(Hval, count) catch @panic("OOM"); } diff --git a/src/libzisp/value/pair.zig b/src/libzisp/value/pair.zig index 1c34096..87e18e7 100644 --- a/src/libzisp/value/pair.zig +++ b/src/libzisp/value/pair.zig @@ -26,10 +26,7 @@ pub fn pred(v: Value) Value { } pub fn cons(v1: Value, v2: Value) Value { - const mem = gc.alloc(2); - mem[0] = .{ .value = v1 }; - mem[1] = .{ .value = v2 }; - return ptr.pack(mem.ptr, .pair); + return ptr.pack(@ptrCast(gc.cons(v1, v2)), .pair); } fn getMem(v: Value) *[2]Value { |
