From 0d3c6b7aa847682445a0d292b7f97035a0bad052 Mon Sep 17 00:00:00 2001 From: Der Teufel Date: Wed, 31 Aug 2022 21:18:50 +0200 Subject: [PATCH 1/3] autodoc: Added int_big support --- lib/docs/main.js | 4 ++++ src/Autodoc.zig | 47 ++++++++++++++++++++++++++++++++++------------- 2 files changed, 38 insertions(+), 13 deletions(-) diff --git a/lib/docs/main.js b/lib/docs/main.js index 6a3f2620f2..7db0433b51 100644 --- a/lib/docs/main.js +++ b/lib/docs/main.js @@ -1555,6 +1555,10 @@ var zigAnalysis; return '"' + escapeHtml(expr.string) + '"'; } + case "int_big": { + return (expr.int_big.negated ? "-" : "") + expr.int_big.value; + } + case "anytype": { return "anytype"; } diff --git a/src/Autodoc.zig b/src/Autodoc.zig index 0e056c093f..1b70ae20c7 100644 --- a/src/Autodoc.zig +++ b/src/Autodoc.zig @@ -625,7 +625,7 @@ const DocData = struct { negated: bool = false, }, int_big: struct { - value: []const u8, // direct value + value: []const u8, // string representation negated: bool = false, }, float: f64, // direct value @@ -714,9 +714,12 @@ const DocData = struct { }, .int_big => { - //@panic("TODO: json serialization of big ints!"); - //if (v.negated) try w.writeAll("-"); - //try jsw.emitNumber(v.value); + try jsw.beginObject(); + try jsw.objectField("value"); + try jsw.emitString(self.int_big.value); + try jsw.objectField("negated"); + try jsw.emitBool(self.int_big.negated); + try jsw.endObject(); }, .builtinField => { try jsw.emitString(@tagName(self.builtinField)); @@ -1084,15 +1087,32 @@ fn walkInstruction( }, .int_big => { // @check - const str = data[inst_index].str.get(file.zir); - _ = str; - printWithContext( - file, - inst_index, - "TODO: implement `{s}` for walkInstruction\n\n", - .{@tagName(tags[inst_index])}, - ); - return self.cteTodo(@tagName(tags[inst_index])); + const str = data[inst_index].str; //.get(file.zir); + const byte_count = str.len * @sizeOf(std.math.big.Limb); + const limb_bytes = file.zir.string_bytes[str.start..][0..byte_count]; + + var limbs = try self.arena.alloc(std.math.big.Limb, str.len); + std.mem.copy(u8, std.mem.sliceAsBytes(limbs), limb_bytes); + + const big_int = std.math.big.int.Const{ + .limbs = limbs, + .positive = true, + }; + + const as_string = try big_int.toStringAlloc(self.arena, 10, .lower); + + return DocData.WalkResult{ + .typeRef = .{ .type = @enumToInt(Ref.comptime_int_type) }, + .expr = .{ .int_big = .{ .value = as_string } }, + }; + + // printWithContext( + // file, + // inst_index, + // "TODO: implement `{s}` for walkInstruction\n\n", + // .{@tagName(tags[inst_index])}, + // ); + // return self.cteTodo(@tagName(tags[inst_index])); }, .slice_start => { @@ -1714,6 +1734,7 @@ fn walkInstruction( ); switch (operand.expr) { .int => |*int| int.negated = true, + .int_big => |*int_big| int_big.negated = true, else => { printWithContext( file, From 4c033eb35c20f0fb37d2e8102735aaa04c8213ae Mon Sep 17 00:00:00 2001 From: Der Teufel Date: Wed, 31 Aug 2022 21:32:58 +0200 Subject: [PATCH 2/3] autodoc: int_big cleanup --- src/Autodoc.zig | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/Autodoc.zig b/src/Autodoc.zig index 1b70ae20c7..96985cac40 100644 --- a/src/Autodoc.zig +++ b/src/Autodoc.zig @@ -713,7 +713,6 @@ const DocData = struct { try jsw.emitNumber(self.int.value); }, .int_big => { - try jsw.beginObject(); try jsw.objectField("value"); try jsw.emitString(self.int_big.value); @@ -1105,14 +1104,6 @@ fn walkInstruction( .typeRef = .{ .type = @enumToInt(Ref.comptime_int_type) }, .expr = .{ .int_big = .{ .value = as_string } }, }; - - // printWithContext( - // file, - // inst_index, - // "TODO: implement `{s}` for walkInstruction\n\n", - // .{@tagName(tags[inst_index])}, - // ); - // return self.cteTodo(@tagName(tags[inst_index])); }, .slice_start => { From a77d7b740fbe52c3822567db28bade2110c9e737 Mon Sep 17 00:00:00 2001 From: Loris Cro Date: Fri, 2 Sep 2022 17:47:04 +0200 Subject: [PATCH 3/3] autodoc: simplify int_big json stringify procedure --- src/Autodoc.zig | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/Autodoc.zig b/src/Autodoc.zig index 96985cac40..77b4cb2926 100644 --- a/src/Autodoc.zig +++ b/src/Autodoc.zig @@ -712,14 +712,6 @@ const DocData = struct { if (self.int.negated) try w.writeAll("-"); try jsw.emitNumber(self.int.value); }, - .int_big => { - try jsw.beginObject(); - try jsw.objectField("value"); - try jsw.emitString(self.int_big.value); - try jsw.objectField("negated"); - try jsw.emitBool(self.int_big.negated); - try jsw.endObject(); - }, .builtinField => { try jsw.emitString(@tagName(self.builtinField)); },