summaryrefslogtreecommitdiff
path: root/src/libzisp/io/unparser.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/libzisp/io/unparser.zig')
-rw-r--r--src/libzisp/io/unparser.zig122
1 files changed, 0 insertions, 122 deletions
diff --git a/src/libzisp/io/unparser.zig b/src/libzisp/io/unparser.zig
deleted file mode 100644
index d703182..0000000
--- a/src/libzisp/io/unparser.zig
+++ /dev/null
@@ -1,122 +0,0 @@
-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;
-
-pub fn unparse(w: anytype, v: Value) anyerror!void {
- try if (value.double.check(v))
- unparseDouble(w, v)
- else if (value.fixnum.check(v))
- unparseFixnum(w, v)
- else if (value.ptr.checkZisp(v))
- unparseHeap(w, v)
- else
- unparseOther(w, v);
-}
-
-fn unparseDouble(w: anytype, v: Value) !void {
- _ = w;
- _ = v;
- @panic("not implemented");
-}
-
-fn unparseFixnum(w: anytype, v: Value) !void {
- _ = w;
- _ = v;
- @panic("not implemented");
-}
-
-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"),
- };
-}
-
-fn unparseOther(w: anytype, v: Value) !void {
- try switch (v.other.tag) {
- .rune => unparseRune(w, v),
- .sstr => unparseSstr(w, v),
- .qstr => unparseQstr(w, v),
- .char => unparseChar(w, v),
- .misc => unparseMisc(w, v),
- };
-}
-
-fn unparseRune(w: anytype, v: Value) !void {
- const name = value.rune.unpack(v);
- try w.writeByte('#');
- try w.writeAll(name.constSlice());
-}
-
-fn unparseSstr(w: anytype, v: Value) !void {
- const str = value.sstr.unpack(v);
- try w.writeAll(str.constSlice());
-}
-
-fn unparseQstr(w: anytype, v: Value) !void {
- const str = value.sstr.unpack(v);
- try w.writeByte('"');
- try w.writeAll(str.constSlice());
- try w.writeByte('"');
-}
-
-fn unparseChar(w: anytype, v: Value) !void {
- var buf: [4]u8 = undefined;
- const len = try std.unicode.utf8Encode(v.char.value, &buf);
- try w.writeAll(buf[0..len]);
-}
-
-fn unparseMisc(w: anytype, v: Value) !void {
- try switch (v.misc.value) {
- .f => w.writeAll("#f"),
- .t => w.writeAll("#t"),
- .nil => w.writeAll("()"),
- .eof => w.writeAll("#eof"),
- .undef => w.writeAll("#undef"),
- };
-}
-
-fn unparsePair(w: anytype, p: *[2]Value) !void {
- try w.writeByte('(');
- try unparse(w, p[0]);
- var cdr = p[1];
- while (value.pair.check(cdr)) : (cdr = value.pair.cdr(cdr)) {
- try w.writeByte(' ');
- try unparse(w, value.pair.car(cdr));
- }
- if (!value.nil.check(cdr)) {
- try w.writeByte(' ');
- try w.writeByte('.');
- try w.writeByte(' ');
- try unparse(w, cdr);
- }
- 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('"');
- }
-}