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 = {...@@ -1093,6 +1093,23 @@ const NAV_MODES = {
1093 payloadHtml += decl + "[" + start + ".." + end + sentinel + "]";1093 payloadHtml += decl + "[" + start + ".." + end + sentinel + "]";
1094 return payloadHtml;1094 return payloadHtml;
1095 }1095 }
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 }
1096 case "sliceIndex": {1113 case "sliceIndex": {
1097 const sliceIndex = zigAnalysis.exprs[expr.sliceIndex];1114 const sliceIndex = zigAnalysis.exprs[expr.sliceIndex];
1098 return exprName(sliceIndex, opts, opts);1115 return exprName(sliceIndex, opts, opts);
...@@ -4850,4 +4867,4 @@ function RadixTree() {...@@ -4850,4 +4867,4 @@ function RadixTree() {
48504867
4851// BUT!4868// 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 {...@@ -755,6 +755,7 @@ const DocData = struct {
755 string: []const u8, // direct value755 string: []const u8, // direct value
756 sliceIndex: usize,756 sliceIndex: usize,
757 slice: Slice,757 slice: Slice,
758 sliceLength: SliceLength,
758 cmpxchgIndex: usize,759 cmpxchgIndex: usize,
759 cmpxchg: Cmpxchg,760 cmpxchg: Cmpxchg,
760 builtin: Builtin,761 builtin: Builtin,
...@@ -791,6 +792,12 @@ const DocData = struct {...@@ -791,6 +792,12 @@ const DocData = struct {
791 end: ?usize = null,792 end: ?usize = null,
792 sentinel: ?usize = null, // index in `exprs`793 sentinel: ?usize = null, // index in `exprs`
793 };794 };
795 const SliceLength = struct {
796 lhs: usize,
797 start: usize,
798 len: usize,
799 sentinel: ?usize = null,
800 };
794 const Cmpxchg = struct {801 const Cmpxchg = struct {
795 name: []const u8,802 name: []const u8,
796 type: usize,803 type: usize,
...@@ -1337,7 +1344,12 @@ fn walkInstruction(...@@ -1337,7 +1344,12 @@ fn walkInstruction(
1337 try self.exprs.append(self.arena, sentinel.expr);1344 try self.exprs.append(self.arena, sentinel.expr);
1338 break :sentinel_index index;1345 break :sentinel_index index;
1339 } else null;1346 } 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
1342 return DocData.WalkResult{1354 return DocData.WalkResult{
1343 .typeRef = self.decls.items[lhs.expr.declRef.Analyzed].value.typeRef,1355 .typeRef = self.decls.items[lhs.expr.declRef.Analyzed].value.typeRef,