Skip to content

Commit 103e6e5

Browse files
author
dweiller
committed
autodoc: implement slice_length case in walkInstruction
1 parent ead8769 commit 103e6e5

File tree

1 file changed

+42
-1
lines changed

1 file changed

+42
-1
lines changed

src/Autodoc.zig

+42-1
Original file line numberDiff line numberDiff line change
@@ -1287,7 +1287,48 @@ fn walkInstruction(
12871287
.expr = .{ .sliceIndex = slice_index },
12881288
};
12891289
},
1290-
.slice_length => @panic("TODO: implement walkInstruction for .slice_length"),
1290+
.slice_length => {
1291+
const pl_node = data[inst_index].pl_node;
1292+
const extra = file.zir.extraData(Zir.Inst.SliceLength, pl_node.payload_index);
1293+
1294+
const slice_index = self.exprs.items.len;
1295+
try self.exprs.append(self.arena, .{ .slice = .{ .lhs = 0, .start = 0 } });
1296+
1297+
var lhs: DocData.WalkResult = try self.walkRef(
1298+
file,
1299+
parent_scope,
1300+
parent_src,
1301+
extra.data.lhs,
1302+
false,
1303+
);
1304+
var start: DocData.WalkResult = try self.walkRef(
1305+
file,
1306+
parent_scope,
1307+
parent_src,
1308+
extra.data.start,
1309+
false,
1310+
);
1311+
var len: DocData.WalkResult = try self.walkRef(
1312+
file,
1313+
parent_scope,
1314+
parent_src,
1315+
extra.data.len,
1316+
false,
1317+
);
1318+
1319+
const lhs_index = self.exprs.items.len;
1320+
try self.exprs.append(self.arena, lhs.expr);
1321+
const start_index = self.exprs.items.len;
1322+
try self.exprs.append(self.arena, start.expr);
1323+
const len_index = self.exprs.items.len;
1324+
try self.exprs.append(self.arena, len.expr);
1325+
self.exprs.items[slice_index] = .{ .slice = .{ .lhs = lhs_index, .start = start_index, .end = len_index } };
1326+
1327+
return DocData.WalkResult{
1328+
.typeRef = self.decls.items[lhs.expr.declRef.Analyzed].value.typeRef,
1329+
.expr = .{ .sliceIndex = slice_index },
1330+
};
1331+
},
12911332

12921333
// @check array_cat and array_mul
12931334
.add,

0 commit comments

Comments
 (0)