From 2c2a0402c65986674d427390292f2fe38474c90f Mon Sep 17 00:00:00 2001 From: dweiller <4678790+dweiller@users.noreplay.github.com> Date: Sun, 30 Apr 2023 16:54:25 +1000 Subject: [PATCH] autodoc: implement slice_length case in walkInstruction --- src/Autodoc.zig | 43 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/src/Autodoc.zig b/src/Autodoc.zig index db24f747f79b99613ca5343b6719d1a0f4598dff..b068c260efeca45b0c53e8eb4864f2308ee30b6c 100644 --- a/src/Autodoc.zig +++ b/src/Autodoc.zig @@ -1287,7 +1287,48 @@ fn walkInstruction( .expr = .{ .sliceIndex = slice_index }, }; }, - .slice_length => @panic("TODO: implement walkInstruction for .slice_length"), + .slice_length => { + const pl_node = data[inst_index].pl_node; + const extra = file.zir.extraData(Zir.Inst.SliceLength, pl_node.payload_index); + + const slice_index = self.exprs.items.len; + try self.exprs.append(self.arena, .{ .slice = .{ .lhs = 0, .start = 0 } }); + + var lhs: DocData.WalkResult = try self.walkRef( + file, + parent_scope, + parent_src, + extra.data.lhs, + false, + ); + var start: DocData.WalkResult = try self.walkRef( + file, + parent_scope, + parent_src, + extra.data.start, + false, + ); + var len: DocData.WalkResult = try self.walkRef( + file, + parent_scope, + parent_src, + extra.data.len, + false, + ); + + const lhs_index = self.exprs.items.len; + try self.exprs.append(self.arena, lhs.expr); + const start_index = self.exprs.items.len; + try self.exprs.append(self.arena, start.expr); + const len_index = self.exprs.items.len; + try self.exprs.append(self.arena, len.expr); + self.exprs.items[slice_index] = .{ .slice = .{ .lhs = lhs_index, .start = start_index, .end = len_index } }; + + return DocData.WalkResult{ + .typeRef = self.decls.items[lhs.expr.declRef.Analyzed].value.typeRef, + .expr = .{ .sliceIndex = slice_index }, + }; + }, // @check array_cat and array_mul .add, -- 2.54.0