| ... | ... | @@ -1287,7 +1287,48 @@ fn walkInstruction( |
| 1287 | 1287 | .expr = .{ .sliceIndex = slice_index }, |
| 1288 | 1288 | }; |
| 1289 | 1289 | }, |
| 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 | }, |
| 1291 | 1332 | |
| 1292 | 1333 | // @check array_cat and array_mul |
| 1293 | 1334 | .add, |