summaryrefslogtreecommitdiff
path: root/src/libzisp/io/unparser.zig
diff options
context:
space:
mode:
authorTaylan Kammer <taylan.kammer@gmail.com>2025-03-28 21:14:12 +0100
committerTaylan Kammer <taylan.kammer@gmail.com>2025-03-28 21:14:12 +0100
commit5025f9acf31cd880bbff62ff47ed03b69a0025ee (patch)
tree866f9365ae87315b0d5e41a8fe27435b803ce706 /src/libzisp/io/unparser.zig
parent615e400ff150a3c355086664c7f9de512b5859dc (diff)
parent2cbfacaedcc77e28e0a0473045cac689fb43a8ef (diff)
Merge branch 'new-parser'
Diffstat (limited to 'src/libzisp/io/unparser.zig')
-rw-r--r--src/libzisp/io/unparser.zig23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/libzisp/io/unparser.zig b/src/libzisp/io/unparser.zig
index d65ffb0..d703182 100644
--- a/src/libzisp/io/unparser.zig
+++ b/src/libzisp/io/unparser.zig
@@ -2,6 +2,9 @@ const std = @import("std");
const value = @import("../value.zig");
+const istr = value.istr;
+const seq = value.seq;
+
const ShortString = value.ShortString;
const OtherTag = value.OtherTag;
const Value = value.Value;
@@ -33,6 +36,7 @@ fn unparseHeap(w: anytype, v: Value) !void {
const p, const t = value.ptr.unpack(v);
try switch (t) {
.pair => unparsePair(w, @ptrCast(p)),
+ .seq => unparseSeq(w, @ptrCast(p)),
else => @panic("not implemented"),
};
}
@@ -97,3 +101,22 @@ fn unparsePair(w: anytype, p: *[2]Value) !void {
}
try w.writeByte(')');
}
+
+fn unparseSeq(w: anytype, p: *seq.Header) !void {
+ const h = istr.getHeaderFromPtr(@ptrCast(p));
+ switch (h.type) {
+ .string => try unparseString(w, h),
+ else => @panic("not implemented"),
+ }
+}
+
+fn unparseString(w: anytype, h: *seq.Header) !void {
+ const info = h.info.string;
+ if (info.quoted) {
+ try w.writeByte('"');
+ }
+ try w.writeAll(h.bytes());
+ if (info.quoted) {
+ try w.writeByte('"');
+ }
+}