summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTaylan Kammer <taylan.kammer@gmail.com>2025-02-23 00:08:52 +0100
committerTaylan Kammer <taylan.kammer@gmail.com>2025-02-23 00:08:52 +0100
commitd8790e81131b9883ab058beb854347d888453d2f (patch)
tree9442ca54ebadc8069bae0eead035c2b67ad8b091
parentb7fb551ae61d26c30e6078f1f617862430141ce3 (diff)
update
-rw-r--r--src/libzisp.zig7
-rw-r--r--src/libzisp/io/unparser.zig17
2 files changed, 23 insertions, 1 deletions
diff --git a/src/libzisp.zig b/src/libzisp.zig
index 400f9fb..4bf8b08 100644
--- a/src/libzisp.zig
+++ b/src/libzisp.zig
@@ -302,3 +302,10 @@ test "parse4" {
const f, const fl = value.sstr.unpack(value.pair.cdr(val));
try std.testing.expectEqualStrings("bar", f[0..fl]);
}
+
+test "unparse" {
+ try std.testing.expectEqualStrings(
+ "#foo",
+ io.unparser.unparse(io.parser.parseCode("#foo")),
+ );
+}
diff --git a/src/libzisp/io/unparser.zig b/src/libzisp/io/unparser.zig
index eb27e20..83186c2 100644
--- a/src/libzisp/io/unparser.zig
+++ b/src/libzisp/io/unparser.zig
@@ -1 +1,16 @@
-// wip
+const std = @import("std");
+
+const value = @import("../value.zig");
+
+const Value = value.Value;
+
+pub fn unparse(v: Value) []u8 {
+ var gpa: std.heap.GeneralPurposeAllocator(.{}) = .init;
+ var out: std.ArrayList(u8) = .init(gpa.allocator());
+ if (value.rune.check(v)) {
+ const name, const len = value.rune.unpack(v);
+ out.append('#') catch @panic("");
+ out.appendSlice(name[0..len]) catch @panic("");
+ }
+ return out.toOwnedSlice() catch @panic("");
+}