diff options
| author | Taylan Kammer <taylan.kammer@gmail.com> | 2025-02-23 00:08:52 +0100 |
|---|---|---|
| committer | Taylan Kammer <taylan.kammer@gmail.com> | 2025-02-23 00:08:52 +0100 |
| commit | d8790e81131b9883ab058beb854347d888453d2f (patch) | |
| tree | 9442ca54ebadc8069bae0eead035c2b67ad8b091 | |
| parent | b7fb551ae61d26c30e6078f1f617862430141ce3 (diff) | |
update
| -rw-r--r-- | src/libzisp.zig | 7 | ||||
| -rw-r--r-- | src/libzisp/io/unparser.zig | 17 |
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(""); +} |
