summaryrefslogtreecommitdiff
path: root/src/libzisp/value/ptr.zig
diff options
context:
space:
mode:
authorTaylan Kammer <taylan.kammer@gmail.com>2025-03-19 08:49:52 +0100
committerTaylan Kammer <taylan.kammer@gmail.com>2025-03-19 08:49:52 +0100
commitd1e0c8f3a928247d9e2576fddd8143f5d6cf4646 (patch)
tree50d5fdc71c992433da4b6572f2c5a09eaca7737e /src/libzisp/value/ptr.zig
parent7b67144bc3bda3b92b5ba599e5198d16c0cf4d1f (diff)
Code cleanup & use SMP Allocator.
Diffstat (limited to 'src/libzisp/value/ptr.zig')
-rw-r--r--src/libzisp/value/ptr.zig20
1 files changed, 11 insertions, 9 deletions
diff --git a/src/libzisp/value/ptr.zig b/src/libzisp/value/ptr.zig
index b07acc4..2ed3765 100644
--- a/src/libzisp/value/ptr.zig
+++ b/src/libzisp/value/ptr.zig
@@ -1,9 +1,11 @@
const std = @import("std");
-const value = @import("../value.zig");
+
const gc = @import("../gc.zig");
+const value = @import("../value.zig");
+
+const Hval = gc.Hval;
const Value = value.Value;
-const Hval = value.Hval;
// Zig API
@@ -86,23 +88,23 @@ pub fn assertStrong(v: Value) void {
}
}
-pub fn packZisp(ptr: [*]Hval, tag: Tag, is_weak: bool) Value {
+pub fn packZisp(ptr: *Hval, tag: Tag, is_weak: bool) Value {
return .{ .zptr = .{
.tagged_value = tagPtr(ptr, tag),
.is_weak = is_weak,
} };
}
-pub fn pack(ptr: [*]Hval, tag: Tag) Value {
+pub fn pack(ptr: *Hval, tag: Tag) Value {
return packZisp(ptr, tag, false);
}
-pub fn packWeak(ptr: [*]Hval, tag: Tag) Value {
+pub fn packWeak(ptr: *Hval, tag: Tag) Value {
return packZisp(ptr, tag, true);
}
// Unpacks weak as well; no need for a separate fn.
-pub fn unpack(v: Value) struct { [*]Hval, Tag } {
+pub fn unpack(v: Value) struct { *Hval, Tag } {
assertZisp(v);
return untagPtr(v.zptr.tagged_value);
}
@@ -117,15 +119,15 @@ pub fn isWeakNull(v: Value) bool {
return v.zptr.tagged_value == 0;
}
-fn tagPtr(ptr: [*]Hval, tag: Tag) u48 {
+fn tagPtr(ptr: *Hval, tag: Tag) u48 {
const int: usize = @intFromPtr(ptr);
const untagged: u48 = @intCast(int);
return untagged | @intFromEnum(tag);
}
-fn untagPtr(tagged: u48) struct { [*]Hval, Tag } {
+fn untagPtr(tagged: u48) struct { *Hval, Tag } {
const untagged: u48 = tagged & 0xfffffffffff8;
- const ptr: [*]Hval = @ptrFromInt(untagged);
+ const ptr: *Hval = @ptrFromInt(untagged);
const int: u3 = @truncate(tagged);
const tag: Tag = @enumFromInt(int);
return .{ ptr, tag };