authorgravatar for 4678790+dweiller@users.noreply.github.comDominic <4678790+dweiller@users.noreply.github.com> 2023-05-02 22:04:15+10:00
committergravatar for 4678790+dweiller@users.noreply.github.comDominic <4678790+dweiller@users.noreply.github.com> 2023-05-07 15:55:21+10:00
log2c5924c59a148335e5025b72a5ba98d765ed771d
tree8745623c6c43902fd2be5344126862b69fc6334b
parent5bb8e9cd975ea68c924d04be6608f96b41204b7f

autodoc: fix support for slice_length ZIR instruction


2 files changed, 31 insertions(+), 2 deletions(-)

lib/docs/main.js+18-1
......@@ -1093,6 +1093,23 @@ const NAV_MODES = {
10931093 payloadHtml += decl + "[" + start + ".." + end + sentinel + "]";
10941094 return payloadHtml;
10951095 }
1096 case "sliceLength": {
1097 let payloadHtml = "";
1098 const lhsExpr = zigAnalysis.exprs[expr.sliceLength.lhs];
1099 const startExpr = zigAnalysis.exprs[expr.sliceLength.start];
1100 const lenExpr = zigAnalysis.exprs[expr.sliceLength.len];
1101 let decl = exprName(lhsExpr, opts);
1102 let start = exprName(startExpr, opts);
1103 let len = exprName(lenExpr, opts);
1104 let sentinel = "";
1105 if (expr.sliceLength["sentinel"]) {
1106 const sentinelExpr = zigAnalysis.exprs[expr.sliceLength.sentinel];
1107 let sentinel_ = exprName(sentinelExpr, options);
1108 sentinel += " :" + sentinel_;
1109 }
1110 payloadHtml += decl + "[" + start + "..][0.." + len + sentinel + "]";
1111 return payloadHtml;
1112 }
10961113 case "sliceIndex": {
10971114 const sliceIndex = zigAnalysis.exprs[expr.sliceIndex];
10981115 return exprName(sliceIndex, opts, opts);
......@@ -4850,4 +4867,4 @@ function RadixTree() {
48504867
48514868// BUT!
48524869
4853// We want to be able to search "Hash", for example!
\ No newline at end of file
4870// We want to be able to search "Hash", for example!
src/Autodoc.zig+13-1
......@@ -755,6 +755,7 @@ const DocData = struct {
755755 string: []const u8, // direct value
756756 sliceIndex: usize,
757757 slice: Slice,
758 sliceLength: SliceLength,
758759 cmpxchgIndex: usize,
759760 cmpxchg: Cmpxchg,
760761 builtin: Builtin,
......@@ -791,6 +792,12 @@ const DocData = struct {
791792 end: ?usize = null,
792793 sentinel: ?usize = null, // index in `exprs`
793794 };
795 const SliceLength = struct {
796 lhs: usize,
797 start: usize,
798 len: usize,
799 sentinel: ?usize = null,
800 };
794801 const Cmpxchg = struct {
795802 name: []const u8,
796803 type: usize,
......@@ -1337,7 +1344,12 @@ fn walkInstruction(
13371344 try self.exprs.append(self.arena, sentinel.expr);
13381345 break :sentinel_index index;
13391346 } else null;
1340 self.exprs.items[slice_index] = .{ .slice = .{ .lhs = lhs_index, .start = start_index, .end = len_index, .sentinel = sentinel_index } };
1347 self.exprs.items[slice_index] = .{ .sliceLength = .{
1348 .lhs = lhs_index,
1349 .start = start_index,
1350 .len = len_index,
1351 .sentinel = sentinel_index,
1352 } };
13411353
13421354 return DocData.WalkResult{
13431355 .typeRef = self.decls.items[lhs.expr.declRef.Analyzed].value.typeRef,